Index: src/heap/incremental-marking.cc |
diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc |
index 185cb1b53780f4b9982fef2dabc2e1170f3715e7..9a5733bc06610841a22c15b74b922c9eeb4f9ebb 100644 |
--- a/src/heap/incremental-marking.cc |
+++ b/src/heap/incremental-marking.cc |
@@ -32,9 +32,7 @@ IncrementalMarking::IncrementalMarking(Heap* heap) |
was_activated_(false), |
black_allocation_(false), |
finalize_marking_completed_(false), |
- request_type_(NONE), |
- new_generation_observer_(*this, kAllocatedThreshold), |
- old_generation_observer_(*this, kAllocatedThreshold) {} |
+ request_type_(NONE) {} |
bool IncrementalMarking::BaseRecordWrite(HeapObject* obj, Object* value) { |
HeapObject* value_heap_obj = HeapObject::cast(value); |
@@ -489,16 +487,6 @@ void IncrementalMarking::Start(GarbageCollectionReason gc_reason) { |
state_ = SWEEPING; |
} |
- SpaceIterator it(heap_); |
- while (it.has_next()) { |
- Space* space = it.next(); |
- if (space == heap_->new_space()) { |
- space->AddAllocationObserver(&new_generation_observer_); |
- } else { |
- space->AddAllocationObserver(&old_generation_observer_); |
- } |
- } |
- |
incremental_marking_job()->Start(heap_); |
} |
@@ -957,16 +945,6 @@ void IncrementalMarking::Stop() { |
Max(0, old_generation_size_mb - old_generation_limit_mb)); |
} |
- SpaceIterator it(heap_); |
- while (it.has_next()) { |
- Space* space = it.next(); |
- if (space == heap_->new_space()) { |
- space->RemoveAllocationObserver(&new_generation_observer_); |
- } else { |
- space->RemoveAllocationObserver(&old_generation_observer_); |
- } |
- } |
- |
IncrementalMarking::set_should_hurry(false); |
if (IsMarking()) { |
PatchIncrementalMarkingRecordWriteStubs(heap_, |
@@ -1085,30 +1063,33 @@ void IncrementalMarking::AdvanceIncrementalMarkingOnAllocation() { |
return; |
} |
- size_t bytes_to_process = |
- StepSizeToKeepUpWithAllocations() + StepSizeToMakeProgress(); |
- |
- if (bytes_to_process >= IncrementalMarking::kAllocatedThreshold) { |
- // The first step after Scavenge will see many allocated bytes. |
- // Cap the step size to distribute the marking work more uniformly. |
- size_t max_step_size = GCIdleTimeHandler::EstimateMarkingStepSize( |
- kMaxStepSizeInMs, |
- heap()->tracer()->IncrementalMarkingSpeedInBytesPerMillisecond()); |
- bytes_to_process = Min(bytes_to_process, max_step_size); |
- |
- size_t bytes_processed = 0; |
- if (bytes_marked_ahead_of_schedule_ >= bytes_to_process) { |
- // Steps performed in tasks have put us ahead of schedule. |
- // We skip processing of marking dequeue here and thus |
- // shift marking time from inside V8 to standalone tasks. |
- bytes_marked_ahead_of_schedule_ -= bytes_to_process; |
- bytes_processed = bytes_to_process; |
- } else { |
- bytes_processed = Step(bytes_to_process, GC_VIA_STACK_GUARD, |
- FORCE_COMPLETION, StepOrigin::kV8); |
- } |
- bytes_allocated_ -= Min(bytes_allocated_, bytes_processed); |
+ size_t bytes_to_process = StepSizeToKeepUpWithAllocations(); |
+ |
+ if (bytes_to_process < IncrementalMarking::kAllocatedThreshold) { |
+ return; |
+ } |
+ |
+ bytes_to_process += StepSizeToMakeProgress(); |
+ |
+ // The first step after Scavenge will see many allocated bytes. |
+ // Cap the step size to distribute the marking work more uniformly. |
+ size_t max_step_size = GCIdleTimeHandler::EstimateMarkingStepSize( |
+ kMaxStepSizeInMs, |
+ heap()->tracer()->IncrementalMarkingSpeedInBytesPerMillisecond()); |
+ bytes_to_process = Min(bytes_to_process, max_step_size); |
+ |
+ size_t bytes_processed = 0; |
+ if (bytes_marked_ahead_of_schedule_ >= bytes_to_process) { |
+ // Steps performed in tasks have put us ahead of schedule. |
+ // We skip processing of marking dequeue here and thus |
+ // shift marking time from inside V8 to standalone tasks. |
+ bytes_marked_ahead_of_schedule_ -= bytes_to_process; |
+ bytes_processed = bytes_to_process; |
+ } else { |
+ bytes_processed = Step(bytes_to_process, GC_VIA_STACK_GUARD, |
+ FORCE_COMPLETION, StepOrigin::kV8); |
} |
+ bytes_allocated_ -= Min(bytes_allocated_, bytes_processed); |
} |
size_t IncrementalMarking::Step(size_t bytes_to_process, |