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 8namespace base { 9 10#if defined(OS_ANDROID) || defined(OS_MACOSX) 11// Test Lock() and Unlock() functionalities. 12TEST(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. 33TEST(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. 44TEST(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