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