Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index f1b8c474a81c486a816d500dd88870a336b0c2da..d07049cb9aadbfdbd34b37b0e4fbe27729db96d7 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -4635,10 +4635,12 @@ void Heap::FinalizeIncrementalMarkingIfComplete(const char* comment) { |
} |
-bool Heap::TryFinalizeIdleIncrementalMarking( |
- double idle_time_in_ms, size_t size_of_objects, |
- size_t final_incremental_mark_compact_speed_in_bytes_per_ms) { |
- if (FLAG_overapproximate_weak_closure && incremental_marking()->IsMarking() && |
+bool Heap::TryFinalizeIdleIncrementalMarking(double idle_time_in_ms) { |
+ size_t size_of_objects = static_cast<size_t>(SizeOfObjects()); |
+ size_t final_incremental_mark_compact_speed_in_bytes_per_ms = |
+ static_cast<size_t>( |
+ tracer()->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond()); |
+ if (FLAG_overapproximate_weak_closure && |
(incremental_marking()->IsReadyToOverApproximateWeakClosure() || |
(!incremental_marking()->weak_closure_was_overapproximated() && |
mark_compact_collector_.marking_deque()->IsEmpty() && |
@@ -4665,19 +4667,9 @@ GCIdleTimeHandler::HeapState Heap::ComputeHeapState() { |
heap_state.contexts_disposed = contexts_disposed_; |
heap_state.contexts_disposal_rate = |
tracer()->ContextDisposalRateInMilliseconds(); |
- heap_state.size_of_objects = static_cast<size_t>(SizeOfObjects()); |
heap_state.incremental_marking_stopped = incremental_marking()->IsStopped(); |
- heap_state.sweeping_in_progress = |
- mark_compact_collector()->sweeping_in_progress(); |
- heap_state.sweeping_completed = |
- mark_compact_collector()->IsSweepingCompleted(); |
heap_state.mark_compact_speed_in_bytes_per_ms = |
static_cast<size_t>(tracer()->MarkCompactSpeedInBytesPerMillisecond()); |
- heap_state.incremental_marking_speed_in_bytes_per_ms = static_cast<size_t>( |
- tracer()->IncrementalMarkingSpeedInBytesPerMillisecond()); |
- heap_state.final_incremental_mark_compact_speed_in_bytes_per_ms = |
- static_cast<size_t>( |
- tracer()->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond()); |
heap_state.scavenge_speed_in_bytes_per_ms = |
static_cast<size_t>(tracer()->ScavengeSpeedInBytesPerMillisecond()); |
heap_state.used_new_space_size = new_space_.Size(); |
@@ -4722,14 +4714,15 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action, |
case DONE: |
result = true; |
break; |
- case DO_INCREMENTAL_MARKING: { |
- const double remaining_idle_time_in_ms = |
- AdvanceIncrementalMarking(action.parameter, deadline_in_ms, |
- IncrementalMarking::IdleStepActions()); |
- if (remaining_idle_time_in_ms > 0.0) { |
- action.additional_work = TryFinalizeIdleIncrementalMarking( |
- remaining_idle_time_in_ms, heap_state.size_of_objects, |
- heap_state.final_incremental_mark_compact_speed_in_bytes_per_ms); |
+ 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; |
} |
break; |
} |
@@ -4742,9 +4735,6 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action, |
case DO_SCAVENGE: |
CollectGarbage(NEW_SPACE, "idle notification: scavenge"); |
break; |
- case DO_FINALIZE_SWEEPING: |
- mark_compact_collector()->EnsureSweepingCompleted(); |
- break; |
case DO_NOTHING: |
break; |
} |