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