Index: src/spaces.cc |
diff --git a/src/spaces.cc b/src/spaces.cc |
index fe5eeb5e4311fe434b952261239fed62999e43b7..f35db6994c75dd8cbce6791ec7b53382ccf0c51e 100644 |
--- a/src/spaces.cc |
+++ b/src/spaces.cc |
@@ -1122,6 +1122,11 @@ void PagedSpace::ResetFreeListStatistics() { |
} |
+void PagedSpace::IncreaseCapacity(int size) { |
+ accounting_stats_.ExpandSpace(size); |
+} |
+ |
+ |
void PagedSpace::ReleasePage(Page* page, bool unlink) { |
ASSERT(page->LiveBytes() == 0); |
ASSERT(AreaSize() == page->area_size()); |
@@ -1511,6 +1516,7 @@ void SemiSpace::SetUp(Address start, |
initial_capacity_ = RoundDown(initial_capacity, Page::kPageSize); |
capacity_ = initial_capacity; |
maximum_capacity_ = RoundDown(maximum_capacity, Page::kPageSize); |
+ maximum_committed_ = 0; |
committed_ = false; |
start_ = start; |
address_mask_ = ~(maximum_capacity - 1); |
@@ -1543,6 +1549,7 @@ bool SemiSpace::Commit() { |
current = new_page; |
} |
+ SetCapacity(capacity_); |
committed_ = true; |
Reset(); |
return true; |
@@ -1591,7 +1598,7 @@ bool SemiSpace::GrowTo(int new_capacity) { |
start_ + capacity_, delta, executable())) { |
return false; |
} |
- capacity_ = new_capacity; |
+ SetCapacity(new_capacity); |
NewSpacePage* last_page = anchor()->prev_page(); |
ASSERT(last_page != anchor()); |
for (int i = pages_before; i < pages_after; i++) { |
@@ -1631,7 +1638,7 @@ bool SemiSpace::ShrinkTo(int new_capacity) { |
ASSERT((current_page_ >= first_page()) && (current_page_ <= new_last_page)); |
} |
- capacity_ = new_capacity; |
+ SetCapacity(new_capacity); |
return true; |
} |
@@ -1694,6 +1701,14 @@ void SemiSpace::Swap(SemiSpace* from, SemiSpace* to) { |
} |
+void SemiSpace::SetCapacity(int new_capacity) { |
+ capacity_ = new_capacity; |
+ if (capacity_ > maximum_committed_) { |
+ maximum_committed_ = capacity_; |
+ } |
+} |
+ |
+ |
void SemiSpace::set_age_mark(Address mark) { |
ASSERT(NewSpacePage::FromLimit(mark)->semi_space() == this); |
age_mark_ = mark; |
@@ -2938,6 +2953,7 @@ LargeObjectSpace::LargeObjectSpace(Heap* heap, |
bool LargeObjectSpace::SetUp() { |
first_page_ = NULL; |
size_ = 0; |
+ maximum_committed_ = 0; |
page_count_ = 0; |
objects_size_ = 0; |
chunk_map_.Clear(); |
@@ -2984,6 +3000,10 @@ MaybeObject* LargeObjectSpace::AllocateRaw(int object_size, |
page->set_next_page(first_page_); |
first_page_ = page; |
+ if (size_ > maximum_committed_) { |
+ maximum_committed_ = size_; |
+ } |
+ |
// Register all MemoryChunk::kAlignment-aligned chunks covered by |
// this large page in the chunk map. |
uintptr_t base = reinterpret_cast<uintptr_t>(page) / MemoryChunk::kAlignment; |