Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index e537689c4a5ca4ba35530fc8d81a55f3bfd37596..5ffea25488b28b934501308998cf30899752bdc0 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -63,7 +63,8 @@ MarkCompactCollector::MarkCompactCollector(Heap* heap) |
compacting_(false), |
sweeping_in_progress_(false), |
pending_sweeper_tasks_semaphore_(0), |
- pending_compaction_tasks_semaphore_(0) { |
+ pending_compaction_tasks_semaphore_(0), |
+ page_parallel_job_semaphore_(0) { |
} |
#ifdef VERIFY_HEAP |
@@ -3108,7 +3109,8 @@ class EvacuationJobTraits { |
void MarkCompactCollector::EvacuatePagesInParallel() { |
PageParallelJob<EvacuationJobTraits> job( |
- heap_, heap_->isolate()->cancelable_task_manager()); |
+ heap_, heap_->isolate()->cancelable_task_manager(), |
+ &page_parallel_job_semaphore_); |
int abandoned_pages = 0; |
intptr_t live_bytes = 0; |
@@ -3493,9 +3495,9 @@ int NumberOfPointerUpdateTasks(int pages) { |
} |
template <PointerDirection direction> |
-void UpdatePointersInParallel(Heap* heap) { |
+void UpdatePointersInParallel(Heap* heap, base::Semaphore* semaphore) { |
PageParallelJob<PointerUpdateJobTraits<direction> > job( |
- heap, heap->isolate()->cancelable_task_manager()); |
+ heap, heap->isolate()->cancelable_task_manager(), semaphore); |
RememberedSet<direction>::IterateMemoryChunks( |
heap, [&job](MemoryChunk* chunk) { job.AddPage(chunk, 0); }); |
PointersUpdatingVisitor visitor(heap); |
@@ -3525,9 +3527,9 @@ class ToSpacePointerUpdateJobTraits { |
} |
}; |
-void UpdateToSpacePointersInParallel(Heap* heap) { |
+void UpdateToSpacePointersInParallel(Heap* heap, base::Semaphore* semaphore) { |
PageParallelJob<ToSpacePointerUpdateJobTraits> job( |
- heap, heap->isolate()->cancelable_task_manager()); |
+ heap, heap->isolate()->cancelable_task_manager(), semaphore); |
Address space_start = heap->new_space()->bottom(); |
Address space_end = heap->new_space()->top(); |
NewSpacePageIterator it(space_start, space_end); |
@@ -3551,17 +3553,17 @@ void MarkCompactCollector::UpdatePointersAfterEvacuation() { |
{ |
TRACE_GC(heap()->tracer(), |
GCTracer::Scope::MC_EVACUATE_UPDATE_POINTERS_TO_NEW); |
- UpdateToSpacePointersInParallel(heap_); |
+ UpdateToSpacePointersInParallel(heap_, &page_parallel_job_semaphore_); |
// Update roots. |
heap_->IterateRoots(&updating_visitor, VISIT_ALL_IN_SWEEP_NEWSPACE); |
- UpdatePointersInParallel<OLD_TO_NEW>(heap_); |
+ UpdatePointersInParallel<OLD_TO_NEW>(heap_, &page_parallel_job_semaphore_); |
} |
{ |
Heap* heap = this->heap(); |
TRACE_GC(heap->tracer(), |
GCTracer::Scope::MC_EVACUATE_UPDATE_POINTERS_TO_EVACUATED); |
- UpdatePointersInParallel<OLD_TO_OLD>(heap_); |
+ UpdatePointersInParallel<OLD_TO_OLD>(heap_, &page_parallel_job_semaphore_); |
} |
{ |