Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index 8986087486995ac660de31f0d164b0a03ebc37f4..3e8923987b9966581fdb8cc2de9fba48623dd0d3 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -4489,12 +4489,17 @@ bool Heap::IdleNotification(double deadline_in_seconds) { |
if (incremental_marking()->IsStopped()) { |
incremental_marking()->Start(); |
} |
- incremental_marking()->Step(action.parameter, |
- IncrementalMarking::NO_GC_VIA_STACK_GUARD, |
- IncrementalMarking::FORCE_MARKING, |
- IncrementalMarking::DO_NOT_FORCE_COMPLETION); |
- double remaining_idle_time_in_ms = |
- deadline_in_ms - MonotonicallyIncreasingTimeInMs(); |
+ double remaining_idle_time_in_ms = 0.0; |
+ do { |
+ incremental_marking()->Step( |
+ action.parameter, IncrementalMarking::NO_GC_VIA_STACK_GUARD, |
+ IncrementalMarking::FORCE_MARKING, |
+ IncrementalMarking::DO_NOT_FORCE_COMPLETION); |
+ remaining_idle_time_in_ms = |
+ deadline_in_ms - MonotonicallyIncreasingTimeInMs(); |
+ } while (remaining_idle_time_in_ms >= 2 && |
jochen (gone - plz use gerrit)
2014/12/02 10:30:31
maybe 2.0 * kIncrementalMarkingStepTimeInMs?
Hannes Payer (out of office)
2014/12/02 10:37:54
Done.
|
+ !incremental_marking()->IsComplete() && |
+ !mark_compact_collector_.marking_deque()->IsEmpty()); |
if (remaining_idle_time_in_ms > 0.0) { |
TryFinalizeIdleIncrementalMarking( |
remaining_idle_time_in_ms, heap_state.size_of_objects, |