1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/memory/discardable_memory.h" 6 #include "testing/gtest/include/gtest/gtest.h" 7 8 namespace base { 9 10 #if defined(OS_ANDROID) || defined(OS_MACOSX) 11 // Test Lock() and Unlock() functionalities. 12 TEST(DiscardableMemoryTest, LockAndUnLock) { 13 ASSERT_TRUE(DiscardableMemory::Supported()); 14 15 const size_t size = 1024; 16 17 DiscardableMemory memory; 18 ASSERT_TRUE(memory.InitializeAndLock(size)); 19 void* addr = memory.Memory(); 20 ASSERT_NE(static_cast<void*>(NULL), addr); 21 22 memory.Unlock(); 23 // The system should have no reason to purge discardable blocks in this brief 24 // interval, though technically speaking this might flake. 25 EXPECT_EQ(DISCARDABLE_MEMORY_SUCCESS, memory.Lock()); 26 addr = memory.Memory(); 27 ASSERT_NE(static_cast<void*>(NULL), addr); 28 29 memory.Unlock(); 30 } 31 32 // Test delete a discardable memory while it is locked. 33 TEST(DiscardableMemoryTest, DeleteWhileLocked) { 34 ASSERT_TRUE(DiscardableMemory::Supported()); 35 36 const size_t size = 1024; 37 38 DiscardableMemory memory; 39 ASSERT_TRUE(memory.InitializeAndLock(size)); 40 } 41 42 #if defined(OS_MACOSX) 43 // Test forced purging. 44 TEST(DiscardableMemoryTest, Purge) { 45 ASSERT_TRUE(DiscardableMemory::Supported()); 46 ASSERT_TRUE(DiscardableMemory::PurgeForTestingSupported()); 47 48 const size_t size = 1024; 49 50 DiscardableMemory memory; 51 ASSERT_TRUE(memory.InitializeAndLock(size)); 52 memory.Unlock(); 53 54 DiscardableMemory::PurgeForTesting(); 55 EXPECT_EQ(DISCARDABLE_MEMORY_PURGED, memory.Lock()); 56 } 57 #endif // OS_MACOSX 58 59 #endif // OS_* 60 61 } 62