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

Side by Side Diff: content/common/discardable_shared_memory_heap_unittest.cc

Issue 1100073004: Adding discardable memory dump provider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase for interface changes. Created 5 years, 7 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 "content/common/discardable_shared_memory_heap.h" 5 #include "content/common/discardable_shared_memory_heap.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/discardable_shared_memory.h" 8 #include "base/memory/discardable_shared_memory.h"
9 #include "base/process/process_metrics.h" 9 #include "base/process/process_metrics.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 19 matching lines...) Expand all
30 30
31 const size_t kBlocks = 10; 31 const size_t kBlocks = 10;
32 size_t memory_size = block_size * kBlocks; 32 size_t memory_size = block_size * kBlocks;
33 33
34 scoped_ptr<base::DiscardableSharedMemory> memory( 34 scoped_ptr<base::DiscardableSharedMemory> memory(
35 new base::DiscardableSharedMemory); 35 new base::DiscardableSharedMemory);
36 ASSERT_TRUE(memory->CreateAndMap(memory_size)); 36 ASSERT_TRUE(memory->CreateAndMap(memory_size));
37 37
38 // Create new span for memory. 38 // Create new span for memory.
39 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span( 39 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(
40 heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask))); 40 heap.Grow(memory.Pass(), memory_size, 0, base::Bind(NullTask)));
41 41
42 // Size should match |memory_size|. 42 // Size should match |memory_size|.
43 EXPECT_EQ(memory_size, heap.GetSize()); 43 EXPECT_EQ(memory_size, heap.GetSize());
44 44
45 // Size of free lists should still be 0. 45 // Size of free lists should still be 0.
46 EXPECT_EQ(0u, heap.GetSizeOfFreeLists()); 46 EXPECT_EQ(0u, heap.GetSizeOfFreeLists());
47 47
48 // Free list should still be empty as |new_span| is currently in use. 48 // Free list should still be empty as |new_span| is currently in use.
49 EXPECT_FALSE(heap.SearchFreeLists(1, 0)); 49 EXPECT_FALSE(heap.SearchFreeLists(1, 0));
50 50
(...skipping 22 matching lines...) Expand all
73 size_t block_size = base::GetPageSize(); 73 size_t block_size = base::GetPageSize();
74 DiscardableSharedMemoryHeap heap(block_size); 74 DiscardableSharedMemoryHeap heap(block_size);
75 75
76 const size_t kBlocks = 6; 76 const size_t kBlocks = 6;
77 size_t memory_size = block_size * kBlocks; 77 size_t memory_size = block_size * kBlocks;
78 78
79 scoped_ptr<base::DiscardableSharedMemory> memory( 79 scoped_ptr<base::DiscardableSharedMemory> memory(
80 new base::DiscardableSharedMemory); 80 new base::DiscardableSharedMemory);
81 ASSERT_TRUE(memory->CreateAndMap(memory_size)); 81 ASSERT_TRUE(memory->CreateAndMap(memory_size));
82 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span( 82 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(
83 heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask))); 83 heap.Grow(memory.Pass(), memory_size, 0, base::Bind(NullTask)));
84 84
85 // Split span into two. 85 // Split span into two.
86 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = 86 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover =
87 heap.Split(new_span.get(), 3); 87 heap.Split(new_span.get(), 3);
88 ASSERT_TRUE(leftover); 88 ASSERT_TRUE(leftover);
89 89
90 // Merge |leftover| into free lists. 90 // Merge |leftover| into free lists.
91 heap.MergeIntoFreeLists(leftover.Pass()); 91 heap.MergeIntoFreeLists(leftover.Pass());
92 92
93 // Some of the memory is still in use. 93 // Some of the memory is still in use.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 size_t block_size = base::GetPageSize(); 128 size_t block_size = base::GetPageSize();
129 DiscardableSharedMemoryHeap heap(block_size); 129 DiscardableSharedMemoryHeap heap(block_size);
130 130
131 const size_t kBlocks = 6; 131 const size_t kBlocks = 6;
132 size_t memory_size = block_size * kBlocks; 132 size_t memory_size = block_size * kBlocks;
133 133
134 scoped_ptr<base::DiscardableSharedMemory> memory( 134 scoped_ptr<base::DiscardableSharedMemory> memory(
135 new base::DiscardableSharedMemory); 135 new base::DiscardableSharedMemory);
136 ASSERT_TRUE(memory->CreateAndMap(memory_size)); 136 ASSERT_TRUE(memory->CreateAndMap(memory_size));
137 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span( 137 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(
138 heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask))); 138 heap.Grow(memory.Pass(), memory_size, 0, base::Bind(NullTask)));
139 139
140 // Split span into two. 140 // Split span into two.
141 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = 141 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover =
142 heap.Split(new_span.get(), 5); 142 heap.Split(new_span.get(), 5);
143 ASSERT_TRUE(leftover); 143 ASSERT_TRUE(leftover);
144 144
145 // Merge |new_span| into free lists. 145 // Merge |new_span| into free lists.
146 heap.MergeIntoFreeLists(new_span.Pass()); 146 heap.MergeIntoFreeLists(new_span.Pass());
147 147
148 // Merge |leftover| into free lists. 148 // Merge |leftover| into free lists.
149 heap.MergeIntoFreeLists(leftover.Pass()); 149 heap.MergeIntoFreeLists(leftover.Pass());
150 } 150 }
151 151
152 TEST(DiscardableSharedMemoryHeapTest, Grow) { 152 TEST(DiscardableSharedMemoryHeapTest, Grow) {
153 size_t block_size = base::GetPageSize(); 153 size_t block_size = base::GetPageSize();
154 DiscardableSharedMemoryHeap heap(block_size); 154 DiscardableSharedMemoryHeap heap(block_size);
155 155
156 scoped_ptr<base::DiscardableSharedMemory> memory1( 156 scoped_ptr<base::DiscardableSharedMemory> memory1(
157 new base::DiscardableSharedMemory); 157 new base::DiscardableSharedMemory);
158 ASSERT_TRUE(memory1->CreateAndMap(block_size)); 158 ASSERT_TRUE(memory1->CreateAndMap(block_size));
159 heap.MergeIntoFreeLists( 159 heap.MergeIntoFreeLists(
160 heap.Grow(memory1.Pass(), block_size, base::Bind(NullTask)).Pass()); 160 heap.Grow(memory1.Pass(), block_size, 0, base::Bind(NullTask)).Pass());
161 161
162 // Remove a span from free lists. 162 // Remove a span from free lists.
163 scoped_ptr<DiscardableSharedMemoryHeap::Span> span1 = 163 scoped_ptr<DiscardableSharedMemoryHeap::Span> span1 =
164 heap.SearchFreeLists(1, 0); 164 heap.SearchFreeLists(1, 0);
165 EXPECT_TRUE(span1); 165 EXPECT_TRUE(span1);
166 166
167 // No more memory available. 167 // No more memory available.
168 EXPECT_FALSE(heap.SearchFreeLists(1, 0)); 168 EXPECT_FALSE(heap.SearchFreeLists(1, 0));
169 169
170 // Grow free lists using new memory. 170 // Grow free lists using new memory.
171 scoped_ptr<base::DiscardableSharedMemory> memory2( 171 scoped_ptr<base::DiscardableSharedMemory> memory2(
172 new base::DiscardableSharedMemory); 172 new base::DiscardableSharedMemory);
173 ASSERT_TRUE(memory2->CreateAndMap(block_size)); 173 ASSERT_TRUE(memory2->CreateAndMap(block_size));
174 heap.MergeIntoFreeLists( 174 heap.MergeIntoFreeLists(
175 heap.Grow(memory2.Pass(), block_size, base::Bind(NullTask)).Pass()); 175 heap.Grow(memory2.Pass(), block_size, 1, base::Bind(NullTask)).Pass());
176 176
177 // Memory should now be available. 177 // Memory should now be available.
178 scoped_ptr<DiscardableSharedMemoryHeap::Span> span2 = 178 scoped_ptr<DiscardableSharedMemoryHeap::Span> span2 =
179 heap.SearchFreeLists(1, 0); 179 heap.SearchFreeLists(1, 0);
180 EXPECT_TRUE(span2); 180 EXPECT_TRUE(span2);
181 181
182 // Merge spans into the free lists again. 182 // Merge spans into the free lists again.
183 heap.MergeIntoFreeLists(span1.Pass()); 183 heap.MergeIntoFreeLists(span1.Pass());
184 heap.MergeIntoFreeLists(span2.Pass()); 184 heap.MergeIntoFreeLists(span2.Pass());
185 } 185 }
186 186
187 TEST(DiscardableSharedMemoryHeapTest, ReleaseFreeMemory) { 187 TEST(DiscardableSharedMemoryHeapTest, ReleaseFreeMemory) {
188 size_t block_size = base::GetPageSize(); 188 size_t block_size = base::GetPageSize();
189 DiscardableSharedMemoryHeap heap(block_size); 189 DiscardableSharedMemoryHeap heap(block_size);
190 190
191 scoped_ptr<base::DiscardableSharedMemory> memory( 191 scoped_ptr<base::DiscardableSharedMemory> memory(
192 new base::DiscardableSharedMemory); 192 new base::DiscardableSharedMemory);
193 ASSERT_TRUE(memory->CreateAndMap(block_size)); 193 ASSERT_TRUE(memory->CreateAndMap(block_size));
194 scoped_ptr<DiscardableSharedMemoryHeap::Span> span = 194 scoped_ptr<DiscardableSharedMemoryHeap::Span> span =
195 heap.Grow(memory.Pass(), block_size, base::Bind(NullTask)); 195 heap.Grow(memory.Pass(), block_size, 0, base::Bind(NullTask));
196 196
197 // Free lists should be empty. 197 // Free lists should be empty.
198 EXPECT_EQ(0u, heap.GetSizeOfFreeLists()); 198 EXPECT_EQ(0u, heap.GetSizeOfFreeLists());
199 199
200 heap.ReleaseFreeMemory(); 200 heap.ReleaseFreeMemory();
201 201
202 // Size should still match |block_size|. 202 // Size should still match |block_size|.
203 EXPECT_EQ(block_size, heap.GetSize()); 203 EXPECT_EQ(block_size, heap.GetSize());
204 204
205 heap.MergeIntoFreeLists(span.Pass()); 205 heap.MergeIntoFreeLists(span.Pass());
206 heap.ReleaseFreeMemory(); 206 heap.ReleaseFreeMemory();
207 207
208 // Memory should have been released. 208 // Memory should have been released.
209 EXPECT_EQ(0u, heap.GetSize()); 209 EXPECT_EQ(0u, heap.GetSize());
210 EXPECT_EQ(0u, heap.GetSizeOfFreeLists()); 210 EXPECT_EQ(0u, heap.GetSizeOfFreeLists());
211 } 211 }
212 212
213 TEST(DiscardableSharedMemoryHeapTest, ReleasePurgedMemory) { 213 TEST(DiscardableSharedMemoryHeapTest, ReleasePurgedMemory) {
214 size_t block_size = base::GetPageSize(); 214 size_t block_size = base::GetPageSize();
215 DiscardableSharedMemoryHeap heap(block_size); 215 DiscardableSharedMemoryHeap heap(block_size);
216 216
217 scoped_ptr<base::DiscardableSharedMemory> memory( 217 scoped_ptr<base::DiscardableSharedMemory> memory(
218 new base::DiscardableSharedMemory); 218 new base::DiscardableSharedMemory);
219 ASSERT_TRUE(memory->CreateAndMap(block_size)); 219 ASSERT_TRUE(memory->CreateAndMap(block_size));
220 scoped_ptr<DiscardableSharedMemoryHeap::Span> span = 220 scoped_ptr<DiscardableSharedMemoryHeap::Span> span =
221 heap.Grow(memory.Pass(), block_size, base::Bind(NullTask)); 221 heap.Grow(memory.Pass(), block_size, 0, base::Bind(NullTask));
222 222
223 // Unlock memory so it can be purged. 223 // Unlock memory so it can be purged.
224 span->shared_memory()->Unlock(0, 0); 224 span->shared_memory()->Unlock(0, 0);
225 225
226 // Purge and release shared memory. 226 // Purge and release shared memory.
227 bool rv = span->shared_memory()->Purge(base::Time::Now()); 227 bool rv = span->shared_memory()->Purge(base::Time::Now());
228 EXPECT_TRUE(rv); 228 EXPECT_TRUE(rv);
229 heap.ReleasePurgedMemory(); 229 heap.ReleasePurgedMemory();
230 230
231 // Shared memory backing for |span| should be gone. 231 // Shared memory backing for |span| should be gone.
232 EXPECT_FALSE(span->shared_memory()); 232 EXPECT_FALSE(span->shared_memory());
233 233
234 // Size should be 0. 234 // Size should be 0.
235 EXPECT_EQ(0u, heap.GetSize()); 235 EXPECT_EQ(0u, heap.GetSize());
236 } 236 }
237 237
238 TEST(DiscardableSharedMemoryHeapTest, Slack) { 238 TEST(DiscardableSharedMemoryHeapTest, Slack) {
239 size_t block_size = base::GetPageSize(); 239 size_t block_size = base::GetPageSize();
240 DiscardableSharedMemoryHeap heap(block_size); 240 DiscardableSharedMemoryHeap heap(block_size);
241 241
242 const size_t kBlocks = 6; 242 const size_t kBlocks = 6;
243 size_t memory_size = block_size * kBlocks; 243 size_t memory_size = block_size * kBlocks;
244 244
245 scoped_ptr<base::DiscardableSharedMemory> memory( 245 scoped_ptr<base::DiscardableSharedMemory> memory(
246 new base::DiscardableSharedMemory); 246 new base::DiscardableSharedMemory);
247 ASSERT_TRUE(memory->CreateAndMap(memory_size)); 247 ASSERT_TRUE(memory->CreateAndMap(memory_size));
248 heap.MergeIntoFreeLists( 248 heap.MergeIntoFreeLists(
249 heap.Grow(memory.Pass(), memory_size, base::Bind(NullTask)).Pass()); 249 heap.Grow(memory.Pass(), memory_size, 0, base::Bind(NullTask)).Pass());
250 250
251 // No free span that is less or equal to 3 + 1. 251 // No free span that is less or equal to 3 + 1.
252 EXPECT_FALSE(heap.SearchFreeLists(3, 1)); 252 EXPECT_FALSE(heap.SearchFreeLists(3, 1));
253 253
254 // No free span that is less or equal to 3 + 2. 254 // No free span that is less or equal to 3 + 2.
255 EXPECT_FALSE(heap.SearchFreeLists(3, 2)); 255 EXPECT_FALSE(heap.SearchFreeLists(3, 2));
256 256
257 // No free span that is less or equal to 1 + 4. 257 // No free span that is less or equal to 1 + 4.
258 EXPECT_FALSE(heap.SearchFreeLists(1, 4)); 258 EXPECT_FALSE(heap.SearchFreeLists(1, 4));
259 259
(...skipping 10 matching lines...) Expand all
270 270
271 TEST(DiscardableSharedMemoryHeapTest, DeletedCallback) { 271 TEST(DiscardableSharedMemoryHeapTest, DeletedCallback) {
272 size_t block_size = base::GetPageSize(); 272 size_t block_size = base::GetPageSize();
273 DiscardableSharedMemoryHeap heap(block_size); 273 DiscardableSharedMemoryHeap heap(block_size);
274 274
275 scoped_ptr<base::DiscardableSharedMemory> memory( 275 scoped_ptr<base::DiscardableSharedMemory> memory(
276 new base::DiscardableSharedMemory); 276 new base::DiscardableSharedMemory);
277 ASSERT_TRUE(memory->CreateAndMap(block_size)); 277 ASSERT_TRUE(memory->CreateAndMap(block_size));
278 bool deleted = false; 278 bool deleted = false;
279 scoped_ptr<DiscardableSharedMemoryHeap::Span> span = 279 scoped_ptr<DiscardableSharedMemoryHeap::Span> span =
280 heap.Grow(memory.Pass(), block_size, 280 heap.Grow(memory.Pass(), block_size, 0,
281 base::Bind(OnDeleted, base::Unretained(&deleted))); 281 base::Bind(OnDeleted, base::Unretained(&deleted)));
282 282
283 heap.MergeIntoFreeLists(span.Pass()); 283 heap.MergeIntoFreeLists(span.Pass());
284 heap.ReleaseFreeMemory(); 284 heap.ReleaseFreeMemory();
285 285
286 EXPECT_TRUE(deleted); 286 EXPECT_TRUE(deleted);
287 } 287 }
288 288
289 } // namespace 289 } // namespace
290 } // namespace content 290 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698