diff options
author | reveman <reveman@chromium.org> | 2015-03-16 19:31:30 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-17 02:32:11 +0000 |
commit | 1500e1a7a2445bb9bddc9e492db6c988dfbc815f (patch) | |
tree | b8bcdfedc0cf297c649aa8e3de2561c2dcf15452 /content/common/discardable_shared_memory_heap_unittest.cc | |
parent | 159f0e04e089a3a12c9ffc44ea644a3abbc4a7ae (diff) | |
download | chromium_src-1500e1a7a2445bb9bddc9e492db6c988dfbc815f.zip chromium_src-1500e1a7a2445bb9bddc9e492db6c988dfbc815f.tar.gz chromium_src-1500e1a7a2445bb9bddc9e492db6c988dfbc815f.tar.bz2 |
content: Add DeletedDiscardableSharedMemory IPC.
This provides a mechanism for child processes to notify the
browser process that a discardable memory segment has been
deleted. This reduces the chance of the browser unnecessarily
purging a memory segment that is still useful and it makes
total discardable memory usage stats in the browser process
better match current usage by all child processes.
BUG=
TEST=content_unittests --gtest_filter=DiscardableSharedMemoryHeapTest.DeletedCallback, content_browsertests --gtest_filter=ChildDiscardableSharedMemoryManagerBrowserTest.ReleaseFreeMemory
Review URL: https://codereview.chromium.org/1009203004
Cr-Commit-Position: refs/heads/master@{#320848}
Diffstat (limited to 'content/common/discardable_shared_memory_heap_unittest.cc')
-rw-r--r-- | content/common/discardable_shared_memory_heap_unittest.cc | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/content/common/discardable_shared_memory_heap_unittest.cc b/content/common/discardable_shared_memory_heap_unittest.cc index 6a01b27..5297ded 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 |