| 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_;
 | 
|    }
 | 
| 
 |