| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index 06b55f84d1ea3fb23e633ba2a500ac8f4770daaf..951199d8166568caac66afe426a4299c92e3d172 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -4176,18 +4176,19 @@
|
| }
|
| }
|
|
|
| +bool Heap::MarkingDequesAreEmpty() {
|
| + return mark_compact_collector()->marking_deque()->IsEmpty() &&
|
| + local_embedder_heap_tracer()->NumberOfWrappersToTrace() == 0;
|
| +}
|
| +
|
| void Heap::FinalizeIncrementalMarkingIfComplete(
|
| GarbageCollectionReason gc_reason) {
|
| if (incremental_marking()->IsMarking() &&
|
| (incremental_marking()->IsReadyToOverApproximateWeakClosure() ||
|
| (!incremental_marking()->finalize_marking_completed() &&
|
| - mark_compact_collector()->marking_deque()->IsEmpty() &&
|
| - local_embedder_heap_tracer()->ShouldFinalizeIncrementalMarking()))) {
|
| + MarkingDequesAreEmpty()))) {
|
| FinalizeIncrementalMarking(gc_reason);
|
| - } else if (incremental_marking()->IsComplete() ||
|
| - (mark_compact_collector()->marking_deque()->IsEmpty() &&
|
| - local_embedder_heap_tracer()
|
| - ->ShouldFinalizeIncrementalMarking())) {
|
| + } else if (incremental_marking()->IsComplete() || MarkingDequesAreEmpty()) {
|
| CollectAllGarbage(current_gc_flags_, gc_reason);
|
| }
|
| }
|
| @@ -4199,16 +4200,13 @@
|
| tracer()->FinalIncrementalMarkCompactSpeedInBytesPerMillisecond();
|
| if (incremental_marking()->IsReadyToOverApproximateWeakClosure() ||
|
| (!incremental_marking()->finalize_marking_completed() &&
|
| - mark_compact_collector()->marking_deque()->IsEmpty() &&
|
| - local_embedder_heap_tracer()->ShouldFinalizeIncrementalMarking() &&
|
| + MarkingDequesAreEmpty() &&
|
| gc_idle_time_handler_->ShouldDoOverApproximateWeakClosure(
|
| idle_time_in_ms))) {
|
| FinalizeIncrementalMarking(gc_reason);
|
| return true;
|
| } else if (incremental_marking()->IsComplete() ||
|
| - (mark_compact_collector()->marking_deque()->IsEmpty() &&
|
| - local_embedder_heap_tracer()
|
| - ->ShouldFinalizeIncrementalMarking() &&
|
| + (MarkingDequesAreEmpty() &&
|
| gc_idle_time_handler_->ShouldDoFinalIncrementalMarkCompact(
|
| idle_time_in_ms, size_of_objects,
|
| final_incremental_mark_compact_speed_in_bytes_per_ms))) {
|
|
|