OLD | NEW |
| (Empty) |
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 | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 | |
9 namespace base { | |
10 namespace { | |
11 | |
12 const size_t kSize = 1024; | |
13 | |
14 // Test Lock() and Unlock() functionalities. | |
15 TEST(DiscardableMemoryTest, LockAndUnLock) { | |
16 const scoped_ptr<DiscardableMemory> memory( | |
17 DiscardableMemory::CreateLockedMemory(kSize)); | |
18 ASSERT_TRUE(memory); | |
19 void* addr = memory->Memory(); | |
20 EXPECT_NE(nullptr, addr); | |
21 memory->Unlock(); | |
22 } | |
23 | |
24 // Test delete a discardable memory while it is locked. | |
25 TEST(DiscardableMemoryTest, DeleteWhileLocked) { | |
26 const scoped_ptr<DiscardableMemory> memory( | |
27 DiscardableMemory::CreateLockedMemory(kSize)); | |
28 ASSERT_TRUE(memory); | |
29 } | |
30 | |
31 #if !defined(NDEBUG) && !defined(OS_ANDROID) | |
32 // Death tests are not supported with Android APKs. | |
33 TEST(DiscardableMemoryTest, UnlockedMemoryAccessCrashesInDebugMode) { | |
34 const scoped_ptr<DiscardableMemory> memory( | |
35 DiscardableMemory::CreateLockedMemory(kSize)); | |
36 ASSERT_TRUE(memory); | |
37 memory->Unlock(); | |
38 ASSERT_DEATH_IF_SUPPORTED( | |
39 { *static_cast<int*>(memory->Memory()) = 0xdeadbeef; }, ".*"); | |
40 } | |
41 #endif | |
42 | |
43 // Test behavior when creating enough instances that could use up a 32-bit | |
44 // address space. | |
45 // This is disabled under AddressSanitizer on Windows as it crashes (by design) | |
46 // on OOM. See http://llvm.org/PR22026 for the details. | |
47 #if !defined(ADDRESS_SANITIZER) || !defined(OS_WIN) | |
48 TEST(DiscardableMemoryTest, AddressSpace) { | |
49 const size_t kLargeSize = 4 * 1024 * 1024; // 4MiB. | |
50 const size_t kNumberOfInstances = 1024 + 1; // >4GiB total. | |
51 | |
52 scoped_ptr<DiscardableMemory> instances[kNumberOfInstances]; | |
53 for (auto& memory : instances) { | |
54 memory = DiscardableMemory::CreateLockedMemory(kLargeSize); | |
55 ASSERT_TRUE(memory); | |
56 void* addr = memory->Memory(); | |
57 EXPECT_NE(nullptr, addr); | |
58 memory->Unlock(); | |
59 } | |
60 } | |
61 #endif | |
62 | |
63 } // namespace | |
64 } // namespace base | |
OLD | NEW |