From: hpayer@chromium.org Date: Tue, 4 Nov 2014 15:20:09 +0000 (+0000) Subject: Fix predictable mode when job based sweeping is off. X-Git-Tag: upstream/4.7.83~5909 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=751289fb3a352fb6cffc02e1cddda77acc296f58;p=platform%2Fupstream%2Fv8.git Fix predictable mode when job based sweeping is off. BUG= R=jarin@chromium.org Review URL: https://codereview.chromium.org/697423002 Cr-Commit-Position: refs/heads/master@{#25113} git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@25113 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc index 5b19fca..2cefebf 100644 --- a/src/heap/mark-compact.cc +++ b/src/heap/mark-compact.cc @@ -456,7 +456,6 @@ class MarkCompactCollector::SweeperTask : public v8::Task { void MarkCompactCollector::StartSweeperThreads() { DCHECK(free_list_old_pointer_space_.get()->IsEmpty()); DCHECK(free_list_old_data_space_.get()->IsEmpty()); - sweeping_in_progress_ = true; V8::GetCurrentPlatform()->CallOnBackgroundThread( new SweeperTask(heap(), heap()->old_data_space()), v8::Platform::kShortRunningTask); @@ -471,13 +470,15 @@ void MarkCompactCollector::EnsureSweepingCompleted() { // If sweeping is not completed or not running at all, we try to complete it // here. - if (!IsSweepingCompleted()) { + if (FLAG_predictable || !IsSweepingCompleted()) { SweepInParallel(heap()->paged_space(OLD_DATA_SPACE), 0); SweepInParallel(heap()->paged_space(OLD_POINTER_SPACE), 0); } // Wait twice for both jobs. - pending_sweeper_jobs_semaphore_.Wait(); - pending_sweeper_jobs_semaphore_.Wait(); + if (!FLAG_predictable) { + pending_sweeper_jobs_semaphore_.Wait(); + pending_sweeper_jobs_semaphore_.Wait(); + } ParallelSweepSpacesComplete(); sweeping_in_progress_ = false; RefillFreeList(heap()->paged_space(OLD_DATA_SPACE)); @@ -4185,7 +4186,7 @@ void MarkCompactCollector::SweepSpaces() { SweepSpace(heap()->old_pointer_space(), CONCURRENT_SWEEPING); SweepSpace(heap()->old_data_space(), CONCURRENT_SWEEPING); } - + sweeping_in_progress_ = true; if (!FLAG_predictable) { StartSweeperThreads(); } diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc index 430f31d..2b696ea 100644 --- a/src/heap/spaces.cc +++ b/src/heap/spaces.cc @@ -2569,7 +2569,8 @@ void PagedSpace::PrepareForMarkCompact() { intptr_t PagedSpace::SizeOfObjects() { - DCHECK(heap()->mark_compact_collector()->sweeping_in_progress() || + DCHECK(FLAG_predictable || + heap()->mark_compact_collector()->sweeping_in_progress() || (unswept_free_bytes_ == 0)); return Size() - unswept_free_bytes_ - (limit() - top()); }