Index: src/heap/spaces.h |
diff --git a/src/heap/spaces.h b/src/heap/spaces.h |
index 5c4a70a81be2033a1cc0abb285d4dd09dbdd6bea..76002212021a49c90d8cea40af55d9a9c7650a53 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(SweepingDone()); |
+ } |
+ |
+ bool SweepingDone() { |
+ 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) { |
- 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. |