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