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 |