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 15 matching lines...) Expand all Loading... |
26 Time now_; | 26 Time now_; |
27 }; | 27 }; |
28 | 28 |
29 TEST(DiscardableSharedMemoryTest, CreateAndMap) { | 29 TEST(DiscardableSharedMemoryTest, CreateAndMap) { |
30 const uint32 kDataSize = 1024; | 30 const uint32 kDataSize = 1024; |
31 | 31 |
32 TestDiscardableSharedMemory memory; | 32 TestDiscardableSharedMemory memory; |
33 bool rv = memory.CreateAndMap(kDataSize); | 33 bool rv = memory.CreateAndMap(kDataSize); |
34 ASSERT_TRUE(rv); | 34 ASSERT_TRUE(rv); |
35 EXPECT_GE(memory.mapped_size(), kDataSize); | 35 EXPECT_GE(memory.mapped_size(), kDataSize); |
| 36 EXPECT_TRUE(memory.IsMemoryLocked()); |
36 } | 37 } |
37 | 38 |
38 TEST(DiscardableSharedMemoryTest, CreateFromHandle) { | 39 TEST(DiscardableSharedMemoryTest, CreateFromHandle) { |
39 const uint32 kDataSize = 1024; | 40 const uint32 kDataSize = 1024; |
40 | 41 |
41 TestDiscardableSharedMemory memory1; | 42 TestDiscardableSharedMemory memory1; |
42 bool rv = memory1.CreateAndMap(kDataSize); | 43 bool rv = memory1.CreateAndMap(kDataSize); |
43 ASSERT_TRUE(rv); | 44 ASSERT_TRUE(rv); |
44 | 45 |
45 SharedMemoryHandle shared_handle; | 46 SharedMemoryHandle shared_handle; |
46 ASSERT_TRUE( | 47 ASSERT_TRUE( |
47 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); | 48 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); |
48 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); | 49 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); |
49 | 50 |
50 TestDiscardableSharedMemory memory2(shared_handle); | 51 TestDiscardableSharedMemory memory2(shared_handle); |
51 rv = memory2.Map(kDataSize); | 52 rv = memory2.Map(kDataSize); |
52 ASSERT_TRUE(rv); | 53 ASSERT_TRUE(rv); |
| 54 EXPECT_TRUE(memory2.IsMemoryLocked()); |
53 } | 55 } |
54 | 56 |
55 TEST(DiscardableSharedMemoryTest, LockAndUnlock) { | 57 TEST(DiscardableSharedMemoryTest, LockAndUnlock) { |
56 const uint32 kDataSize = 1024; | 58 const uint32 kDataSize = 1024; |
57 | 59 |
58 TestDiscardableSharedMemory memory1; | 60 TestDiscardableSharedMemory memory1; |
59 bool rv = memory1.CreateAndMap(kDataSize); | 61 bool rv = memory1.CreateAndMap(kDataSize); |
60 ASSERT_TRUE(rv); | 62 ASSERT_TRUE(rv); |
61 | 63 |
62 // Memory is initially locked. Unlock it. | 64 // Memory is initially locked. Unlock it. |
63 memory1.SetNow(Time::FromDoubleT(1)); | 65 memory1.SetNow(Time::FromDoubleT(1)); |
64 memory1.Unlock(0, 0); | 66 memory1.Unlock(0, 0); |
| 67 EXPECT_FALSE(memory1.IsMemoryLocked()); |
65 | 68 |
66 // Lock and unlock memory. | 69 // Lock and unlock memory. |
67 auto lock_rv = memory1.Lock(0, 0); | 70 auto lock_rv = memory1.Lock(0, 0); |
68 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv); | 71 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv); |
69 memory1.SetNow(Time::FromDoubleT(2)); | 72 memory1.SetNow(Time::FromDoubleT(2)); |
70 memory1.Unlock(0, 0); | 73 memory1.Unlock(0, 0); |
71 | 74 |
72 // Lock again before duplicating and passing ownership to new instance. | 75 // Lock again before duplicating and passing ownership to new instance. |
73 lock_rv = memory1.Lock(0, 0); | 76 lock_rv = memory1.Lock(0, 0); |
74 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv); | 77 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv); |
| 78 EXPECT_TRUE(memory1.IsMemoryLocked()); |
75 | 79 |
76 SharedMemoryHandle shared_handle; | 80 SharedMemoryHandle shared_handle; |
77 ASSERT_TRUE( | 81 ASSERT_TRUE( |
78 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); | 82 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); |
79 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); | 83 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); |
80 | 84 |
81 TestDiscardableSharedMemory memory2(shared_handle); | 85 TestDiscardableSharedMemory memory2(shared_handle); |
82 rv = memory2.Map(kDataSize); | 86 rv = memory2.Map(kDataSize); |
83 ASSERT_TRUE(rv); | 87 ASSERT_TRUE(rv); |
84 | 88 |
85 // Unlock second instance. | 89 // Unlock second instance. |
86 memory2.SetNow(Time::FromDoubleT(3)); | 90 memory2.SetNow(Time::FromDoubleT(3)); |
87 memory2.Unlock(0, 0); | 91 memory2.Unlock(0, 0); |
88 | 92 |
| 93 // Both memory instances should be unlocked now. |
| 94 EXPECT_FALSE(memory2.IsMemoryLocked()); |
| 95 EXPECT_FALSE(memory1.IsMemoryLocked()); |
| 96 |
89 // Lock second instance before passing ownership back to first instance. | 97 // Lock second instance before passing ownership back to first instance. |
90 lock_rv = memory2.Lock(0, 0); | 98 lock_rv = memory2.Lock(0, 0); |
91 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv); | 99 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv); |
92 | 100 |
93 // Memory should still be resident. | 101 // Memory should still be resident and locked. |
94 rv = memory1.IsMemoryResident(); | 102 rv = memory1.IsMemoryResident(); |
95 EXPECT_TRUE(rv); | 103 EXPECT_TRUE(rv); |
| 104 EXPECT_TRUE(memory1.IsMemoryLocked()); |
96 | 105 |
97 // Unlock first instance. | 106 // Unlock first instance. |
98 memory1.SetNow(Time::FromDoubleT(4)); | 107 memory1.SetNow(Time::FromDoubleT(4)); |
99 memory1.Unlock(0, 0); | 108 memory1.Unlock(0, 0); |
100 } | 109 } |
101 | 110 |
102 TEST(DiscardableSharedMemoryTest, Purge) { | 111 TEST(DiscardableSharedMemoryTest, Purge) { |
103 const uint32 kDataSize = 1024; | 112 const uint32 kDataSize = 1024; |
104 | 113 |
105 TestDiscardableSharedMemory memory1; | 114 TestDiscardableSharedMemory memory1; |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 EXPECT_NE(0u, memory.mapped_size()); | 354 EXPECT_NE(0u, memory.mapped_size()); |
346 | 355 |
347 // Mapped size should be 0 after shrinking memory segment. | 356 // Mapped size should be 0 after shrinking memory segment. |
348 memory.Shrink(); | 357 memory.Shrink(); |
349 EXPECT_EQ(0u, memory.mapped_size()); | 358 EXPECT_EQ(0u, memory.mapped_size()); |
350 } | 359 } |
351 #endif | 360 #endif |
352 | 361 |
353 } // namespace | 362 } // namespace |
354 } // namespace base | 363 } // namespace base |
OLD | NEW |