| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/discardable_memory.h" | 5 #include "base/memory/discardable_memory.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 | 31 |
| 32 const size_t kSize = 1024; | 32 const size_t kSize = 1024; |
| 33 | 33 |
| 34 TEST_P(DiscardableMemoryTest, IsNamed) { | 34 TEST_P(DiscardableMemoryTest, IsNamed) { |
| 35 std::string type_name(DiscardableMemory::GetTypeName(GetParam())); | 35 std::string type_name(DiscardableMemory::GetTypeName(GetParam())); |
| 36 EXPECT_NE("unknown", type_name); | 36 EXPECT_NE("unknown", type_name); |
| 37 EXPECT_EQ(GetParam(), DiscardableMemory::GetNamedType(type_name)); | 37 EXPECT_EQ(GetParam(), DiscardableMemory::GetNamedType(type_name)); |
| 38 } | 38 } |
| 39 | 39 |
| 40 bool IsNativeType(DiscardableMemoryType type) { | 40 bool IsNativeType(DiscardableMemoryType type) { |
| 41 return type == DISCARDABLE_MEMORY_TYPE_ASHMEM || | 41 #if defined(OS_ANDROID) |
| 42 type == DISCARDABLE_MEMORY_TYPE_MACH; | 42 // SHMEM is backed by native discardable memory on Android. |
| 43 return type == DISCARDABLE_MEMORY_TYPE_SHMEM; |
| 44 #else |
| 45 return false; |
| 46 #endif |
| 43 } | 47 } |
| 44 | 48 |
| 45 TEST_P(DiscardableMemoryTest, SupportedNatively) { | 49 TEST_P(DiscardableMemoryTest, SupportedNatively) { |
| 46 std::vector<DiscardableMemoryType> supported_types; | 50 std::vector<DiscardableMemoryType> supported_types; |
| 47 DiscardableMemory::GetSupportedTypes(&supported_types); | 51 DiscardableMemory::GetSupportedTypes(&supported_types); |
| 48 #if defined(DISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY) | 52 #if defined(DISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY) |
| 49 EXPECT_NE(0, std::count_if(supported_types.begin(), | 53 EXPECT_NE(0, std::count_if(supported_types.begin(), |
| 50 supported_types.end(), | 54 supported_types.end(), |
| 51 IsNativeType)); | 55 IsNativeType)); |
| 52 #else | 56 #else |
| 53 // If we ever have a platform that decides at runtime if it can support | 57 // If we ever have a platform that decides at runtime if it can support |
| 54 // discardable memory natively, then we'll have to add a 'never supported | 58 // discardable memory natively, then we'll have to add a 'never supported |
| 55 // natively' define for this case. At present, if it's not always supported | 59 // natively' define for this case. At present, if it's not always supported |
| 56 // natively, it's never supported. | 60 // natively, it's never supported. |
| 57 EXPECT_EQ(0, std::count_if(supported_types.begin(), | 61 EXPECT_EQ(0, std::count_if(supported_types.begin(), |
| 58 supported_types.end(), | 62 supported_types.end(), |
| 59 IsNativeType)); | 63 IsNativeType)); |
| 60 #endif | 64 #endif |
| 61 } | 65 } |
| 62 | 66 |
| 63 // Test Lock() and Unlock() functionalities. | 67 // Test Lock() and Unlock() functionalities. |
| 64 TEST_P(DiscardableMemoryTest, LockAndUnLock) { | 68 TEST_P(DiscardableMemoryTest, LockAndUnLock) { |
| 65 const scoped_ptr<DiscardableMemory> memory(CreateLockedMemory(kSize)); | 69 const scoped_ptr<DiscardableMemory> memory(CreateLockedMemory(kSize)); |
| 66 ASSERT_TRUE(memory); | 70 ASSERT_TRUE(memory); |
| 67 void* addr = memory->Memory(); | 71 void* addr = memory->Memory(); |
| 68 ASSERT_NE(nullptr, addr); | 72 EXPECT_NE(nullptr, addr); |
| 69 | |
| 70 memory->Unlock(); | |
| 71 | |
| 72 EXPECT_NE(DISCARDABLE_MEMORY_LOCK_STATUS_FAILED, memory->Lock()); | |
| 73 addr = memory->Memory(); | |
| 74 ASSERT_NE(nullptr, addr); | |
| 75 | |
| 76 memory->Unlock(); | 73 memory->Unlock(); |
| 77 } | 74 } |
| 78 | 75 |
| 79 // Test delete a discardable memory while it is locked. | 76 // Test delete a discardable memory while it is locked. |
| 80 TEST_P(DiscardableMemoryTest, DeleteWhileLocked) { | 77 TEST_P(DiscardableMemoryTest, DeleteWhileLocked) { |
| 81 const scoped_ptr<DiscardableMemory> memory(CreateLockedMemory(kSize)); | 78 const scoped_ptr<DiscardableMemory> memory(CreateLockedMemory(kSize)); |
| 82 ASSERT_TRUE(memory); | 79 ASSERT_TRUE(memory); |
| 83 } | 80 } |
| 84 | 81 |
| 85 #if !defined(NDEBUG) && !defined(OS_ANDROID) | 82 #if !defined(NDEBUG) && !defined(OS_ANDROID) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 100 #if !defined(ADDRESS_SANITIZER) || !defined(OS_WIN) | 97 #if !defined(ADDRESS_SANITIZER) || !defined(OS_WIN) |
| 101 TEST_P(DiscardableMemoryTest, AddressSpace) { | 98 TEST_P(DiscardableMemoryTest, AddressSpace) { |
| 102 const size_t kLargeSize = 4 * 1024 * 1024; // 4MiB. | 99 const size_t kLargeSize = 4 * 1024 * 1024; // 4MiB. |
| 103 const size_t kNumberOfInstances = 1024 + 1; // >4GiB total. | 100 const size_t kNumberOfInstances = 1024 + 1; // >4GiB total. |
| 104 | 101 |
| 105 scoped_ptr<DiscardableMemory> instances[kNumberOfInstances]; | 102 scoped_ptr<DiscardableMemory> instances[kNumberOfInstances]; |
| 106 for (auto& memory : instances) { | 103 for (auto& memory : instances) { |
| 107 memory = CreateLockedMemory(kLargeSize); | 104 memory = CreateLockedMemory(kLargeSize); |
| 108 ASSERT_TRUE(memory); | 105 ASSERT_TRUE(memory); |
| 109 void* addr = memory->Memory(); | 106 void* addr = memory->Memory(); |
| 110 ASSERT_NE(nullptr, addr); | 107 EXPECT_NE(nullptr, addr); |
| 111 memory->Unlock(); | 108 memory->Unlock(); |
| 112 } | 109 } |
| 113 } | 110 } |
| 114 #endif | 111 #endif |
| 115 | 112 |
| 116 std::vector<DiscardableMemoryType> GetSupportedDiscardableMemoryTypes() { | 113 std::vector<DiscardableMemoryType> GetSupportedDiscardableMemoryTypes() { |
| 117 std::vector<DiscardableMemoryType> supported_types; | 114 std::vector<DiscardableMemoryType> supported_types; |
| 118 DiscardableMemory::GetSupportedTypes(&supported_types); | 115 DiscardableMemory::GetSupportedTypes(&supported_types); |
| 119 return supported_types; | 116 return supported_types; |
| 120 } | 117 } |
| 121 | 118 |
| 122 INSTANTIATE_TEST_CASE_P( | 119 INSTANTIATE_TEST_CASE_P( |
| 123 DiscardableMemoryTests, | 120 DiscardableMemoryTests, |
| 124 DiscardableMemoryTest, | 121 DiscardableMemoryTest, |
| 125 ::testing::ValuesIn(GetSupportedDiscardableMemoryTypes())); | 122 ::testing::ValuesIn(GetSupportedDiscardableMemoryTypes())); |
| 126 | 123 |
| 127 } // namespace | 124 } // namespace |
| 128 } // namespace base | 125 } // namespace base |
| OLD | NEW |