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