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 |