Chromium Code Reviews| Index: src/heap/spaces.h |
| diff --git a/src/heap/spaces.h b/src/heap/spaces.h |
| index 5c4a70a81be2033a1cc0abb285d4dd09dbdd6bea..d2b19a221edb52fe848d5cc1a1fc85874a9c47b0 100644 |
| --- a/src/heap/spaces.h |
| +++ b/src/heap/spaces.h |
| @@ -307,10 +307,6 @@ class MemoryChunk { |
| NEVER_EVACUATE, // May contain immortal immutables. |
| POPULAR_PAGE, // Slots buffer of this page overflowed on the previous GC. |
| - // WAS_SWEPT indicates that marking bits have been cleared by the sweeper, |
| - // otherwise marking bits are still intact. |
| - WAS_SWEPT, |
| - |
| // Large objects can have a progress bar in their page header. These object |
| // are scanned in increments and will be kept black while being scanned. |
| // Even if the mutator writes to them they will be kept black and a white |
| @@ -352,16 +348,14 @@ class MemoryChunk { |
| }; |
| // |kSweepingDone|: The page state when sweeping is complete or sweeping must |
| - // not be performed on that page. |
| - // |kSweepingFinalize|: A sweeper thread is done sweeping this page and will |
| - // not touch the page memory anymore. |
| - // |kSweepingInProgress|: This page is currently swept by a sweeper thread. |
| + // not be performed on that page. Sweeper threads that are done with their |
| + // work will set this value and not touch the page anymore. |
| // |kSweepingPending|: This page is ready for parallel sweeping. |
| - enum ParallelSweepingState { |
| + // |kSweepingInProgress|: This page is currently swept by a sweeper thread. |
| + enum ConcurrentSweepingState { |
| kSweepingDone, |
| - kSweepingFinalize, |
| + kSweepingPending, |
| kSweepingInProgress, |
| - kSweepingPending |
| }; |
| // Every n write barrier invocations we go to runtime even though |
| @@ -555,8 +549,8 @@ class MemoryChunk { |
| // Return all current flags. |
| intptr_t GetFlags() { return flags_; } |
| - AtomicValue<ParallelSweepingState>& parallel_sweeping_state() { |
| - return parallel_sweeping_; |
| + AtomicValue<ConcurrentSweepingState>& concurrent_sweeping_state() { |
| + return concurrent_sweeping_; |
| } |
| AtomicValue<ParallelCompactingState>& parallel_compaction_state() { |
| @@ -567,19 +561,6 @@ class MemoryChunk { |
| base::Mutex* mutex() { return mutex_; } |
| - // WaitUntilSweepingCompleted only works when concurrent sweeping is in |
| - // progress. In particular, when we know that right before this call a |
| - // sweeper thread was sweeping this page. |
| - void WaitUntilSweepingCompleted() { |
| - mutex_->Lock(); |
| - mutex_->Unlock(); |
| - DCHECK(SweepingCompleted()); |
| - } |
| - |
| - bool SweepingCompleted() { |
| - return parallel_sweeping_state().Value() <= kSweepingFinalize; |
| - } |
| - |
| // Manage live byte count (count of bytes known to be live, |
| // because they are marked black). |
| void ResetLiveBytes() { |
| @@ -758,7 +739,7 @@ class MemoryChunk { |
| AtomicValue<intptr_t> high_water_mark_; |
| base::Mutex* mutex_; |
| - AtomicValue<ParallelSweepingState> parallel_sweeping_; |
| + AtomicValue<ConcurrentSweepingState> concurrent_sweeping_; |
| AtomicValue<ParallelCompactingState> parallel_compaction_; |
| // PagedSpace free-list statistics. |
| @@ -864,9 +845,18 @@ class Page : public MemoryChunk { |
| void InitializeAsAnchor(PagedSpace* owner); |
| - bool WasSwept() { return IsFlagSet(WAS_SWEPT); } |
| - void SetWasSwept() { SetFlag(WAS_SWEPT); } |
| - void ClearWasSwept() { ClearFlag(WAS_SWEPT); } |
| + // WaitUntilSweepingCompleted only works when concurrent sweeping is in |
| + // progress. In particular, when we know that right before this call a |
| + // sweeper thread was sweeping this page. |
| + void WaitUntilSweepingCompleted() { |
| + mutex_->Lock(); |
| + mutex_->Unlock(); |
| + DCHECK(SweepingCompleted()); |
| + } |
| + |
| + bool SweepingCompleted() { |
| + return concurrent_sweeping_state().Value() == kSweepingDone; |
| + } |
| void ResetFreeListStatistics(); |
| @@ -2076,7 +2066,7 @@ class PagedSpace : public Space { |
| void IncreaseCapacity(int size); |
| // Releases an unused page and shrinks the space. |
| - void ReleasePage(Page* page); |
| + void ReleasePage(Page* page, bool evict_free_list_items); |
| // The dummy page that anchors the linked list of pages. |
| Page* anchor() { return &anchor_; } |
| @@ -2103,13 +2093,6 @@ class PagedSpace : public Space { |
| static void ResetCodeStatistics(Isolate* isolate); |
| #endif |
| - // Evacuation candidates are swept by evacuator. Needs to return a valid |
| - // result before _and_ after evacuation has finished. |
| - static bool ShouldBeSweptBySweeperThreads(Page* p) { |
|
Michael Lippautz
2016/01/21 15:32:15
It's dead Jim.
|
| - return !p->IsEvacuationCandidate() && |
| - !p->IsFlagSet(Page::RESCAN_ON_EVACUATION) && !p->WasSwept(); |
| - } |
| - |
| // This function tries to steal size_in_bytes memory from the sweeper threads |
| // free-lists. If it does not succeed stealing enough memory, it will wait |
| // for the sweeper threads to finish sweeping. |