Chromium Code Reviews| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/memory/discardable_shared_memory.h" | 6 #include "base/memory/discardable_shared_memory.h" |
| 7 #include "base/process/process_metrics.h" | 7 #include "base/process/process_metrics.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace base { | 10 namespace base { |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 227 | 227 |
| 228 memory2.SetNow(Time::FromDoubleT(1)); | 228 memory2.SetNow(Time::FromDoubleT(1)); |
| 229 memory2.Unlock(0, 0); | 229 memory2.Unlock(0, 0); |
| 230 | 230 |
| 231 rv = memory2.Purge(Time::FromDoubleT(2)); | 231 rv = memory2.Purge(Time::FromDoubleT(2)); |
| 232 EXPECT_TRUE(rv); | 232 EXPECT_TRUE(rv); |
| 233 | 233 |
| 234 // Lock should fail as memory has been purged. | 234 // Lock should fail as memory has been purged. |
| 235 auto lock_rv = memory2.Lock(0, 0); | 235 auto lock_rv = memory2.Lock(0, 0); |
| 236 EXPECT_EQ(DiscardableSharedMemory::FAILED, lock_rv); | 236 EXPECT_EQ(DiscardableSharedMemory::FAILED, lock_rv); |
| 237 lock_rv = memory1.Lock(0, 0); | |
| 238 EXPECT_EQ(DiscardableSharedMemory::FAILED, lock_rv); | |
|
danakj
2015/02/17 21:42:57
Maybe change this to what memory1.Lock should retu
reveman
2015/02/17 22:09:43
Locking/unlocking two different mappings of the me
| |
| 239 } | 237 } |
| 240 | 238 |
| 241 TEST(DiscardableSharedMemoryTest, LockAndUnlockRange) { | 239 TEST(DiscardableSharedMemoryTest, LockAndUnlockRange) { |
| 242 const uint32 kDataSize = 32; | 240 const uint32 kDataSize = 32; |
| 243 | 241 |
| 244 uint32 data_size_in_bytes = kDataSize * base::GetPageSize(); | 242 uint32 data_size_in_bytes = kDataSize * base::GetPageSize(); |
| 245 | 243 |
| 246 TestDiscardableSharedMemory memory1; | 244 TestDiscardableSharedMemory memory1; |
| 247 bool rv = memory1.CreateAndMap(data_size_in_bytes); | 245 bool rv = memory1.CreateAndMap(data_size_in_bytes); |
| 248 ASSERT_TRUE(rv); | 246 ASSERT_TRUE(rv); |
| 249 | 247 |
| 250 SharedMemoryHandle shared_handle; | 248 SharedMemoryHandle shared_handle; |
| 251 ASSERT_TRUE( | 249 ASSERT_TRUE( |
| 252 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); | 250 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); |
| 253 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); | 251 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); |
| 254 | 252 |
| 255 TestDiscardableSharedMemory memory2(shared_handle); | 253 TestDiscardableSharedMemory memory2(shared_handle); |
| 256 rv = memory2.Map(data_size_in_bytes); | 254 rv = memory2.Map(data_size_in_bytes); |
| 257 ASSERT_TRUE(rv); | 255 ASSERT_TRUE(rv); |
| 258 | 256 |
| 259 // Unlock first page. | 257 // Unlock first page. |
| 260 memory2.SetNow(Time::FromDoubleT(1)); | 258 memory2.SetNow(Time::FromDoubleT(1)); |
| 261 memory2.Unlock(0, base::GetPageSize()); | 259 memory2.Unlock(0, base::GetPageSize()); |
| 262 | 260 |
| 263 rv = memory1.Purge(Time::FromDoubleT(2)); | 261 rv = memory1.Purge(Time::FromDoubleT(2)); |
| 264 EXPECT_FALSE(rv); | 262 EXPECT_FALSE(rv); |
| 265 | 263 |
| 264 // Lock first page again. | |
| 265 memory2.SetNow(Time::FromDoubleT(3)); | |
| 266 auto lock_rv = memory2.Lock(0, base::GetPageSize()); | |
| 267 EXPECT_NE(DiscardableSharedMemory::FAILED, lock_rv); | |
| 268 | |
| 269 // Unlock first page. | |
| 270 memory2.SetNow(Time::FromDoubleT(4)); | |
| 271 memory2.Unlock(0, base::GetPageSize()); | |
| 272 | |
| 273 rv = memory1.Purge(Time::FromDoubleT(5)); | |
| 274 EXPECT_FALSE(rv); | |
| 275 | |
| 266 // Unlock second page. | 276 // Unlock second page. |
| 267 memory2.SetNow(Time::FromDoubleT(3)); | 277 memory2.SetNow(Time::FromDoubleT(6)); |
| 268 memory2.Unlock(base::GetPageSize(), base::GetPageSize()); | 278 memory2.Unlock(base::GetPageSize(), base::GetPageSize()); |
| 269 | 279 |
| 270 rv = memory1.Purge(Time::FromDoubleT(4)); | 280 rv = memory1.Purge(Time::FromDoubleT(7)); |
| 271 EXPECT_FALSE(rv); | 281 EXPECT_FALSE(rv); |
| 272 | 282 |
| 273 // Unlock anything onwards. | 283 // Unlock anything onwards. |
| 274 memory2.SetNow(Time::FromDoubleT(5)); | 284 memory2.SetNow(Time::FromDoubleT(8)); |
| 275 memory2.Unlock(2 * base::GetPageSize(), 0); | 285 memory2.Unlock(2 * base::GetPageSize(), 0); |
| 276 | 286 |
| 277 // Memory is unlocked, but our usage timestamp is incorrect. | 287 // Memory is unlocked, but our usage timestamp is incorrect. |
| 278 rv = memory1.Purge(Time::FromDoubleT(6)); | 288 rv = memory1.Purge(Time::FromDoubleT(9)); |
| 279 EXPECT_FALSE(rv); | 289 EXPECT_FALSE(rv); |
| 280 | 290 |
| 281 // The failed purge attempt should have updated usage time to the correct | 291 // The failed purge attempt should have updated usage time to the correct |
| 282 // value. | 292 // value. |
| 283 EXPECT_EQ(Time::FromDoubleT(5), memory1.last_known_usage()); | 293 EXPECT_EQ(Time::FromDoubleT(8), memory1.last_known_usage()); |
| 284 | 294 |
| 285 // Purge should now succeed. | 295 // Purge should now succeed. |
| 286 rv = memory1.Purge(Time::FromDoubleT(7)); | 296 rv = memory1.Purge(Time::FromDoubleT(10)); |
| 287 EXPECT_TRUE(rv); | 297 EXPECT_TRUE(rv); |
| 288 } | 298 } |
| 289 | 299 |
| 290 TEST(DiscardableSharedMemoryTest, MappedSize) { | 300 TEST(DiscardableSharedMemoryTest, MappedSize) { |
| 291 const uint32 kDataSize = 1024; | 301 const uint32 kDataSize = 1024; |
| 292 | 302 |
| 293 TestDiscardableSharedMemory memory; | 303 TestDiscardableSharedMemory memory; |
| 294 bool rv = memory.CreateAndMap(kDataSize); | 304 bool rv = memory.CreateAndMap(kDataSize); |
| 295 ASSERT_TRUE(rv); | 305 ASSERT_TRUE(rv); |
| 296 | 306 |
| 297 EXPECT_LE(kDataSize, memory.mapped_size()); | 307 EXPECT_LE(kDataSize, memory.mapped_size()); |
| 298 | 308 |
| 299 // Mapped size should be 0 after memory segment has been closed. | 309 // Mapped size should be 0 after memory segment has been closed. |
| 300 memory.Close(); | 310 memory.Close(); |
| 301 EXPECT_EQ(0u, memory.mapped_size()); | 311 EXPECT_EQ(0u, memory.mapped_size()); |
| 302 } | 312 } |
| 303 | 313 |
| 304 } // namespace | 314 } // namespace |
| 305 } // namespace base | 315 } // namespace base |
| OLD | NEW |