Index: src/heap/spaces.cc |
diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc |
index 8fdca694a178d41f836533d43890cc612c896137..b0beff88c27b42b8cc44eb7195995a39d33ccf71 100644 |
--- a/src/heap/spaces.cc |
+++ b/src/heap/spaces.cc |
@@ -1016,6 +1016,8 @@ void PagedSpace::MergeCompactionSpace(CompactionSpace* other) { |
accounting_stats_.Merge(other->accounting_stats_); |
other->accounting_stats_.Reset(); |
+ AccountCommitted(other->CommittedMemory()); |
+ |
// Move over pages. |
PageIterator it(other); |
Page* p = nullptr; |
@@ -1094,6 +1096,8 @@ bool PagedSpace::Expand() { |
executable()); |
if (p == NULL) return false; |
+ AccountCommitted(static_cast<intptr_t>(p->size())); |
+ |
// Pages created during bootstrapping may contain immortal immovable objects. |
if (!heap()->deserialization_complete()) p->MarkNeverEvacuate(); |
@@ -1160,6 +1164,7 @@ void PagedSpace::ReleasePage(Page* page) { |
page->Unlink(); |
} |
+ AccountUncommitted(static_cast<intptr_t>(page->size())); |
heap()->QueueMemoryChunkForFree(page); |
DCHECK(Capacity() > 0); |
@@ -1586,7 +1591,6 @@ void SemiSpace::SetUp(Address start, int initial_capacity, int target_capacity, |
total_capacity_ = initial_capacity; |
target_capacity_ = RoundDown(target_capacity, Page::kPageSize); |
maximum_total_capacity_ = RoundDown(maximum_capacity, Page::kPageSize); |
- maximum_committed_ = 0; |
committed_ = false; |
start_ = start; |
address_mask_ = ~(maximum_capacity - 1); |
@@ -1609,6 +1613,7 @@ bool SemiSpace::Commit() { |
start_, total_capacity_, executable())) { |
return false; |
} |
+ AccountCommitted(total_capacity_); |
NewSpacePage* current = anchor(); |
for (int i = 0; i < pages; i++) { |
@@ -1632,6 +1637,8 @@ bool SemiSpace::Uncommit() { |
total_capacity_)) { |
return false; |
} |
+ AccountUncommitted(total_capacity_); |
+ |
anchor()->set_next_page(anchor()); |
anchor()->set_prev_page(anchor()); |
@@ -1668,6 +1675,7 @@ bool SemiSpace::GrowTo(int new_capacity) { |
start_ + total_capacity_, delta, executable())) { |
return false; |
} |
+ AccountCommitted(static_cast<intptr_t>(delta)); |
SetCapacity(new_capacity); |
NewSpacePage* last_page = anchor()->prev_page(); |
DCHECK(last_page != anchor()); |
@@ -1698,6 +1706,7 @@ bool SemiSpace::ShrinkTo(int new_capacity) { |
if (!allocator->UncommitBlock(start_ + new_capacity, delta)) { |
return false; |
} |
+ AccountUncommitted(static_cast<intptr_t>(delta)); |
int pages_after = new_capacity / Page::kPageSize; |
NewSpacePage* new_last_page = |
@@ -1783,9 +1792,6 @@ void SemiSpace::Swap(SemiSpace* from, SemiSpace* to) { |
void SemiSpace::SetCapacity(int new_capacity) { |
total_capacity_ = new_capacity; |
- if (total_capacity_ > maximum_committed_) { |
- maximum_committed_ = total_capacity_; |
- } |
} |
@@ -2863,7 +2869,6 @@ LargeObjectSpace::~LargeObjectSpace() {} |
bool LargeObjectSpace::SetUp() { |
first_page_ = NULL; |
size_ = 0; |
- maximum_committed_ = 0; |
page_count_ = 0; |
objects_size_ = 0; |
chunk_map_.Clear(); |
@@ -2901,15 +2906,12 @@ AllocationResult LargeObjectSpace::AllocateRaw(int object_size, |
DCHECK(page->area_size() >= object_size); |
size_ += static_cast<int>(page->size()); |
+ AccountCommitted(static_cast<intptr_t>(page->size())); |
objects_size_ += object_size; |
page_count_++; |
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; |
@@ -3013,6 +3015,7 @@ void LargeObjectSpace::FreeUnmarkedObjects() { |
heap()->mark_compact_collector()->ReportDeleteIfNeeded(object, |
heap()->isolate()); |
size_ -= static_cast<int>(page->size()); |
+ AccountUncommitted(static_cast<intptr_t>(page->size())); |
objects_size_ -= object->Size(); |
page_count_--; |