Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(887)

Unified Diff: base/memory/discardable_shared_memory_unittest.cc

Issue 1409743002: Re-land: base: Use MADV_REMOVE instead of ftruncate to purge discardable memory segments. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix problem with segment having been released before we try to purge Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/memory/discardable_shared_memory.cc ('k') | content/common/host_discardable_shared_memory_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/discardable_shared_memory_unittest.cc
diff --git a/base/memory/discardable_shared_memory_unittest.cc b/base/memory/discardable_shared_memory_unittest.cc
index d5b71d31cb0b9649087bea036d3ecf6e8cc40a21..aaa6c0ddd28e7fc0b090e5557bf62e067a6720d2 100644
--- a/base/memory/discardable_shared_memory_unittest.cc
+++ b/base/memory/discardable_shared_memory_unittest.cc
@@ -343,19 +343,44 @@ TEST(DiscardableSharedMemoryTest, Close) {
memory.Unlock(0, 0);
}
-#if defined(DISCARDABLE_SHARED_MEMORY_SHRINKING)
-TEST(DiscardableSharedMemoryTest, Shrink) {
+// This test checks that zero-filled pages are returned after purging a segment
+// when DISCARDABLE_SHARED_MEMORY_ZERO_FILL_ON_DEMAND_PAGES_AFTER_PURGE is
+// defined and MADV_REMOVE is supported.
+#if defined(DISCARDABLE_SHARED_MEMORY_ZERO_FILL_ON_DEMAND_PAGES_AFTER_PURGE)
+TEST(DiscardableSharedMemoryTest, ZeroFilledPagesAfterPurge) {
const uint32 kDataSize = 1024;
- TestDiscardableSharedMemory memory;
- bool rv = memory.CreateAndMap(kDataSize);
+ TestDiscardableSharedMemory memory1;
+ bool rv = memory1.CreateAndMap(kDataSize);
ASSERT_TRUE(rv);
- EXPECT_NE(0u, memory.mapped_size());
+ SharedMemoryHandle shared_handle;
+ ASSERT_TRUE(
+ memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
+ ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
- // Mapped size should be 0 after shrinking memory segment.
- memory.Shrink();
- EXPECT_EQ(0u, memory.mapped_size());
+ TestDiscardableSharedMemory memory2(shared_handle);
+ rv = memory2.Map(kDataSize);
+ ASSERT_TRUE(rv);
+
+ // Initialize all memory to '0xaa'.
+ memset(memory2.memory(), 0xaa, kDataSize);
+
+ // Unlock memory.
+ memory2.SetNow(Time::FromDoubleT(1));
+ memory2.Unlock(0, 0);
+ EXPECT_FALSE(memory1.IsMemoryLocked());
+
+ // Memory is unlocked, but our usage timestamp is incorrect.
+ rv = memory1.Purge(Time::FromDoubleT(2));
+ EXPECT_FALSE(rv);
+ rv = memory1.Purge(Time::FromDoubleT(3));
+ EXPECT_TRUE(rv);
+
+ // Check that reading memory after it has been purged is returning
+ // zero-filled pages.
+ uint8 expected_data[kDataSize] = {};
+ EXPECT_EQ(memcmp(memory2.memory(), expected_data, kDataSize), 0);
}
#endif
« no previous file with comments | « base/memory/discardable_shared_memory.cc ('k') | content/common/host_discardable_shared_memory_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698