From 3408718e85bb77bab569b4932f95143680d39f61 Mon Sep 17 00:00:00 2001 From: Omer Katz Date: Thu, 28 May 2020 14:29:43 +0200 Subject: [PATCH] heap: Fix bug in unified heap tracing by v8 Bug: chromium:1082438,chromium:1083860 Change-Id: I8f0defe0db0e420e970311bcaf0aebb3ccebb4b3 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2219928 Commit-Queue: Omer Katz Reviewed-by: Ulan Degenbaev Auto-Submit: Omer Katz Cr-Commit-Position: refs/heads/master@{#68042} --- src/heap/incremental-marking.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc index 1b133d62f8..cb1eff27b2 100644 --- a/src/heap/incremental-marking.cc +++ b/src/heap/incremental-marking.cc @@ -745,10 +745,13 @@ StepResult IncrementalMarking::EmbedderStep(double expected_duration_ms, } } } + // |deadline - heap_->MonotonicallyIncreasingTimeInMs()| could be negative, + // which means |local_tracer| won't do any actual tracing, so there is no + // need to check for |deadline <= heap_->MonotonicallyIncreasingTimeInMs()|. bool remote_tracing_done = local_tracer->Trace(deadline - heap_->MonotonicallyIncreasingTimeInMs()); double current = heap_->MonotonicallyIncreasingTimeInMs(); - local_tracer->SetEmbedderWorklistEmpty(true); + local_tracer->SetEmbedderWorklistEmpty(empty_worklist); *duration_ms = current - start; return (empty_worklist && remote_tracing_done) ? StepResult::kNoImmediateWork