summaryrefslogtreecommitdiffstats
path: root/content/common/discardable_shared_memory_heap_unittest.cc
diff options
context:
space:
mode:
authorreveman <reveman@chromium.org>2015-03-16 19:31:30 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-17 02:32:11 +0000
commit1500e1a7a2445bb9bddc9e492db6c988dfbc815f (patch)
treeb8bcdfedc0cf297c649aa8e3de2561c2dcf15452 /content/common/discardable_shared_memory_heap_unittest.cc
parent159f0e04e089a3a12c9ffc44ea644a3abbc4a7ae (diff)
downloadchromium_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.cc45
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