BUG=
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/
252123006
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@21058
ce2b1a6d-e550-0410-aec6-
3dcde31c8c00
}
if (state_ == SWEEPING) {
+ if (heap_->mark_compact_collector()->IsConcurrentSweepingInProgress() &&
+ heap_->mark_compact_collector()->IsSweepingCompleted()) {
+ heap_->mark_compact_collector()->WaitUntilSweepingCompleted();
+ }
if (!heap_->mark_compact_collector()->IsConcurrentSweepingInProgress()) {
bytes_scanned_ = 0;
StartMarking(PREVENT_COMPACTION);
}
+bool MarkCompactCollector::IsSweepingCompleted() {
+ for (int i = 0; i < isolate()->num_sweeper_threads(); i++) {
+ if (!isolate()->sweeper_threads()[i]->SweepingCompleted()) {
+ return false;
+ }
+ }
+ if (FLAG_job_based_sweeping) {
+ if (!pending_sweeper_jobs_semaphore_.WaitFor(TimeDelta::FromSeconds(0))) {
+ return false;
+ }
+ pending_sweeper_jobs_semaphore_.Signal();
+ }
+ return true;
+}
+
+
void MarkCompactCollector::RefillFreeList(PagedSpace* space) {
FreeList* free_list;
void WaitUntilSweepingCompleted();
+ bool IsSweepingCompleted();
+
void RefillFreeList(PagedSpace* space);
bool AreSweeperThreadsActivated();
}
+bool SweeperThread::SweepingCompleted() {
+ bool value = end_sweeping_semaphore_.WaitFor(TimeDelta::FromSeconds(0));
+ if (value) {
+ end_sweeping_semaphore_.Signal();
+ }
+ return value;
+}
+
+
int SweeperThread::NumberOfThreads(int max_available) {
if (!FLAG_concurrent_sweeping && !FLAG_parallel_sweeping) return 0;
if (FLAG_sweeper_threads > 0) return FLAG_sweeper_threads;
void Stop();
void StartSweeping();
void WaitForSweeperThread();
+ bool SweepingCompleted();
static int NumberOfThreads(int max_available);