| 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..248dbfa49fbad42869b8b8cf12e1b516bbd25731 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_REMOVE is defined and MADV_REMOVE
|
| +// is supported.
|
| +#if defined(DISCARDABLE_SHARED_MEMORY_REMOVE)
|
| +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
|
|
|
|
|