Index: content/common/discardable_shared_memory_heap.cc |
diff --git a/content/common/discardable_shared_memory_heap.cc b/content/common/discardable_shared_memory_heap.cc |
index b444b0d7b02e64e5aade115e858d5dfa38f3fd15..36ee632255329506570831c90bc23287cad00580 100644 |
--- a/content/common/discardable_shared_memory_heap.cc |
+++ b/content/common/discardable_shared_memory_heap.cc |
@@ -34,14 +34,17 @@ DiscardableSharedMemoryHeap::Span::~Span() { |
DiscardableSharedMemoryHeap::ScopedMemorySegment::ScopedMemorySegment( |
DiscardableSharedMemoryHeap* heap, |
scoped_ptr<base::DiscardableSharedMemory> shared_memory, |
- size_t size) |
- : heap_(heap), shared_memory_(shared_memory.Pass()), size_(size) { |
+ size_t size, |
+ const base::Closure& deleted_callback) |
+ : heap_(heap), |
+ shared_memory_(shared_memory.Pass()), |
+ size_(size), |
+ deleted_callback_(deleted_callback) { |
} |
DiscardableSharedMemoryHeap::ScopedMemorySegment::~ScopedMemorySegment() { |
heap_->ReleaseMemory(shared_memory_.get(), size_); |
- // Purge memory. This has no effect if already purged. |
- shared_memory_->Purge(base::Time::Now()); |
+ deleted_callback_.Run(); |
} |
bool DiscardableSharedMemoryHeap::ScopedMemorySegment::IsUsed() const { |
@@ -71,7 +74,8 @@ DiscardableSharedMemoryHeap::~DiscardableSharedMemoryHeap() { |
scoped_ptr<DiscardableSharedMemoryHeap::Span> DiscardableSharedMemoryHeap::Grow( |
scoped_ptr<base::DiscardableSharedMemory> shared_memory, |
- size_t size) { |
+ size_t size, |
+ const base::Closure& deleted_callback) { |
// Memory must be aligned to block size. |
DCHECK_EQ( |
reinterpret_cast<size_t>(shared_memory->memory()) & (block_size_ - 1), |
@@ -89,8 +93,8 @@ scoped_ptr<DiscardableSharedMemoryHeap::Span> DiscardableSharedMemoryHeap::Grow( |
num_blocks_ += span->length_; |
// Start tracking if segment is resident by adding it to |memory_segments_|. |
- memory_segments_.push_back( |
- new ScopedMemorySegment(this, shared_memory.Pass(), size)); |
+ memory_segments_.push_back(new ScopedMemorySegment(this, shared_memory.Pass(), |
+ size, deleted_callback)); |
return span.Pass(); |
} |