Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index ae9f4fd71ce0e88a25167112279a7cc1d5d54de6..6766269154a2c9be49197e1cc6c7babe24ffce3a 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -923,10 +923,8 @@ void Heap::ReportExternalMemoryPressure(const char* gc_reason) { |
double deadline = MonotonicallyIncreasingTimeInMs() + |
FLAG_external_allocation_limit_incremental_time; |
incremental_marking()->AdvanceIncrementalMarking( |
- deadline, |
- IncrementalMarking::StepActions(IncrementalMarking::GC_VIA_STACK_GUARD, |
- IncrementalMarking::FORCE_MARKING, |
- IncrementalMarking::FORCE_COMPLETION)); |
+ deadline, IncrementalMarking::GC_VIA_STACK_GUARD, |
+ IncrementalMarking::FORCE_COMPLETION); |
} |
} |
@@ -1043,9 +1041,9 @@ bool Heap::CollectGarbage(GarbageCollector collector, const char* gc_reason, |
// Start incremental marking for the next cycle. The heap snapshot |
// generator needs incremental marking to stay off after it aborted. |
- if (!ShouldAbortIncrementalMarking() && incremental_marking()->IsStopped() && |
- incremental_marking()->ShouldActivateEvenWithoutIdleNotification()) { |
- StartIncrementalMarking(kNoGCFlags, kNoGCCallbackFlags, "GC epilogue"); |
+ if (!ShouldAbortIncrementalMarking()) { |
+ StartIncrementalMarkingIfNeeded(kNoGCFlags, kNoGCCallbackFlags, |
+ "GC epilogue"); |
} |
return next_gc_likely_to_collect_more; |
@@ -1081,6 +1079,13 @@ void Heap::StartIncrementalMarking(int gc_flags, |
incremental_marking()->Start(reason); |
} |
+void Heap::StartIncrementalMarkingIfNeeded( |
+ int gc_flags, const GCCallbackFlags gc_callback_flags, const char* reason) { |
+ if (incremental_marking()->IsStopped() && |
+ incremental_marking()->ShouldActivateEvenWithoutIdleNotification()) { |
+ StartIncrementalMarking(gc_flags, gc_callback_flags, reason); |
+ } |
+} |
void Heap::StartIdleIncrementalMarking() { |
gc_idle_time_handler_->ResetNoProgressCounter(); |