Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Side by Side Diff: base/memory/discardable_shared_memory_unittest.cc

Issue 871043003: base: Improve DiscardableSharedMemory support for ashmem. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add missing return statement Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 TestDiscardableSharedMemory memory1; 58 TestDiscardableSharedMemory memory1;
59 bool rv = memory1.CreateAndMap(kDataSize); 59 bool rv = memory1.CreateAndMap(kDataSize);
60 ASSERT_TRUE(rv); 60 ASSERT_TRUE(rv);
61 61
62 // Memory is initially locked. Unlock it. 62 // Memory is initially locked. Unlock it.
63 memory1.SetNow(Time::FromDoubleT(1)); 63 memory1.SetNow(Time::FromDoubleT(1));
64 memory1.Unlock(0, 0); 64 memory1.Unlock(0, 0);
65 65
66 // Lock and unlock memory. 66 // Lock and unlock memory.
67 rv = memory1.Lock(0, 0); 67 auto lock_rv = memory1.Lock(0, 0);
68 EXPECT_TRUE(rv); 68 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv);
69 memory1.SetNow(Time::FromDoubleT(2)); 69 memory1.SetNow(Time::FromDoubleT(2));
70 memory1.Unlock(0, 0); 70 memory1.Unlock(0, 0);
71 71
72 // Lock again before duplicating and passing ownership to new instance. 72 // Lock again before duplicating and passing ownership to new instance.
73 rv = memory1.Lock(0, 0); 73 lock_rv = memory1.Lock(0, 0);
74 EXPECT_TRUE(rv); 74 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv);
75 75
76 SharedMemoryHandle shared_handle; 76 SharedMemoryHandle shared_handle;
77 ASSERT_TRUE( 77 ASSERT_TRUE(
78 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); 78 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
79 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); 79 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
80 80
81 TestDiscardableSharedMemory memory2(shared_handle); 81 TestDiscardableSharedMemory memory2(shared_handle);
82 rv = memory2.Map(kDataSize); 82 rv = memory2.Map(kDataSize);
83 ASSERT_TRUE(rv); 83 ASSERT_TRUE(rv);
84 84
85 // Unlock second instance. 85 // Unlock second instance.
86 memory2.SetNow(Time::FromDoubleT(3)); 86 memory2.SetNow(Time::FromDoubleT(3));
87 memory2.Unlock(0, 0); 87 memory2.Unlock(0, 0);
88 88
89 // Lock second instance before passing ownership back to first instance. 89 // Lock second instance before passing ownership back to first instance.
90 rv = memory2.Lock(0, 0); 90 lock_rv = memory2.Lock(0, 0);
91 EXPECT_TRUE(rv); 91 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv);
92 92
93 // Memory should still be resident. 93 // Memory should still be resident.
94 rv = memory1.IsMemoryResident(); 94 rv = memory1.IsMemoryResident();
95 EXPECT_TRUE(rv); 95 EXPECT_TRUE(rv);
96 96
97 // Unlock first instance. 97 // Unlock first instance.
98 memory1.SetNow(Time::FromDoubleT(4)); 98 memory1.SetNow(Time::FromDoubleT(4));
99 memory1.Unlock(0, 0); 99 memory1.Unlock(0, 0);
100 } 100 }
101 101
(...skipping 26 matching lines...) Expand all
128 rv = memory1.Purge(Time::FromDoubleT(3)); 128 rv = memory1.Purge(Time::FromDoubleT(3));
129 EXPECT_FALSE(rv); 129 EXPECT_FALSE(rv);
130 130
131 ASSERT_TRUE(memory2.IsMemoryResident()); 131 ASSERT_TRUE(memory2.IsMemoryResident());
132 132
133 // Memory is unlocked and our usage timestamp should be correct. 133 // Memory is unlocked and our usage timestamp should be correct.
134 rv = memory1.Purge(Time::FromDoubleT(4)); 134 rv = memory1.Purge(Time::FromDoubleT(4));
135 EXPECT_TRUE(rv); 135 EXPECT_TRUE(rv);
136 136
137 // Lock should fail as memory has been purged. 137 // Lock should fail as memory has been purged.
138 rv = memory2.Lock(0, 0); 138 auto lock_rv = memory2.Lock(0, 0);
139 EXPECT_FALSE(rv); 139 EXPECT_EQ(DiscardableSharedMemory::FAILED, lock_rv);
140 140
141 ASSERT_FALSE(memory2.IsMemoryResident()); 141 ASSERT_FALSE(memory2.IsMemoryResident());
142 } 142 }
143 143
144 TEST(DiscardableSharedMemoryTest, LastUsed) { 144 TEST(DiscardableSharedMemoryTest, LastUsed) {
145 const uint32 kDataSize = 1024; 145 const uint32 kDataSize = 1024;
146 146
147 TestDiscardableSharedMemory memory1; 147 TestDiscardableSharedMemory memory1;
148 bool rv = memory1.CreateAndMap(kDataSize); 148 bool rv = memory1.CreateAndMap(kDataSize);
149 ASSERT_TRUE(rv); 149 ASSERT_TRUE(rv);
150 150
151 SharedMemoryHandle shared_handle; 151 SharedMemoryHandle shared_handle;
152 ASSERT_TRUE( 152 ASSERT_TRUE(
153 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle)); 153 memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
154 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle)); 154 ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
155 155
156 TestDiscardableSharedMemory memory2(shared_handle); 156 TestDiscardableSharedMemory memory2(shared_handle);
157 rv = memory2.Map(kDataSize); 157 rv = memory2.Map(kDataSize);
158 ASSERT_TRUE(rv); 158 ASSERT_TRUE(rv);
159 159
160 memory2.SetNow(Time::FromDoubleT(1)); 160 memory2.SetNow(Time::FromDoubleT(1));
161 memory2.Unlock(0, 0); 161 memory2.Unlock(0, 0);
162 162
163 EXPECT_EQ(memory2.last_known_usage(), Time::FromDoubleT(1)); 163 EXPECT_EQ(memory2.last_known_usage(), Time::FromDoubleT(1));
164 164
165 rv = memory2.Lock(0, 0); 165 auto lock_rv = memory2.Lock(0, 0);
166 EXPECT_TRUE(rv); 166 EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv);
167 167
168 // This should fail as memory is locked. 168 // This should fail as memory is locked.
169 rv = memory1.Purge(Time::FromDoubleT(2)); 169 rv = memory1.Purge(Time::FromDoubleT(2));
170 ASSERT_FALSE(rv); 170 ASSERT_FALSE(rv);
171 171
172 // Last usage should have been updated to timestamp passed to Purge above. 172 // Last usage should have been updated to timestamp passed to Purge above.
173 EXPECT_EQ(memory1.last_known_usage(), Time::FromDoubleT(2)); 173 EXPECT_EQ(memory1.last_known_usage(), Time::FromDoubleT(2));
174 174
175 memory2.SetNow(Time::FromDoubleT(3)); 175 memory2.SetNow(Time::FromDoubleT(3));
176 memory2.Unlock(0, 0); 176 memory2.Unlock(0, 0);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 rv = memory2.Map(kDataSize); 225 rv = memory2.Map(kDataSize);
226 ASSERT_TRUE(rv); 226 ASSERT_TRUE(rv);
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 rv = memory2.Lock(0, 0); 235 auto lock_rv = memory2.Lock(0, 0);
236 EXPECT_FALSE(rv); 236 EXPECT_EQ(DiscardableSharedMemory::FAILED, lock_rv);
237 rv = memory1.Lock(0, 0); 237 lock_rv = memory1.Lock(0, 0);
238 EXPECT_FALSE(rv); 238 EXPECT_EQ(DiscardableSharedMemory::FAILED, lock_rv);
239 } 239 }
240 240
241 TEST(DiscardableSharedMemoryTest, LockAndUnlockRange) { 241 TEST(DiscardableSharedMemoryTest, LockAndUnlockRange) {
242 const uint32 kDataSize = 32; 242 const uint32 kDataSize = 32;
243 243
244 uint32 data_size_in_bytes = kDataSize * base::GetPageSize(); 244 uint32 data_size_in_bytes = kDataSize * base::GetPageSize();
245 245
246 TestDiscardableSharedMemory memory1; 246 TestDiscardableSharedMemory memory1;
247 bool rv = memory1.CreateAndMap(data_size_in_bytes); 247 bool rv = memory1.CreateAndMap(data_size_in_bytes);
248 ASSERT_TRUE(rv); 248 ASSERT_TRUE(rv);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 296
297 EXPECT_LE(kDataSize, memory.mapped_size()); 297 EXPECT_LE(kDataSize, memory.mapped_size());
298 298
299 // Mapped size should be 0 after memory segment has been closed. 299 // Mapped size should be 0 after memory segment has been closed.
300 memory.Close(); 300 memory.Close();
301 EXPECT_EQ(0u, memory.mapped_size()); 301 EXPECT_EQ(0u, memory.mapped_size());
302 } 302 }
303 303
304 } // namespace 304 } // namespace
305 } // namespace base 305 } // namespace base
OLDNEW
« no previous file with comments | « base/memory/discardable_shared_memory.cc ('k') | content/child/child_discardable_shared_memory_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698