Index: content/common/discardable_shared_memory_heap_unittest.cc |
diff --git a/content/common/discardable_shared_memory_heap_unittest.cc b/content/common/discardable_shared_memory_heap_unittest.cc |
index 6a01b27b06b03e019fa47b67ea9c3633c8e3ac1e..5297ded0cc49a2fb903189feb1bfd2683cda8957 100644 |
--- a/content/common/discardable_shared_memory_heap_unittest.cc |
+++ b/content/common/discardable_shared_memory_heap_unittest.cc |
@@ -4,6 +4,7 @@ |
#include "content/common/discardable_shared_memory_heap.h" |
+#include "base/bind.h" |
#include "base/memory/discardable_shared_memory.h" |
#include "base/process/process_metrics.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -11,6 +12,9 @@ |
namespace content { |
namespace { |
+void NullTask() { |
+} |
+ |
TEST(DiscardableSharedMemoryHeapTest, Basic) { |
size_t block_size = base::GetPageSize(); |
DiscardableSharedMemoryHeap heap(block_size); |
@@ -33,7 +37,7 @@ TEST(DiscardableSharedMemoryHeapTest, Basic) { |
// Create new span for memory. |
scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span( |
- heap.Grow(memory.Pass(), memory_size)); |
+ heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask))); |
// Size should match |memory_size|. |
EXPECT_EQ(memory_size, heap.GetSize()); |
@@ -76,7 +80,7 @@ TEST(DiscardableSharedMemoryHeapTest, SplitAndMerge) { |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory->CreateAndMap(memory_size)); |
scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span( |
- heap.Grow(memory.Pass(), memory_size)); |
+ heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask))); |
// Split span into two. |
scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = |
@@ -131,7 +135,7 @@ TEST(DiscardableSharedMemoryHeapTest, MergeSingleBlockSpan) { |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory->CreateAndMap(memory_size)); |
scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span( |
- heap.Grow(memory.Pass(), memory_size)); |
+ heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask))); |
// Split span into two. |
scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = |
@@ -152,7 +156,8 @@ TEST(DiscardableSharedMemoryHeapTest, Grow) { |
scoped_ptr<base::DiscardableSharedMemory> memory1( |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory1->CreateAndMap(block_size)); |
- heap.MergeIntoFreeLists(heap.Grow(memory1.Pass(), block_size).Pass()); |
+ heap.MergeIntoFreeLists( |
+ heap.Grow(memory1.Pass(), block_size, base::Bind(NullTask)).Pass()); |
// Remove a span from free lists. |
scoped_ptr<DiscardableSharedMemoryHeap::Span> span1 = |
@@ -166,7 +171,8 @@ TEST(DiscardableSharedMemoryHeapTest, Grow) { |
scoped_ptr<base::DiscardableSharedMemory> memory2( |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory2->CreateAndMap(block_size)); |
- heap.MergeIntoFreeLists(heap.Grow(memory2.Pass(), block_size).Pass()); |
+ heap.MergeIntoFreeLists( |
+ heap.Grow(memory2.Pass(), block_size, base::Bind(NullTask)).Pass()); |
// Memory should now be available. |
scoped_ptr<DiscardableSharedMemoryHeap::Span> span2 = |
@@ -186,7 +192,7 @@ TEST(DiscardableSharedMemoryHeapTest, ReleaseFreeMemory) { |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory->CreateAndMap(block_size)); |
scoped_ptr<DiscardableSharedMemoryHeap::Span> span = |
- heap.Grow(memory.Pass(), block_size); |
+ heap.Grow(memory.Pass(), block_size, base::Bind(NullTask)); |
// Free lists should be empty. |
EXPECT_EQ(0u, heap.GetSizeOfFreeLists()); |
@@ -212,7 +218,7 @@ TEST(DiscardableSharedMemoryHeapTest, ReleasePurgedMemory) { |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory->CreateAndMap(block_size)); |
scoped_ptr<DiscardableSharedMemoryHeap::Span> span = |
- heap.Grow(memory.Pass(), block_size); |
+ heap.Grow(memory.Pass(), block_size, base::Bind(NullTask)); |
// Unlock memory so it can be purged. |
span->shared_memory()->Unlock(0, 0); |
@@ -239,7 +245,8 @@ TEST(DiscardableSharedMemoryHeapTest, Slack) { |
scoped_ptr<base::DiscardableSharedMemory> memory( |
new base::DiscardableSharedMemory); |
ASSERT_TRUE(memory->CreateAndMap(memory_size)); |
- heap.MergeIntoFreeLists(heap.Grow(memory.Pass(), memory_size).Pass()); |
+ heap.MergeIntoFreeLists( |
+ heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask)).Pass()); |
// No free span that is less or equal to 3 + 1. |
EXPECT_FALSE(heap.SearchFreeLists(3, 1)); |
@@ -257,5 +264,27 @@ TEST(DiscardableSharedMemoryHeapTest, Slack) { |
heap.MergeIntoFreeLists(span.Pass()); |
} |
+void OnDeleted(bool* deleted) { |
+ *deleted = true; |
+} |
+ |
+TEST(DiscardableSharedMemoryHeapTest, DeletedCallback) { |
+ size_t block_size = base::GetPageSize(); |
+ DiscardableSharedMemoryHeap heap(block_size); |
+ |
+ scoped_ptr<base::DiscardableSharedMemory> memory( |
+ new base::DiscardableSharedMemory); |
+ ASSERT_TRUE(memory->CreateAndMap(block_size)); |
+ bool deleted = false; |
+ scoped_ptr<DiscardableSharedMemoryHeap::Span> span = |
+ heap.Grow(memory.Pass(), block_size, |
+ base::Bind(OnDeleted, base::Unretained(&deleted))); |
+ |
+ heap.MergeIntoFreeLists(span.Pass()); |
+ heap.ReleaseFreeMemory(); |
+ |
+ EXPECT_TRUE(deleted); |
+} |
+ |
} // namespace |
} // namespace content |