Index: src/spaces.h |
diff --git a/src/spaces.h b/src/spaces.h |
index 2cd92c59d84f401b4a6bf27bb07aadf481a83911..db0415b7b7a8b30b4d0945b4bb00eea7bb861d20 100644 |
--- a/src/spaces.h |
+++ b/src/spaces.h |
@@ -1388,6 +1388,7 @@ class AllocationStats BASE_EMBEDDED { |
// Zero out all the allocation statistics (i.e., no capacity). |
void Clear() { |
capacity_ = 0; |
+ max_capacity_ = 0; |
size_ = 0; |
waste_ = 0; |
} |
@@ -1406,6 +1407,7 @@ class AllocationStats BASE_EMBEDDED { |
// Accessors for the allocation statistics. |
intptr_t Capacity() { return capacity_; } |
+ intptr_t MaxCapacity() { return max_capacity_; } |
intptr_t Size() { return size_; } |
intptr_t Waste() { return waste_; } |
@@ -1415,6 +1417,9 @@ class AllocationStats BASE_EMBEDDED { |
void ExpandSpace(int size_in_bytes) { |
capacity_ += size_in_bytes; |
size_ += size_in_bytes; |
+ if (capacity_ > max_capacity_) { |
+ max_capacity_ = capacity_; |
+ } |
ASSERT(size_ >= 0); |
} |
@@ -1448,6 +1453,7 @@ class AllocationStats BASE_EMBEDDED { |
private: |
intptr_t capacity_; |
+ intptr_t max_capacity_; |
intptr_t size_; |
intptr_t waste_; |
}; |
@@ -1689,6 +1695,9 @@ class PagedSpace : public Space { |
// spaces this equals the capacity. |
intptr_t CommittedMemory() { return Capacity(); } |
+ // The maximum amount of memory ever committed for this space. |
+ intptr_t MaximumCommittedMemory() { return accounting_stats_.MaxCapacity(); } |
+ |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory(); |
@@ -1795,9 +1804,7 @@ class PagedSpace : public Space { |
accounting_stats_.AllocateBytes(bytes); |
} |
- void IncreaseCapacity(int size) { |
- accounting_stats_.ExpandSpace(size); |
- } |
+ void IncreaseCapacity(int size); |
// Releases an unused page and shrinks the space. |
void ReleasePage(Page* page, bool unlink); |
@@ -2207,6 +2214,9 @@ class SemiSpace : public Space { |
static void Swap(SemiSpace* from, SemiSpace* to); |
+ // Returns the maximum amount of memory ever committed by the semi space. |
+ size_t MaximumCommittedMemory() { return maximum_committed_; } |
+ |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory(); |
@@ -2215,6 +2225,9 @@ class SemiSpace : public Space { |
// Copies the flags into the masked positions on all pages in the space. |
void FlipPages(intptr_t flags, intptr_t flag_mask); |
+ // Updates Capacity and MaximumCommitted based on new capacity. |
+ void SetCapacity(int new_capacity); |
+ |
NewSpacePage* anchor() { return &anchor_; } |
// The current and maximum capacity of the space. |
@@ -2222,6 +2235,8 @@ class SemiSpace : public Space { |
int maximum_capacity_; |
int initial_capacity_; |
+ intptr_t maximum_committed_; |
+ |
// The start address of the space. |
Address start_; |
// Used to govern object promotion during mark-compact collection. |
@@ -2407,6 +2422,12 @@ class NewSpace : public Space { |
return Capacity(); |
} |
+ // Return the total amount of memory committed for new space. |
+ intptr_t MaximumCommittedMemory() { |
+ return to_space_.MaximumCommittedMemory() + |
+ from_space_.MaximumCommittedMemory(); |
+ } |
+ |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory(); |
@@ -2802,6 +2823,10 @@ class LargeObjectSpace : public Space { |
return objects_size_; |
} |
+ intptr_t MaximumCommittedMemory() { |
+ return maximum_committed_; |
+ } |
+ |
intptr_t CommittedMemory() { |
return Size(); |
} |
@@ -2853,6 +2878,7 @@ class LargeObjectSpace : public Space { |
private: |
intptr_t max_capacity_; |
+ intptr_t maximum_committed_; |
// The head of the linked list of large object chunks. |
LargePage* first_page_; |
intptr_t size_; // allocated bytes |