OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "gpu/command_buffer/client/mapped_memory.h" | 5 #include "gpu/command_buffer/client/mapped_memory.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 EXPECT_NE(new_id, -1); | 261 EXPECT_NE(new_id, -1); |
262 EXPECT_NE(new_offset, 0xFFFFFFFFu); | 262 EXPECT_NE(new_offset, 0xFFFFFFFFu); |
263 | 263 |
264 // Free up everything. | 264 // Free up everything. |
265 manager_->Free(new_ptr); | 265 manager_->Free(new_ptr); |
266 for (unsigned int i = 1; i < kAllocCount; ++i) { | 266 for (unsigned int i = 1; i < kAllocCount; ++i) { |
267 manager_->Free(pointers[i]); | 267 manager_->Free(pointers[i]); |
268 } | 268 } |
269 } | 269 } |
270 | 270 |
271 // Check if we don't free we don't crash. | |
272 TEST_F(MappedMemoryManagerTest, DontFree) { | |
273 const unsigned int kSize = 1024; | |
274 // Check we can alloc. | |
275 int32 id1 = -1; | |
276 unsigned int offset1 = 0xFFFFFFFFU; | |
277 void* mem1 = manager_->Alloc(kSize, &id1, &offset1); | |
278 ASSERT_TRUE(mem1); | |
279 } | |
280 | |
281 TEST_F(MappedMemoryManagerTest, FreeUnused) { | 271 TEST_F(MappedMemoryManagerTest, FreeUnused) { |
282 int32 id = -1; | 272 int32 id = -1; |
283 unsigned int offset = 0xFFFFFFFFU; | 273 unsigned int offset = 0xFFFFFFFFU; |
284 void* m1 = manager_->Alloc(kBufferSize, &id, &offset); | 274 void* m1 = manager_->Alloc(kBufferSize, &id, &offset); |
285 void* m2 = manager_->Alloc(kBufferSize, &id, &offset); | 275 void* m2 = manager_->Alloc(kBufferSize, &id, &offset); |
286 ASSERT_TRUE(m1 != NULL); | 276 ASSERT_TRUE(m1 != NULL); |
287 ASSERT_TRUE(m2 != NULL); | 277 ASSERT_TRUE(m2 != NULL); |
288 EXPECT_EQ(2u, manager_->num_chunks()); | 278 EXPECT_EQ(2u, manager_->num_chunks()); |
289 manager_->FreeUnused(); | 279 manager_->FreeUnused(); |
290 EXPECT_EQ(2u, manager_->num_chunks()); | 280 EXPECT_EQ(2u, manager_->num_chunks()); |
(...skipping 23 matching lines...) Expand all Loading... |
314 void* mem3 = manager_->Alloc(kSize, &id3, &offset3); | 304 void* mem3 = manager_->Alloc(kSize, &id3, &offset3); |
315 ASSERT_TRUE(mem1); | 305 ASSERT_TRUE(mem1); |
316 ASSERT_TRUE(mem2); | 306 ASSERT_TRUE(mem2); |
317 ASSERT_TRUE(mem3); | 307 ASSERT_TRUE(mem3); |
318 EXPECT_NE(-1, id1); | 308 EXPECT_NE(-1, id1); |
319 EXPECT_EQ(id1, id2); | 309 EXPECT_EQ(id1, id2); |
320 EXPECT_NE(id2, id3); | 310 EXPECT_NE(id2, id3); |
321 EXPECT_EQ(0u, offset1); | 311 EXPECT_EQ(0u, offset1); |
322 EXPECT_EQ(kSize, offset2); | 312 EXPECT_EQ(kSize, offset2); |
323 EXPECT_EQ(0u, offset3); | 313 EXPECT_EQ(0u, offset3); |
| 314 |
| 315 manager_->Free(mem1); |
| 316 manager_->Free(mem2); |
| 317 manager_->Free(mem3); |
324 } | 318 } |
325 | 319 |
326 TEST_F(MappedMemoryManagerTest, UnusedMemoryLimit) { | 320 TEST_F(MappedMemoryManagerTest, UnusedMemoryLimit) { |
327 const unsigned int kChunkSize = 2048; | 321 const unsigned int kChunkSize = 2048; |
328 // Reset the manager with a memory limit. | 322 // Reset the manager with a memory limit. |
329 manager_.reset(new MappedMemoryManager( | 323 manager_.reset(new MappedMemoryManager( |
330 helper_.get(), base::Bind(&EmptyPoll), kChunkSize)); | 324 helper_.get(), base::Bind(&EmptyPoll), kChunkSize)); |
331 manager_->set_chunk_size_multiple(kChunkSize); | 325 manager_->set_chunk_size_multiple(kChunkSize); |
332 | 326 |
333 // Allocate one chunk worth of memory. | 327 // Allocate one chunk worth of memory. |
334 int32 id1 = -1; | 328 int32 id1 = -1; |
335 unsigned int offset1 = 0xFFFFFFFFU; | 329 unsigned int offset1 = 0xFFFFFFFFU; |
336 void* mem1 = manager_->Alloc(kChunkSize, &id1, &offset1); | 330 void* mem1 = manager_->Alloc(kChunkSize, &id1, &offset1); |
337 ASSERT_TRUE(mem1); | 331 ASSERT_TRUE(mem1); |
338 EXPECT_NE(-1, id1); | 332 EXPECT_NE(-1, id1); |
339 EXPECT_EQ(0u, offset1); | 333 EXPECT_EQ(0u, offset1); |
340 | 334 |
341 // Allocate half a chunk worth of memory again. | 335 // Allocate half a chunk worth of memory again. |
342 // The same chunk will be used. | 336 // The same chunk will be used. |
343 int32 id2 = -1; | 337 int32 id2 = -1; |
344 unsigned int offset2 = 0xFFFFFFFFU; | 338 unsigned int offset2 = 0xFFFFFFFFU; |
345 void* mem2 = manager_->Alloc(kChunkSize, &id2, &offset2); | 339 void* mem2 = manager_->Alloc(kChunkSize, &id2, &offset2); |
346 ASSERT_TRUE(mem2); | 340 ASSERT_TRUE(mem2); |
347 EXPECT_NE(-1, id2); | 341 EXPECT_NE(-1, id2); |
348 EXPECT_EQ(0u, offset2); | 342 EXPECT_EQ(0u, offset2); |
349 | 343 |
350 // Expect two chunks to be allocated, exceeding the limit, | 344 // Expect two chunks to be allocated, exceeding the limit, |
351 // since all memory is in use. | 345 // since all memory is in use. |
352 EXPECT_EQ(2 * kChunkSize, manager_->allocated_memory()); | 346 EXPECT_EQ(2 * kChunkSize, manager_->allocated_memory()); |
| 347 |
| 348 manager_->Free(mem1); |
| 349 manager_->Free(mem2); |
353 } | 350 } |
354 | 351 |
355 TEST_F(MappedMemoryManagerTest, MemoryLimitWithReuse) { | 352 TEST_F(MappedMemoryManagerTest, MemoryLimitWithReuse) { |
356 const unsigned int kSize = 1024; | 353 const unsigned int kSize = 1024; |
357 // Reset the manager with a memory limit. | 354 // Reset the manager with a memory limit. |
358 manager_.reset(new MappedMemoryManager( | 355 manager_.reset(new MappedMemoryManager( |
359 helper_.get(), base::Bind(&EmptyPoll), kSize)); | 356 helper_.get(), base::Bind(&EmptyPoll), kSize)); |
360 const unsigned int kChunkSize = 2 * 1024; | 357 const unsigned int kChunkSize = 2 * 1024; |
361 manager_->set_chunk_size_multiple(kChunkSize); | 358 manager_->set_chunk_size_multiple(kChunkSize); |
362 | 359 |
(...skipping 30 matching lines...) Expand all Loading... |
393 int32 id3 = -1; | 390 int32 id3 = -1; |
394 unsigned int offset3 = 0xFFFFFFFFU; | 391 unsigned int offset3 = 0xFFFFFFFFU; |
395 void* mem3 = manager_->Alloc(kSize, &id3, &offset3); | 392 void* mem3 = manager_->Alloc(kSize, &id3, &offset3); |
396 ASSERT_TRUE(mem3); | 393 ASSERT_TRUE(mem3); |
397 EXPECT_NE(-1, id3); | 394 EXPECT_NE(-1, id3); |
398 // It will reuse the space from the second allocation just freed. | 395 // It will reuse the space from the second allocation just freed. |
399 EXPECT_EQ(kSize, offset3); | 396 EXPECT_EQ(kSize, offset3); |
400 | 397 |
401 // Expect one chunk to be allocated | 398 // Expect one chunk to be allocated |
402 EXPECT_EQ(1 * kChunkSize, manager_->allocated_memory()); | 399 EXPECT_EQ(1 * kChunkSize, manager_->allocated_memory()); |
| 400 |
| 401 manager_->Free(mem1); |
| 402 manager_->Free(mem3); |
403 } | 403 } |
404 | 404 |
405 namespace { | 405 namespace { |
406 void Poll(MappedMemoryManagerTest *test, std::list<void*>* list) { | 406 void Poll(MappedMemoryManagerTest *test, std::list<void*>* list) { |
407 std::list<void*>::iterator it = list->begin(); | 407 std::list<void*>::iterator it = list->begin(); |
408 while (it != list->end()) { | 408 while (it != list->end()) { |
409 void* address = *it; | 409 void* address = *it; |
410 test->manager()->Free(address); | 410 test->manager()->Free(address); |
411 it = list->erase(it); | 411 it = list->erase(it); |
412 } | 412 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 unsigned int offset3; | 447 unsigned int offset3; |
448 void* mem3 = manager_->Alloc(kSize, &id3, &offset3); | 448 void* mem3 = manager_->Alloc(kSize, &id3, &offset3); |
449 EXPECT_EQ(manager_->bytes_in_use(), kSize * 2); | 449 EXPECT_EQ(manager_->bytes_in_use(), kSize * 2); |
450 | 450 |
451 manager_->Free(mem2); | 451 manager_->Free(mem2); |
452 manager_->Free(mem3); | 452 manager_->Free(mem3); |
453 EXPECT_EQ(manager_->bytes_in_use(), static_cast<size_t>(0)); | 453 EXPECT_EQ(manager_->bytes_in_use(), static_cast<size_t>(0)); |
454 } | 454 } |
455 | 455 |
456 } // namespace gpu | 456 } // namespace gpu |
OLD | NEW |