| Index: src/spaces.h
|
| diff --git a/src/spaces.h b/src/spaces.h
|
| index effe06b031ac960f2cf5fc58904ca7bd573ced8c..f29233f10236926ae9e937144cd5172c53a4469d 100644
|
| --- a/src/spaces.h
|
| +++ b/src/spaces.h
|
| @@ -507,7 +507,8 @@ class MemoryChunk {
|
| static const size_t kWriteBarrierCounterOffset =
|
| kSlotsBufferOffset + kPointerSize + kPointerSize;
|
|
|
| - static const size_t kHeaderSize = kWriteBarrierCounterOffset + kPointerSize;
|
| + static const size_t kHeaderSize =
|
| + kWriteBarrierCounterOffset + kPointerSize + kPointerSize;
|
|
|
| static const int kBodyOffset =
|
| CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + Bitmap::kSize));
|
| @@ -619,6 +620,13 @@ class MemoryChunk {
|
| return static_cast<int>(area_end() - area_start());
|
| }
|
|
|
| + // Approximate amount of physical memory committed for this chunk.
|
| + size_t CommittedPhysicalMemory() {
|
| + return high_water_mark_;
|
| + }
|
| +
|
| + static inline void UpdateHighWaterMark(Address mark);
|
| +
|
| protected:
|
| MemoryChunk* next_chunk_;
|
| MemoryChunk* prev_chunk_;
|
| @@ -644,6 +652,9 @@ class MemoryChunk {
|
| SlotsBuffer* slots_buffer_;
|
| SkipList* skip_list_;
|
| intptr_t write_barrier_counter_;
|
| + // Assuming the initial allocation on a page is sequential,
|
| + // count highest number of bytes ever allocated on the page.
|
| + int high_water_mark_;
|
|
|
| static MemoryChunk* Initialize(Heap* heap,
|
| Address base,
|
| @@ -1493,6 +1504,9 @@ class PagedSpace : public Space {
|
| // spaces this equals the capacity.
|
| intptr_t CommittedMemory() { return Capacity(); }
|
|
|
| + // Approximate amount of physical memory committed for this space.
|
| + size_t CommittedPhysicalMemory();
|
| +
|
| // Sets the capacity, the available space and the wasted space to zero.
|
| // The stats are rebuilt during sweeping by adding each page to the
|
| // capacity and the size when it is encountered. As free spaces are
|
| @@ -1553,6 +1567,7 @@ class PagedSpace : public Space {
|
| void SetTop(Address top, Address limit) {
|
| ASSERT(top == limit ||
|
| Page::FromAddress(top) == Page::FromAddress(limit - 1));
|
| + MemoryChunk::UpdateHighWaterMark(allocation_info_.top);
|
| allocation_info_.top = top;
|
| allocation_info_.limit = limit;
|
| }
|
| @@ -1959,6 +1974,9 @@ class SemiSpace : public Space {
|
|
|
| static void Swap(SemiSpace* from, SemiSpace* to);
|
|
|
| + // Approximate amount of physical memory committed for this space.
|
| + size_t CommittedPhysicalMemory();
|
| +
|
| private:
|
| // Flips the semispace between being from-space and to-space.
|
| // Copies the flags into the masked positions on all pages in the space.
|
| @@ -2156,6 +2174,9 @@ class NewSpace : public Space {
|
| return Capacity();
|
| }
|
|
|
| + // Approximate amount of physical memory committed for this space.
|
| + size_t CommittedPhysicalMemory();
|
| +
|
| // Return the available bytes without growing.
|
| intptr_t Available() {
|
| return Capacity() - Size();
|
| @@ -2523,6 +2544,9 @@ class LargeObjectSpace : public Space {
|
| return Size();
|
| }
|
|
|
| + // Approximate amount of physical memory committed for this space.
|
| + size_t CommittedPhysicalMemory();
|
| +
|
| int PageCount() {
|
| return page_count_;
|
| }
|
|
|