| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/common/host_discardable_shared_memory_manager.h" | 5 #include "content/common/host_discardable_shared_memory_manager.h" |
| 6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
| 7 | 7 |
| 8 namespace content { | 8 namespace content { |
| 9 namespace { | 9 namespace { |
| 10 | 10 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 scoped_ptr<TestHostDiscardableSharedMemoryManager> manager_; | 60 scoped_ptr<TestHostDiscardableSharedMemoryManager> manager_; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 TEST_F(HostDiscardableSharedMemoryManagerTest, AllocateForChild) { | 63 TEST_F(HostDiscardableSharedMemoryManagerTest, AllocateForChild) { |
| 64 const int kDataSize = 1024; | 64 const int kDataSize = 1024; |
| 65 uint8 data[kDataSize]; | 65 uint8 data[kDataSize]; |
| 66 memset(data, 0x80, kDataSize); | 66 memset(data, 0x80, kDataSize); |
| 67 | 67 |
| 68 base::SharedMemoryHandle shared_handle; | 68 base::SharedMemoryHandle shared_handle; |
| 69 manager_->AllocateLockedDiscardableSharedMemoryForChild( | 69 manager_->AllocateLockedDiscardableSharedMemoryForChild( |
| 70 base::GetCurrentProcessHandle(), kDataSize, &shared_handle); | 70 base::GetCurrentProcessHandle(), kDataSize, 0, &shared_handle); |
| 71 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle)); | 71 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle)); |
| 72 | 72 |
| 73 TestDiscardableSharedMemory memory(shared_handle); | 73 TestDiscardableSharedMemory memory(shared_handle); |
| 74 bool rv = memory.Map(kDataSize); | 74 bool rv = memory.Map(kDataSize); |
| 75 ASSERT_TRUE(rv); | 75 ASSERT_TRUE(rv); |
| 76 | 76 |
| 77 memcpy(memory.memory(), data, kDataSize); | 77 memcpy(memory.memory(), data, kDataSize); |
| 78 memory.SetNow(base::Time::FromDoubleT(1)); | 78 memory.SetNow(base::Time::FromDoubleT(1)); |
| 79 memory.Unlock(0, 0); | 79 memory.Unlock(0, 0); |
| 80 | 80 |
| 81 ASSERT_EQ(base::DiscardableSharedMemory::SUCCESS, memory.Lock(0, 0)); | 81 ASSERT_EQ(base::DiscardableSharedMemory::SUCCESS, memory.Lock(0, 0)); |
| 82 EXPECT_EQ(memcmp(data, memory.memory(), kDataSize), 0); | 82 EXPECT_EQ(memcmp(data, memory.memory(), kDataSize), 0); |
| 83 memory.Unlock(0, 0); | 83 memory.Unlock(0, 0); |
| 84 } | 84 } |
| 85 | 85 |
| 86 TEST_F(HostDiscardableSharedMemoryManagerTest, Purge) { | 86 TEST_F(HostDiscardableSharedMemoryManagerTest, Purge) { |
| 87 const int kDataSize = 1024; | 87 const int kDataSize = 1024; |
| 88 | 88 |
| 89 base::SharedMemoryHandle shared_handle1; | 89 base::SharedMemoryHandle shared_handle1; |
| 90 manager_->AllocateLockedDiscardableSharedMemoryForChild( | 90 manager_->AllocateLockedDiscardableSharedMemoryForChild( |
| 91 base::GetCurrentProcessHandle(), kDataSize, &shared_handle1); | 91 base::GetCurrentProcessHandle(), kDataSize, 1, &shared_handle1); |
| 92 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle1)); | 92 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle1)); |
| 93 | 93 |
| 94 TestDiscardableSharedMemory memory1(shared_handle1); | 94 TestDiscardableSharedMemory memory1(shared_handle1); |
| 95 bool rv = memory1.Map(kDataSize); | 95 bool rv = memory1.Map(kDataSize); |
| 96 ASSERT_TRUE(rv); | 96 ASSERT_TRUE(rv); |
| 97 | 97 |
| 98 base::SharedMemoryHandle shared_handle2; | 98 base::SharedMemoryHandle shared_handle2; |
| 99 manager_->AllocateLockedDiscardableSharedMemoryForChild( | 99 manager_->AllocateLockedDiscardableSharedMemoryForChild( |
| 100 base::GetCurrentProcessHandle(), kDataSize, &shared_handle2); | 100 base::GetCurrentProcessHandle(), kDataSize, 2, &shared_handle2); |
| 101 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle2)); | 101 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle2)); |
| 102 | 102 |
| 103 TestDiscardableSharedMemory memory2(shared_handle2); | 103 TestDiscardableSharedMemory memory2(shared_handle2); |
| 104 rv = memory2.Map(kDataSize); | 104 rv = memory2.Map(kDataSize); |
| 105 ASSERT_TRUE(rv); | 105 ASSERT_TRUE(rv); |
| 106 | 106 |
| 107 // Enough memory for both allocations. | 107 // Enough memory for both allocations. |
| 108 manager_->SetNow(base::Time::FromDoubleT(1)); | 108 manager_->SetNow(base::Time::FromDoubleT(1)); |
| 109 manager_->SetMemoryLimit(memory1.mapped_size() + memory2.mapped_size()); | 109 manager_->SetMemoryLimit(memory1.mapped_size() + memory2.mapped_size()); |
| 110 | 110 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 EXPECT_EQ(base::DiscardableSharedMemory::FAILED, lock_rv); | 145 EXPECT_EQ(base::DiscardableSharedMemory::FAILED, lock_rv); |
| 146 lock_rv = memory2.Lock(0, 0); | 146 lock_rv = memory2.Lock(0, 0); |
| 147 EXPECT_EQ(base::DiscardableSharedMemory::SUCCESS, lock_rv); | 147 EXPECT_EQ(base::DiscardableSharedMemory::SUCCESS, lock_rv); |
| 148 } | 148 } |
| 149 | 149 |
| 150 TEST_F(HostDiscardableSharedMemoryManagerTest, EnforceMemoryPolicy) { | 150 TEST_F(HostDiscardableSharedMemoryManagerTest, EnforceMemoryPolicy) { |
| 151 const int kDataSize = 1024; | 151 const int kDataSize = 1024; |
| 152 | 152 |
| 153 base::SharedMemoryHandle shared_handle; | 153 base::SharedMemoryHandle shared_handle; |
| 154 manager_->AllocateLockedDiscardableSharedMemoryForChild( | 154 manager_->AllocateLockedDiscardableSharedMemoryForChild( |
| 155 base::GetCurrentProcessHandle(), kDataSize, &shared_handle); | 155 base::GetCurrentProcessHandle(), kDataSize, 0, &shared_handle); |
| 156 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle)); | 156 ASSERT_TRUE(base::SharedMemory::IsHandleValid(shared_handle)); |
| 157 | 157 |
| 158 TestDiscardableSharedMemory memory(shared_handle); | 158 TestDiscardableSharedMemory memory(shared_handle); |
| 159 bool rv = memory.Map(kDataSize); | 159 bool rv = memory.Map(kDataSize); |
| 160 ASSERT_TRUE(rv); | 160 ASSERT_TRUE(rv); |
| 161 | 161 |
| 162 // Not enough memory for one allocation. | 162 // Not enough memory for one allocation. |
| 163 manager_->SetNow(base::Time::FromDoubleT(1)); | 163 manager_->SetNow(base::Time::FromDoubleT(1)); |
| 164 manager_->SetMemoryLimit(memory.mapped_size() - 1); | 164 manager_->SetMemoryLimit(memory.mapped_size() - 1); |
| 165 // We need to enforce memory policy as our memory usage is currently above | 165 // We need to enforce memory policy as our memory usage is currently above |
| (...skipping 13 matching lines...) Expand all Loading... |
| 179 manager_->SetNow(base::Time::FromDoubleT(4)); | 179 manager_->SetNow(base::Time::FromDoubleT(4)); |
| 180 manager_->EnforceMemoryPolicy(); | 180 manager_->EnforceMemoryPolicy(); |
| 181 // Memory policy should have successfully been enforced. | 181 // Memory policy should have successfully been enforced. |
| 182 EXPECT_FALSE(manager_->enforce_memory_policy_pending()); | 182 EXPECT_FALSE(manager_->enforce_memory_policy_pending()); |
| 183 | 183 |
| 184 EXPECT_EQ(base::DiscardableSharedMemory::FAILED, memory.Lock(0, 0)); | 184 EXPECT_EQ(base::DiscardableSharedMemory::FAILED, memory.Lock(0, 0)); |
| 185 } | 185 } |
| 186 | 186 |
| 187 } // namespace | 187 } // namespace |
| 188 } // namespace content | 188 } // namespace content |
| OLD | NEW |