Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(952)

Unified Diff: src/spaces.h

Issue 6970004: Introduce lazy sweeping. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/mark-compact.cc ('K') | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/spaces.h
diff --git a/src/spaces.h b/src/spaces.h
index 10813c2af2cf15ba1e421211a4baa28568f86909..9bed50962fbe6b37e43d7efc157326a308de7e68 100644
--- a/src/spaces.h
+++ b/src/spaces.h
@@ -1014,6 +1014,12 @@ class AllocationStats BASE_EMBEDDED {
waste_ = 0;
}
+ void ClearSizeWaste() {
+ size_ = capacity_;
+ waste_ = 0;
+ }
+
Erik Corry 2011/05/09 21:20:11 Extra blank line here.
+
// Reset the allocation statistics (ie, available = capacity with no
// wasted or allocated bytes).
void Reset() {
@@ -1231,7 +1237,9 @@ class PagedSpace : public Space {
// capacity and the size when it is encountered. As free spaces are
// discovered during the sweeping they are subtracted from the size and added
// to the available and wasted totals.
- void ClearStats() { accounting_stats_.Clear(); }
+ void ClearStats() {
+ accounting_stats_.ClearSizeWaste();
+ }
// Available bytes without growing. These are the bytes on the free list.
// The bytes in the linear allocation area are not included in this total
@@ -1267,9 +1275,10 @@ class PagedSpace : public Space {
// the free list or accounted as waste.
// If add_to_freelist is false then just accounting stats are updated and
// no attempt to add area to free list is made.
- void Free(Address start, int size_in_bytes) {
+ int Free(Address start, int size_in_bytes) {
int wasted = free_list_.Free(start, size_in_bytes);
accounting_stats_.DeallocateBytes(size_in_bytes - wasted);
+ return size_in_bytes - wasted;
}
// Set space allocation info.
@@ -1326,6 +1335,26 @@ class PagedSpace : public Space {
bool was_swept_conservatively() { return was_swept_conservatively_; }
void set_was_swept_conservatively(bool b) { was_swept_conservatively_ = b; }
+ void SetPagesToSweep(Page* first, Page* last) {
+ first_unswept_page_ = first;
+ last_unswept_page_ = last;
+
+ Page* p = first;
+ do {
+ p->SetFlag(MemoryChunk::WAS_SWEPT_CONSERVATIVELY);
+ p = p->next_page();
+ } while (p != last);
+ }
+
+ bool AdvanceSweeper(intptr_t bytes_to_sweep);
+
+ bool IsSweepingComplete() {
+ return !first_unswept_page_->is_valid();
+ }
+
+ Page* FirstPage() { return anchor_.next_page(); }
+ Page* LastPage() { return anchor_.prev_page(); }
+
protected:
// Maximum capacity of this space.
intptr_t max_capacity_;
@@ -1350,6 +1379,9 @@ class PagedSpace : public Space {
bool was_swept_conservatively_;
+ Page* first_unswept_page_;
+ Page* last_unswept_page_;
+
// Sets allocation pointer. If the allocation pointer already pointed to a
// non-zero-length area then that area may be returned to the free list.
void SetAllocationInfo(Address start, Address end);
« src/mark-compact.cc ('K') | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698