Chromium Code Reviews| Index: src/heap/heap.cc |
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
| index ad8d1466b92d8d6c43167914f395c6a8dc7394a2..adf1f25563b12cf994d3ca720a550a7189120a3b 100644 |
| --- a/src/heap/heap.cc |
| +++ b/src/heap/heap.cc |
| @@ -937,7 +937,7 @@ void Heap::ReportExternalMemoryPressure() { |
| pressure * kMaxStepSizeOnExternalLimit; |
| incremental_marking()->AdvanceIncrementalMarking( |
| deadline, IncrementalMarking::GC_VIA_STACK_GUARD, |
| - IncrementalMarking::FORCE_COMPLETION); |
| + IncrementalMarking::FORCE_COMPLETION, StepOrigin::kV8); |
| } |
| } |
| @@ -1054,7 +1054,9 @@ bool Heap::CollectGarbage(GarbageCollector collector, |
| // Start incremental marking for the next cycle. The heap snapshot |
| // generator needs incremental marking to stay off after it aborted. |
| - if (!ShouldAbortIncrementalMarking()) { |
| + // We do this only for scavener to avoid a loop where mark-compact |
|
Michael Lippautz
2016/09/07 15:46:24
nit: scavenger
|
| + // causes another mark-compact. |
| + if (collector == SCAVENGER && !ShouldAbortIncrementalMarking()) { |
| StartIncrementalMarkingIfAllocationLimitIsReached(kNoGCFlags, |
| kNoGCCallbackFlags); |
| } |
| @@ -4300,15 +4302,16 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action, |
| result = true; |
| break; |
| case DO_INCREMENTAL_STEP: { |
| - if (incremental_marking()->incremental_marking_job()->IdleTaskPending()) { |
| - result = true; |
| - } else { |
| - incremental_marking() |
| - ->incremental_marking_job() |
| - ->NotifyIdleTaskProgress(); |
| - result = IncrementalMarkingJob::IdleTask::Step(this, deadline_in_ms) == |
| - IncrementalMarkingJob::IdleTask::kDone; |
| + const double remaining_idle_time_in_ms = |
| + incremental_marking()->AdvanceIncrementalMarking( |
| + deadline_in_ms, IncrementalMarking::NO_GC_VIA_STACK_GUARD, |
| + IncrementalMarking::FORCE_COMPLETION, StepOrigin::kTask); |
| + if (remaining_idle_time_in_ms > 0.0) { |
| + TryFinalizeIdleIncrementalMarking( |
| + remaining_idle_time_in_ms, |
| + GarbageCollectionReason::kFinalizeMarkingViaTask); |
| } |
| + result = incremental_marking()->IsStopped(); |
| break; |
| } |
| case DO_FULL_GC: { |