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 "content/common/gpu/gpu_command_buffer_stub.h" | 5 #include "content/common/gpu/gpu_command_buffer_stub.h" |
6 #include "content/common/gpu/gpu_memory_allocation.h" | 6 #include "content/common/gpu/gpu_memory_allocation.h" |
7 #include "content/common/gpu/gpu_memory_manager.h" | 7 #include "content/common/gpu/gpu_memory_manager.h" |
8 #include "ui/gfx/size_conversions.h" | 8 #include "ui/gfx/size_conversions.h" |
9 | 9 |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 | 11 |
12 class FakeCommandBufferStub : public GpuCommandBufferStubBase { | 12 class FakeCommandBufferStub : public GpuCommandBufferStubBase { |
13 public: | 13 public: |
14 SurfaceState surface_state_; | 14 MemoryManagerState memory_manager_state_; |
15 GpuMemoryAllocation allocation_; | 15 GpuMemoryAllocation allocation_; |
16 gfx::Size size_; | 16 gfx::Size size_; |
17 | 17 |
18 FakeCommandBufferStub() | 18 FakeCommandBufferStub() |
19 : surface_state_(0, false, base::TimeTicks()) { | 19 : memory_manager_state_(0, false, base::TimeTicks()) { |
| 20 memory_manager_state_.client_has_memory_allocation_changed_callback = true; |
20 } | 21 } |
21 | 22 |
22 FakeCommandBufferStub(int32 surface_id, | 23 FakeCommandBufferStub(int32 surface_id, |
23 bool visible, | 24 bool visible, |
24 base::TimeTicks last_used_time) | 25 base::TimeTicks last_used_time) |
25 : surface_state_(surface_id, visible, last_used_time) { | 26 : memory_manager_state_(surface_id != 0, visible, last_used_time) { |
| 27 memory_manager_state_.client_has_memory_allocation_changed_callback = true; |
26 } | 28 } |
27 | 29 |
28 virtual bool client_has_memory_allocation_changed_callback() const { | 30 virtual const MemoryManagerState& memory_manager_state() const { |
29 return true; | 31 return memory_manager_state_; |
30 } | |
31 virtual bool has_surface_state() const { | |
32 return surface_state_.surface_id != 0; | |
33 } | |
34 virtual const SurfaceState& surface_state() const { | |
35 return surface_state_; | |
36 } | 32 } |
37 | 33 |
38 virtual gfx::Size GetSurfaceSize() const { | 34 virtual gfx::Size GetSurfaceSize() const { |
39 return size_; | 35 return size_; |
40 } | 36 } |
41 virtual bool IsInSameContextShareGroup( | 37 virtual bool IsInSameContextShareGroup( |
42 const GpuCommandBufferStubBase& stub) const { | 38 const GpuCommandBufferStubBase& stub) const { |
43 return false; | 39 return false; |
44 } | 40 } |
45 virtual void SetMemoryAllocation(const GpuMemoryAllocation& alloc) { | 41 virtual void SetMemoryAllocation(const GpuMemoryAllocation& alloc) { |
46 allocation_ = alloc; | 42 allocation_ = alloc; |
47 } | 43 } |
48 virtual bool GetTotalGpuMemory(size_t* bytes) { | 44 virtual bool GetTotalGpuMemory(size_t* bytes) { |
49 return false; | 45 return false; |
50 } | 46 } |
51 }; | 47 }; |
52 | 48 |
53 class FakeCommandBufferStubWithoutSurface : public GpuCommandBufferStubBase { | 49 class FakeCommandBufferStubWithoutSurface : public GpuCommandBufferStubBase { |
54 public: | 50 public: |
| 51 MemoryManagerState memory_manager_state_; |
55 GpuMemoryAllocation allocation_; | 52 GpuMemoryAllocation allocation_; |
56 std::vector<GpuCommandBufferStubBase*> share_group_; | 53 std::vector<GpuCommandBufferStubBase*> share_group_; |
57 | 54 |
58 FakeCommandBufferStubWithoutSurface() { | 55 FakeCommandBufferStubWithoutSurface() |
| 56 : memory_manager_state_(false, true, base::TimeTicks()) { |
| 57 memory_manager_state_.client_has_memory_allocation_changed_callback = true; |
59 } | 58 } |
60 | 59 |
61 virtual bool client_has_memory_allocation_changed_callback() const { | 60 virtual const MemoryManagerState& memory_manager_state() const { |
62 return true; | 61 return memory_manager_state_; |
63 } | |
64 virtual bool has_surface_state() const { | |
65 return false; | |
66 } | |
67 virtual const SurfaceState& surface_state() const { | |
68 NOTREACHED(); | |
69 static SurfaceState* surface_state_; | |
70 return *surface_state_; | |
71 } | 62 } |
72 | 63 |
73 virtual gfx::Size GetSurfaceSize() const { | 64 virtual gfx::Size GetSurfaceSize() const { |
74 return gfx::Size(); | 65 return gfx::Size(); |
75 } | 66 } |
76 virtual bool IsInSameContextShareGroup( | 67 virtual bool IsInSameContextShareGroup( |
77 const GpuCommandBufferStubBase& stub) const { | 68 const GpuCommandBufferStubBase& stub) const { |
78 return std::find(share_group_.begin(), | 69 return std::find(share_group_.begin(), |
79 share_group_.end(), | 70 share_group_.end(), |
80 &stub) != share_group_.end(); | 71 &stub) != share_group_.end(); |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 stub5.share_group_.push_back(&stub2); | 289 stub5.share_group_.push_back(&stub2); |
299 client_.stubs_.push_back(&stub5); | 290 client_.stubs_.push_back(&stub5); |
300 | 291 |
301 Manage(); | 292 Manage(); |
302 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub1.allocation_)); | 293 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub1.allocation_)); |
303 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); | 294 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); |
304 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub3.allocation_)); | 295 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub3.allocation_)); |
305 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub4.allocation_)); | 296 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub4.allocation_)); |
306 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub5.allocation_)); | 297 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub5.allocation_)); |
307 | 298 |
308 stub1.surface_state_.visible = false; | 299 stub1.memory_manager_state_.visible = false; |
309 stub2.surface_state_.visible = true; | 300 stub2.memory_manager_state_.visible = true; |
310 | 301 |
311 Manage(); | 302 Manage(); |
312 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); | 303 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); |
313 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub2.allocation_)); | 304 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub2.allocation_)); |
314 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); | 305 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); |
315 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub4.allocation_)); | 306 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub4.allocation_)); |
316 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub5.allocation_)); | 307 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub5.allocation_)); |
317 } | 308 } |
318 | 309 |
319 // Test GpuMemoryManager::Manage functionality: Test more than threshold number | 310 // Test GpuMemoryManager::Manage functionality: Test more than threshold number |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 | 401 |
411 Manage(); | 402 Manage(); |
412 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); | 403 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); |
413 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); | 404 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); |
414 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub3.allocation_)); | 405 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub3.allocation_)); |
415 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub4.allocation_)); | 406 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub4.allocation_)); |
416 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub5.allocation_)); | 407 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub5.allocation_)); |
417 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub6.allocation_)); | 408 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub6.allocation_)); |
418 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub7.allocation_)); | 409 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub7.allocation_)); |
419 | 410 |
420 stub3.surface_state_.last_used_time = older_; | 411 stub3.memory_manager_state_.last_used_time = older_; |
421 stub4.surface_state_.last_used_time = newer_; | 412 stub4.memory_manager_state_.last_used_time = newer_; |
422 | 413 |
423 Manage(); | 414 Manage(); |
424 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); | 415 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); |
425 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); | 416 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); |
426 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub3.allocation_)); | 417 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub3.allocation_)); |
427 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub4.allocation_)); | 418 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub4.allocation_)); |
428 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub5.allocation_)); | 419 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub5.allocation_)); |
429 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub6.allocation_)); | 420 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub6.allocation_)); |
430 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub7.allocation_)); | 421 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub7.allocation_)); |
431 } | 422 } |
(...skipping 21 matching lines...) Expand all Loading... |
453 stub4.share_group_.push_back(&stub2); | 444 stub4.share_group_.push_back(&stub2); |
454 client_.stubs_.push_back(&stub3); | 445 client_.stubs_.push_back(&stub3); |
455 client_.stubs_.push_back(&stub4); | 446 client_.stubs_.push_back(&stub4); |
456 | 447 |
457 Manage(); | 448 Manage(); |
458 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub1.allocation_)); | 449 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub1.allocation_)); |
459 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub2.allocation_)); | 450 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub2.allocation_)); |
460 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub3.allocation_)); | 451 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub3.allocation_)); |
461 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub4.allocation_)); | 452 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub4.allocation_)); |
462 | 453 |
463 stub1.surface_state_.visible = false; | 454 stub1.memory_manager_state_.visible = false; |
464 | 455 |
465 Manage(); | 456 Manage(); |
466 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); | 457 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); |
467 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub2.allocation_)); | 458 EXPECT_TRUE(IsAllocationForegroundForSurfaceYes(stub2.allocation_)); |
468 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); | 459 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); |
469 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub4.allocation_)); | 460 EXPECT_TRUE(IsAllocationForegroundForSurfaceNo(stub4.allocation_)); |
470 | 461 |
471 stub2.surface_state_.visible = false; | 462 stub2.memory_manager_state_.visible = false; |
472 | 463 |
473 Manage(); | 464 Manage(); |
474 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); | 465 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub1.allocation_)); |
475 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); | 466 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); |
476 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); | 467 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); |
477 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub4.allocation_)); | 468 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub4.allocation_)); |
478 | 469 |
479 stub1.surface_state_.last_used_time = older_; | 470 stub1.memory_manager_state_.last_used_time = older_; |
480 | 471 |
481 Manage(); | 472 Manage(); |
482 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub1.allocation_)); | 473 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub1.allocation_)); |
483 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); | 474 EXPECT_TRUE(IsAllocationBackgroundForSurfaceYes(stub2.allocation_)); |
484 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); | 475 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub3.allocation_)); |
485 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub4.allocation_)); | 476 EXPECT_TRUE(IsAllocationBackgroundForSurfaceNo(stub4.allocation_)); |
486 | 477 |
487 stub2.surface_state_.last_used_time = older_; | 478 stub2.memory_manager_state_.last_used_time = older_; |
488 | 479 |
489 Manage(); | 480 Manage(); |
490 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub1.allocation_)); | 481 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub1.allocation_)); |
491 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub2.allocation_)); | 482 EXPECT_TRUE(IsAllocationHibernatedForSurfaceYes(stub2.allocation_)); |
492 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub3.allocation_)); | 483 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub3.allocation_)); |
493 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub4.allocation_)); | 484 EXPECT_TRUE(IsAllocationHibernatedForSurfaceNo(stub4.allocation_)); |
494 } | 485 } |
495 | 486 |
496 #if !defined(OS_ANDROID) | 487 #if !defined(OS_ANDROID) |
497 // Test GpuMemoryAllocation memory allocation bonuses: | 488 // Test GpuMemoryAllocation memory allocation bonuses: |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 EXPECT_TRUE(stats[&stub1].visible); | 657 EXPECT_TRUE(stats[&stub1].visible); |
667 EXPECT_TRUE(stats[&stub2].visible); | 658 EXPECT_TRUE(stats[&stub2].visible); |
668 EXPECT_TRUE(stats[&stub3].visible); | 659 EXPECT_TRUE(stats[&stub3].visible); |
669 EXPECT_GT(stub1allocation3, 0ul); | 660 EXPECT_GT(stub1allocation3, 0ul); |
670 EXPECT_GT(stub2allocation3, 0ul); | 661 EXPECT_GT(stub2allocation3, 0ul); |
671 EXPECT_GT(stub3allocation3, 0ul); | 662 EXPECT_GT(stub3allocation3, 0ul); |
672 if (compositors_get_bonus_allocation && | 663 if (compositors_get_bonus_allocation && |
673 stub1allocation3 != GetMaximumTabAllocation()) | 664 stub1allocation3 != GetMaximumTabAllocation()) |
674 EXPECT_LT(stub1allocation3, stub1allocation2); | 665 EXPECT_LT(stub1allocation3, stub1allocation2); |
675 | 666 |
676 stub1.surface_state_.visible = false; | 667 stub1.memory_manager_state_.visible = false; |
677 Manage(); | 668 Manage(); |
678 stats = memory_manager_.stub_memory_stats_for_last_manage(); | 669 stats = memory_manager_.stub_memory_stats_for_last_manage(); |
679 size_t stub1allocation4 = stats[&stub1].allocation.gpu_resource_size_in_bytes; | 670 size_t stub1allocation4 = stats[&stub1].allocation.gpu_resource_size_in_bytes; |
680 size_t stub2allocation4 = stats[&stub2].allocation.gpu_resource_size_in_bytes; | 671 size_t stub2allocation4 = stats[&stub2].allocation.gpu_resource_size_in_bytes; |
681 size_t stub3allocation4 = stats[&stub3].allocation.gpu_resource_size_in_bytes; | 672 size_t stub3allocation4 = stats[&stub3].allocation.gpu_resource_size_in_bytes; |
682 | 673 |
683 EXPECT_EQ(stats.size(), 3ul); | 674 EXPECT_EQ(stats.size(), 3ul); |
684 EXPECT_FALSE(stats[&stub1].visible); | 675 EXPECT_FALSE(stats[&stub1].visible); |
685 EXPECT_FALSE(stats[&stub2].visible); | 676 EXPECT_FALSE(stats[&stub2].visible); |
686 EXPECT_TRUE(stats[&stub3].visible); | 677 EXPECT_TRUE(stats[&stub3].visible); |
687 EXPECT_EQ(stub1allocation4, 0ul); | 678 EXPECT_EQ(stub1allocation4, 0ul); |
688 EXPECT_GE(stub2allocation4, 0ul); | 679 EXPECT_GE(stub2allocation4, 0ul); |
689 EXPECT_GT(stub3allocation4, 0ul); | 680 EXPECT_GT(stub3allocation4, 0ul); |
690 if (compositors_get_bonus_allocation && | 681 if (compositors_get_bonus_allocation && |
691 stub3allocation3 != GetMaximumTabAllocation()) | 682 stub3allocation3 != GetMaximumTabAllocation()) |
692 EXPECT_GT(stub3allocation4, stub3allocation3); | 683 EXPECT_GT(stub3allocation4, stub3allocation3); |
693 } | 684 } |
OLD | NEW |