Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index 951199d8166568caac66afe426a4299c92e3d172..8ff555cd34c473361dae85af2827104ac8e2133e 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -4186,9 +4186,13 @@ void Heap::FinalizeIncrementalMarkingIfComplete( |
if (incremental_marking()->IsMarking() && |
(incremental_marking()->IsReadyToOverApproximateWeakClosure() || |
(!incremental_marking()->finalize_marking_completed() && |
- MarkingDequesAreEmpty()))) { |
+ mark_compact_collector()->marking_deque()->IsEmpty() && |
+ local_embedder_heap_tracer()->ShouldFinalizeIncrementalMarking()))) { |
FinalizeIncrementalMarking(gc_reason); |
- } else if (incremental_marking()->IsComplete() || MarkingDequesAreEmpty()) { |
+ } else if (incremental_marking()->IsComplete() || |
+ (mark_compact_collector()->marking_deque()->IsEmpty() && |
+ local_embedder_heap_tracer() |
+ ->ShouldFinalizeIncrementalMarking())) { |
CollectAllGarbage(current_gc_flags_, gc_reason); |
} |
} |
@@ -4200,13 +4204,16 @@ bool Heap::TryFinalizeIdleIncrementalMarking( |
tracer()->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond(); |
if (incremental_marking()->IsReadyToOverApproximateWeakClosure() || |
(!incremental_marking()->finalize_marking_completed() && |
- MarkingDequesAreEmpty() && |
+ mark_compact_collector()->marking_deque()->IsEmpty() && |
+ local_embedder_heap_tracer()->ShouldFinalizeIncrementalMarking() && |
gc_idle_time_handler_->ShouldDoOverApproximateWeakClosure( |
idle_time_in_ms))) { |
FinalizeIncrementalMarking(gc_reason); |
return true; |
} else if (incremental_marking()->IsComplete() || |
- (MarkingDequesAreEmpty() && |
+ (mark_compact_collector()->marking_deque()->IsEmpty() && |
+ local_embedder_heap_tracer() |
+ ->ShouldFinalizeIncrementalMarking() && |
gc_idle_time_handler_->ShouldDoFinalIncrementalMarkCompact( |
idle_time_in_ms, size_of_objects, |
final_incremental_mark_compact_speed_in_bytes_per_ms))) { |