| Index: src/incremental-marking.cc
|
| diff --git a/src/incremental-marking.cc b/src/incremental-marking.cc
|
| index bacbb93ad2e8cb6a335c577e8ccf69ade8c82d63..e19d6e28f69f9141b3d47756bcf2d3129a9a6eaf 100644
|
| --- a/src/incremental-marking.cc
|
| +++ b/src/incremental-marking.cc
|
| @@ -54,7 +54,8 @@ IncrementalMarking::IncrementalMarking(Heap* heap)
|
| should_hurry_(false),
|
| marking_speed_(0),
|
| allocated_(0),
|
| - no_marking_scope_depth_(0) {
|
| + no_marking_scope_depth_(0),
|
| + unscanned_bytes_of_large_object_(0) {
|
| }
|
|
|
|
|
| @@ -241,6 +242,7 @@ class IncrementalMarkingMarkingVisitor
|
| chunk->progress_bar());
|
| int end_offset = Min(object_size,
|
| start_offset + kProgressBarScanningChunk);
|
| + int already_scanned_offset = start_offset;
|
| bool scan_until_end = false;
|
| do {
|
| VisitPointersWithAnchor(heap,
|
| @@ -254,6 +256,8 @@ class IncrementalMarkingMarkingVisitor
|
| chunk->set_progress_bar(start_offset);
|
| if (start_offset < object_size) {
|
| heap->incremental_marking()->marking_deque()->UnshiftGrey(object);
|
| + heap->incremental_marking()->NotifyIncompleteScanOfObject(
|
| + object_size - (start_offset - already_scanned_offset));
|
| }
|
| } else {
|
| FixedArrayVisitor::Visit(map, object);
|
| @@ -739,8 +743,9 @@ void IncrementalMarking::ProcessMarkingDeque(intptr_t bytes_to_process) {
|
| if (map == filler_map) continue;
|
|
|
| int size = obj->SizeFromMap(map);
|
| - bytes_to_process -= size;
|
| + unscanned_bytes_of_large_object_ = 0;
|
| VisitObject(map, obj, size);
|
| + bytes_to_process -= (size - unscanned_bytes_of_large_object_);
|
| }
|
| }
|
|
|
|
|