From ca3c6888c18c291a4eefb880a77b2725e5297bfb Mon Sep 17 00:00:00 2001 From: Hannes Payer Date: Mon, 17 Nov 2014 10:39:42 +0100 Subject: [PATCH] Fix concurrent sweeping in predictable mode and bring --concurrent-sweeping flag back. BUG= R=jochen@chromium.org Review URL: https://codereview.chromium.org/726363002 Cr-Commit-Position: refs/heads/master@{#25370} --- src/flag-definitions.h | 2 ++ src/heap/incremental-marking.cc | 3 ++- src/heap/mark-compact.cc | 6 +++--- src/heap/spaces.cc | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/flag-definitions.h b/src/flag-definitions.h index deaae06..df24ea2 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -571,6 +571,7 @@ DEFINE_BOOL(age_code, true, "old code (required for code flushing)") DEFINE_BOOL(incremental_marking, true, "use incremental marking") DEFINE_BOOL(incremental_marking_steps, true, "do incremental marking steps") +DEFINE_BOOL(concurrent_sweeping, true, "use concurrent sweeping") DEFINE_BOOL(trace_incremental_marking, false, "trace progress of the incremental marking") DEFINE_BOOL(track_gc_object_stats, false, @@ -706,6 +707,7 @@ DEFINE_BOOL(profile_hydrogen_code_stub_compilation, false, DEFINE_BOOL(predictable, false, "enable predictable mode") DEFINE_NEG_IMPLICATION(predictable, concurrent_recompilation) DEFINE_NEG_IMPLICATION(predictable, concurrent_osr) +DEFINE_NEG_IMPLICATION(predictable, concurrent_sweeping) // diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc index dde0621..9806b4e 100644 --- a/src/heap/incremental-marking.cc +++ b/src/heap/incremental-marking.cc @@ -936,7 +936,8 @@ intptr_t IncrementalMarking::Step(intptr_t allocated_bytes, if (state_ == SWEEPING) { if (heap_->mark_compact_collector()->sweeping_in_progress() && - heap_->mark_compact_collector()->IsSweepingCompleted()) { + (heap_->mark_compact_collector()->IsSweepingCompleted() || + !FLAG_concurrent_sweeping)) { heap_->mark_compact_collector()->EnsureSweepingCompleted(); } if (!heap_->mark_compact_collector()->sweeping_in_progress()) { diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc index 908b686..a206b1d 100644 --- a/src/heap/mark-compact.cc +++ b/src/heap/mark-compact.cc @@ -470,12 +470,12 @@ void MarkCompactCollector::EnsureSweepingCompleted() { // If sweeping is not completed or not running at all, we try to complete it // here. - if (FLAG_predictable || !IsSweepingCompleted()) { + if (!FLAG_concurrent_sweeping || !IsSweepingCompleted()) { SweepInParallel(heap()->paged_space(OLD_DATA_SPACE), 0); SweepInParallel(heap()->paged_space(OLD_POINTER_SPACE), 0); } // Wait twice for both jobs. - if (!FLAG_predictable) { + if (FLAG_concurrent_sweeping) { pending_sweeper_jobs_semaphore_.Wait(); pending_sweeper_jobs_semaphore_.Wait(); } @@ -4145,7 +4145,7 @@ void MarkCompactCollector::SweepSpaces() { SweepSpace(heap()->old_data_space(), CONCURRENT_SWEEPING); } sweeping_in_progress_ = true; - if (!FLAG_predictable) { + if (FLAG_concurrent_sweeping) { StartSweeperThreads(); } } diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc index 2b696ea..30b141f 100644 --- a/src/heap/spaces.cc +++ b/src/heap/spaces.cc @@ -2569,7 +2569,7 @@ void PagedSpace::PrepareForMarkCompact() { intptr_t PagedSpace::SizeOfObjects() { - DCHECK(FLAG_predictable || + DCHECK(!FLAG_concurrent_sweeping || heap()->mark_compact_collector()->sweeping_in_progress() || (unswept_free_bytes_ == 0)); return Size() - unswept_free_bytes_ - (limit() - top()); -- 2.7.4