| Index: src/heap/mark-compact.h
|
| diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h
|
| index 19d72fc7d5e280456f6b1453bacb9634617a770d..1e082f67c67d0199447d499c02572c4694c2e369 100644
|
| --- a/src/heap/mark-compact.h
|
| +++ b/src/heap/mark-compact.h
|
| @@ -299,25 +299,24 @@
|
| : heap_(heap),
|
| pending_sweeper_tasks_semaphore_(0),
|
| sweeping_in_progress_(false),
|
| + late_pages_(false),
|
| num_sweeping_tasks_(0) {}
|
|
|
| bool sweeping_in_progress() { return sweeping_in_progress_; }
|
| + bool contains_late_pages() { return late_pages_; }
|
|
|
| void AddPage(AllocationSpace space, Page* page);
|
| + void AddLatePage(AllocationSpace space, Page* page);
|
|
|
| int ParallelSweepSpace(AllocationSpace identity, int required_freed_bytes,
|
| int max_pages = 0);
|
| int ParallelSweepPage(Page* page, AllocationSpace identity);
|
|
|
| - // After calling this function sweeping is considered to be in progress
|
| - // and the main thread can sweep lazily, but the background sweeper tasks
|
| - // are not running yet.
|
| void StartSweeping();
|
| - void StartSweeperTasks();
|
| + void StartSweepingHelper(AllocationSpace space_to_start);
|
| void EnsureCompleted();
|
| void EnsureNewSpaceCompleted();
|
| - bool AreSweeperTasksRunning();
|
| - bool IsSweepingCompleted(AllocationSpace space);
|
| + bool IsSweepingCompleted();
|
| void SweepOrWaitUntilSweepingCompleted(Page* page);
|
|
|
| void AddSweptPageSafe(PagedSpace* space, Page* page);
|
| @@ -344,6 +343,7 @@
|
| SweptList swept_list_[kAllocationSpaces];
|
| SweepingList sweeping_list_[kAllocationSpaces];
|
| bool sweeping_in_progress_;
|
| + bool late_pages_;
|
| base::AtomicNumber<intptr_t> num_sweeping_tasks_;
|
| };
|
|
|
| @@ -643,10 +643,21 @@
|
|
|
| void AbortTransitionArrays();
|
|
|
| - // Starts sweeping of spaces by contributing on the main thread and setting
|
| - // up other pages for sweeping. Does not start sweeper tasks.
|
| - void StartSweepSpaces();
|
| - void StartSweepSpace(PagedSpace* space);
|
| + // -----------------------------------------------------------------------
|
| + // Phase 2: Sweeping to clear mark bits and free non-live objects for
|
| + // a non-compacting collection.
|
| + //
|
| + // Before: Live objects are marked and non-live objects are unmarked.
|
| + //
|
| + // After: Live objects are unmarked, non-live regions have been added to
|
| + // their space's free list. Active eden semispace is compacted by
|
| + // evacuation.
|
| + //
|
| +
|
| + // If we are not compacting the heap, we simply sweep the spaces except
|
| + // for the large object space, clearing mark bits and adding unmarked
|
| + // regions to each space's free list.
|
| + void SweepSpaces();
|
|
|
| void EvacuateNewSpacePrologue();
|
|
|
| @@ -669,6 +680,9 @@
|
|
|
| void ReleaseEvacuationCandidates();
|
|
|
| + // Starts sweeping of a space by contributing on the main thread and setting
|
| + // up other pages for sweeping.
|
| + void StartSweepSpace(PagedSpace* space);
|
|
|
| #ifdef DEBUG
|
| friend class MarkObjectVisitor;
|
|
|