| Index: src/heap/mark-compact.cc
|
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
|
| index 3433ee6ef69355ceec78252385b9db19799f915a..3442eeef668d1611739f576e64129d16999ba42f 100644
|
| --- a/src/heap/mark-compact.cc
|
| +++ b/src/heap/mark-compact.cc
|
| @@ -479,19 +479,30 @@ void MarkCompactCollector::ClearMarkbits() {
|
|
|
| class MarkCompactCollector::SweeperTask : public v8::Task {
|
| public:
|
| - SweeperTask(Heap* heap, PagedSpace* space) : heap_(heap), space_(space) {}
|
| + SweeperTask(Heap* heap, AllocationSpace space_to_start)
|
| + : heap_(heap), space_to_start_(space_to_start) {}
|
|
|
| virtual ~SweeperTask() {}
|
|
|
| private:
|
| // v8::Task overrides.
|
| void Run() override {
|
| - heap_->mark_compact_collector()->SweepInParallel(space_, 0);
|
| + DCHECK_GE(space_to_start_, FIRST_PAGED_SPACE);
|
| + DCHECK_LE(space_to_start_, LAST_PAGED_SPACE);
|
| + const int offset = space_to_start_ - FIRST_PAGED_SPACE;
|
| + const int num_spaces = LAST_PAGED_SPACE - FIRST_PAGED_SPACE + 1;
|
| + for (int i = 0; i < num_spaces; i++) {
|
| + const int space_id = FIRST_PAGED_SPACE + ((i + offset) % num_spaces);
|
| + DCHECK_GE(space_id, FIRST_PAGED_SPACE);
|
| + DCHECK_LE(space_id, LAST_PAGED_SPACE);
|
| + heap_->mark_compact_collector()->SweepInParallel(
|
| + heap_->paged_space(space_id), 0);
|
| + }
|
| heap_->mark_compact_collector()->pending_sweeper_tasks_semaphore_.Signal();
|
| }
|
|
|
| Heap* heap_;
|
| - PagedSpace* space_;
|
| + AllocationSpace space_to_start_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SweeperTask);
|
| };
|
| @@ -502,14 +513,11 @@ void MarkCompactCollector::StartSweeperThreads() {
|
| DCHECK(free_list_code_space_.get()->IsEmpty());
|
| DCHECK(free_list_map_space_.get()->IsEmpty());
|
| V8::GetCurrentPlatform()->CallOnBackgroundThread(
|
| - new SweeperTask(heap(), heap()->old_space()),
|
| - v8::Platform::kShortRunningTask);
|
| + new SweeperTask(heap(), OLD_SPACE), v8::Platform::kShortRunningTask);
|
| V8::GetCurrentPlatform()->CallOnBackgroundThread(
|
| - new SweeperTask(heap(), heap()->code_space()),
|
| - v8::Platform::kShortRunningTask);
|
| + new SweeperTask(heap(), CODE_SPACE), v8::Platform::kShortRunningTask);
|
| V8::GetCurrentPlatform()->CallOnBackgroundThread(
|
| - new SweeperTask(heap(), heap()->map_space()),
|
| - v8::Platform::kShortRunningTask);
|
| + new SweeperTask(heap(), MAP_SPACE), v8::Platform::kShortRunningTask);
|
| }
|
|
|
|
|
|
|