| Index: content/common/discardable_shared_memory_heap.h | 
| diff --git a/content/common/discardable_shared_memory_heap.h b/content/common/discardable_shared_memory_heap.h | 
| index 0c7f5a428c9b6fbba93042ea429fb8adeb2fd0e5..1280b69af10a8e36a18c211bd3c1ebd62a642f96 100644 | 
| --- a/content/common/discardable_shared_memory_heap.h | 
| +++ b/content/common/discardable_shared_memory_heap.h | 
| @@ -5,11 +5,8 @@ | 
| #ifndef CONTENT_COMMON_DISCARDABLE_SHARED_MEMORY_HEAP_H_ | 
| #define CONTENT_COMMON_DISCARDABLE_SHARED_MEMORY_HEAP_H_ | 
|  | 
| -#include <bitset> | 
| - | 
| #include "base/containers/hash_tables.h" | 
| #include "base/containers/linked_list.h" | 
| -#include "base/memory/linked_ptr.h" | 
| #include "base/memory/scoped_ptr.h" | 
| #include "base/memory/scoped_vector.h" | 
| #include "content/common/content_export.h" | 
| @@ -68,21 +65,53 @@ class CONTENT_EXPORT DiscardableSharedMemoryHeap { | 
| // memory. If found, the span is removed from the free list and returned. | 
| scoped_ptr<Span> SearchFreeList(size_t blocks); | 
|  | 
| -  // Release shared memory segments that have been purged. Returns bytes of | 
| -  // memory that were released. | 
| -  size_t ReleaseFreeMemory(); | 
| +  // Release free shared memory segments. | 
| +  void ReleaseFreeMemory(); | 
| + | 
| +  // Release shared memory segments that have been purged. | 
| +  void ReleasePurgedMemory(); | 
| + | 
| +  // Returns total bytes of memory in heap. | 
| +  size_t GetSize() const; | 
| + | 
| +  // Returns bytes of memory currently in the free list. | 
| +  size_t GetFreeListSize() const; | 
|  | 
| private: | 
| +  class ScopedMemorySegment { | 
| +   public: | 
| +    ScopedMemorySegment(DiscardableSharedMemoryHeap* heap, | 
| +                        scoped_ptr<base::DiscardableSharedMemory> shared_memory, | 
| +                        size_t size); | 
| +    ~ScopedMemorySegment(); | 
| + | 
| +    bool IsUsed() const; | 
| +    bool IsResident() const; | 
| + | 
| +   private: | 
| +    DiscardableSharedMemoryHeap* const heap_; | 
| +    scoped_ptr<base::DiscardableSharedMemory> shared_memory_; | 
| +    const size_t size_; | 
| + | 
| +    DISALLOW_COPY_AND_ASSIGN(ScopedMemorySegment); | 
| +  }; | 
| + | 
| scoped_ptr<Span> RemoveFromFreeList(Span* span); | 
| scoped_ptr<Span> Carve(Span* span, size_t blocks); | 
| void RegisterSpan(Span* span); | 
| void UnregisterSpan(Span* span); | 
| -  void ReleaseMemory(base::DiscardableSharedMemory* shared_memory); | 
| +  bool IsMemoryUsed(const base::DiscardableSharedMemory* shared_memory, | 
| +                    size_t size); | 
| +  bool IsMemoryResident(const base::DiscardableSharedMemory* shared_memory); | 
| +  void ReleaseMemory(const base::DiscardableSharedMemory* shared_memory, | 
| +                     size_t size); | 
|  | 
| size_t block_size_; | 
| +  size_t num_blocks_; | 
| +  size_t num_free_blocks_; | 
|  | 
| -  // Discardable shared memory instances. | 
| -  ScopedVector<base::DiscardableSharedMemory> shared_memory_segments_; | 
| +  // Vector of memory segments. | 
| +  ScopedVector<ScopedMemorySegment> memory_segments_; | 
|  | 
| // Mapping from first/last block of span to Span instance. | 
| typedef base::hash_map<size_t, Span*> SpanMap; | 
|  |