Index: content/common/gpu/gpu_memory_manager_unittest.cc |
diff --git a/content/common/gpu/gpu_memory_manager_unittest.cc b/content/common/gpu/gpu_memory_manager_unittest.cc |
index ded1a28d9def2657d9b5c8754c44aede7c05ba71..c735e4f6770b1e10aec104d51ff4225f4aa762fc 100644 |
--- a/content/common/gpu/gpu_memory_manager_unittest.cc |
+++ b/content/common/gpu/gpu_memory_manager_unittest.cc |
@@ -157,10 +157,6 @@ class FakeClient : public GpuMemoryManagerClient { |
uint64 BytesWhenVisible() const { |
return allocation_.bytes_limit_when_visible; |
} |
- |
- uint64 BytesWhenNotVisible() const { |
- return allocation_.bytes_limit_when_not_visible; |
- } |
}; |
class GpuMemoryManagerTest : public testing::Test { |
@@ -170,7 +166,6 @@ class GpuMemoryManagerTest : public testing::Test { |
GpuMemoryManagerTest() |
: memmgr_(0, kFrontbufferLimitForTest) { |
memmgr_.TestingDisableScheduleManage(); |
- memmgr_.allow_nonvisible_memory_ = true; |
} |
virtual void SetUp() { |
@@ -183,32 +178,29 @@ class GpuMemoryManagerTest : public testing::Test { |
bool IsAllocationForegroundForSurfaceYes( |
const MemoryAllocation& alloc) { |
- return !alloc.have_backbuffer_when_not_visible; |
+ return true; |
} |
bool IsAllocationBackgroundForSurfaceYes( |
const MemoryAllocation& alloc) { |
- return !alloc.have_backbuffer_when_not_visible; |
+ return true; |
} |
bool IsAllocationHibernatedForSurfaceYes( |
const MemoryAllocation& alloc) { |
- return !alloc.have_backbuffer_when_not_visible; |
+ return true; |
} |
bool IsAllocationForegroundForSurfaceNo( |
const MemoryAllocation& alloc) { |
- return !alloc.have_backbuffer_when_not_visible && |
- alloc.bytes_limit_when_visible == |
+ return alloc.bytes_limit_when_visible == |
GetMinimumClientAllocation(); |
} |
bool IsAllocationBackgroundForSurfaceNo( |
const MemoryAllocation& alloc) { |
- return !alloc.have_backbuffer_when_not_visible && |
- alloc.bytes_limit_when_visible == |
+ return alloc.bytes_limit_when_visible == |
GetMinimumClientAllocation(); |
} |
bool IsAllocationHibernatedForSurfaceNo( |
const MemoryAllocation& alloc) { |
- return !alloc.have_backbuffer_when_not_visible && |
- alloc.bytes_limit_when_visible == 0; |
+ return alloc.bytes_limit_when_visible == 0; |
} |
void Manage() { |
@@ -549,201 +541,6 @@ TEST_F(GpuMemoryManagerTest, StubMemoryStatsForLastManageTests) { |
EXPECT_GT(stub3allocation4, stub3allocation3); |
} |
-// Test GpuMemoryManager's managed memory tracking |
-TEST_F(GpuMemoryManagerTest, TestManagedUsageTracking) { |
- FakeClient stub1(&memmgr_, GenerateUniqueSurfaceId(), true), |
- stub2(&memmgr_, GenerateUniqueSurfaceId(), false); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Set memory allocations and verify the results are reflected. |
- stub1.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 5, false)); |
- stub2.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 7, false)); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Remove a visible client |
- stub1.client_state_.reset(); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- stub1.client_state_.reset(memmgr_.CreateClientState(&stub1, true, true)); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- stub1.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 5, false)); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Remove a nonvisible client |
- stub2.client_state_.reset(); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- stub2.client_state_.reset(memmgr_.CreateClientState(&stub2, true, false)); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(0ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- stub2.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 7, false)); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Create and then destroy some stubs, and verify their allocations go away. |
- { |
- FakeClient stub3(&memmgr_, GenerateUniqueSurfaceId(), true), |
- stub4(&memmgr_, GenerateUniqueSurfaceId(), false); |
- stub3.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 1, false)); |
- stub4.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 2, false)); |
- EXPECT_EQ(6ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(9ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- } |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Do no-op changes to stubs' visibility and make sure nothing chnages. |
- stub1.SetVisible(true); |
- stub2.SetVisible(false); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Change visbility state. |
- stub1.SetVisible(false); |
- stub2.SetVisible(true); |
- EXPECT_EQ(7ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(5ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Increase allocation amounts. |
- stub1.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 6, false)); |
- stub2.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 8, false)); |
- EXPECT_EQ(8ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(6ul, memmgr_.bytes_allocated_managed_nonvisible_); |
- |
- // Decrease allocation amounts. |
- stub1.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 4, false)); |
- stub2.SetManagedMemoryStats(ManagedMemoryStats(0, 0, 6, false)); |
- EXPECT_EQ(6ul, memmgr_.bytes_allocated_managed_visible_); |
- EXPECT_EQ(4ul, memmgr_.bytes_allocated_managed_nonvisible_); |
-} |
- |
-// Test nonvisible MRU behavior (the most recently used nonvisible clients |
-// keep their contents). |
-TEST_F(GpuMemoryManagerTest, BackgroundMru) { |
- // Set memory manager constants for this test. Note that the budget |
- // for backgrounded content will be 64/4 = 16. |
- memmgr_.TestingSetAvailableGpuMemory(64); |
- memmgr_.TestingSetMinimumClientAllocation(8); |
- |
- uint64 bytes_when_not_visible_expected = 6u; |
- |
- FakeClient stub1(&memmgr_, GenerateUniqueSurfaceId(), true); |
- FakeClient stub2(&memmgr_, GenerateUniqueSurfaceId(), true); |
- FakeClient stub3(&memmgr_, GenerateUniqueSurfaceId(), true); |
- |
- // When all are visible, they should all be allowed to have memory |
- // should they become nonvisible. |
- SetClientStats(&stub1, 6, 23); |
- SetClientStats(&stub2, 6, 23); |
- SetClientStats(&stub3, 6, 23); |
- Manage(); |
- EXPECT_GE(stub1.BytesWhenVisible(), 20u); |
- EXPECT_GE(stub2.BytesWhenVisible(), 20u); |
- EXPECT_GE(stub3.BytesWhenVisible(), 20u); |
- EXPECT_LT(stub1.BytesWhenVisible(), 22u); |
- EXPECT_LT(stub2.BytesWhenVisible(), 22u); |
- EXPECT_LT(stub3.BytesWhenVisible(), 22u); |
- EXPECT_GE(stub1.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- EXPECT_GE(stub2.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- EXPECT_GE(stub3.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- |
- // Background stubs 1 and 2, and they should fit. All stubs should |
- // have their full nicetohave budget should they become visible. |
- stub2.SetVisible(false); |
- stub1.SetVisible(false); |
- Manage(); |
- EXPECT_GE(stub1.BytesWhenVisible(), 23u); |
- EXPECT_GE(stub2.BytesWhenVisible(), 23u); |
- EXPECT_GE(stub3.BytesWhenVisible(), 23u); |
- EXPECT_LT(stub1.BytesWhenVisible(), 32u); |
- EXPECT_LT(stub2.BytesWhenVisible(), 32u); |
- EXPECT_GE(stub1.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- EXPECT_GE(stub2.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- EXPECT_GE(stub3.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- |
- // Now background stub 3, and it should cause stub 2 to be |
- // evicted because it was set non-visible first |
- stub3.SetVisible(false); |
- Manage(); |
- EXPECT_GE(stub1.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- EXPECT_EQ(stub2.BytesWhenNotVisible(), 0u); |
- EXPECT_GE(stub3.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
-} |
- |
-TEST_F(GpuMemoryManagerTest, AllowNonvisibleMemory) { |
- memmgr_.TestingSetAvailableGpuMemory(512); |
- memmgr_.TestingSetMinimumClientAllocation(16); |
- |
- FakeClient stub1(&memmgr_, GenerateUniqueSurfaceId(), true); |
- FakeClient stub2(&memmgr_, GenerateUniqueSurfaceId(), true); |
- FakeClient stub3(&memmgr_, GenerateUniqueSurfaceId(), true); |
- |
- memmgr_.allow_nonvisible_memory_ = true; |
- stub1.SetVisible(true); |
- SetClientStats(&stub1, 20, 80); |
- SetClientStats(&stub2, 20, 80); |
- SetClientStats(&stub3, 20, 80); |
- Manage(); |
- EXPECT_GT(stub1.BytesWhenNotVisible(), 0u); |
- EXPECT_GT(stub2.BytesWhenNotVisible(), 0u); |
- EXPECT_GT(stub3.BytesWhenNotVisible(), 0u); |
- |
- memmgr_.allow_nonvisible_memory_ = false; |
- Manage(); |
- EXPECT_EQ(stub1.BytesWhenNotVisible(), 0u); |
- EXPECT_EQ(stub2.BytesWhenNotVisible(), 0u); |
- EXPECT_EQ(stub3.BytesWhenNotVisible(), 0u); |
-} |
- |
-// Test that once a backgrounded client has dropped its resources, it |
-// doesn't get them back until it becomes visible again. |
-TEST_F(GpuMemoryManagerTest, BackgroundDiscardPersistent) { |
- // Set memory manager constants for this test. Note that the budget |
- // for backgrounded content will be 64/4 = 16. |
- memmgr_.TestingSetAvailableGpuMemory(64); |
- memmgr_.TestingSetMinimumClientAllocation(8); |
- |
- uint64 bytes_when_not_visible_expected = 10ul; |
- if (!memmgr_.allow_nonvisible_memory_) |
- bytes_when_not_visible_expected = 0; |
- |
- FakeClient stub1(&memmgr_, GenerateUniqueSurfaceId(), true); |
- FakeClient stub2(&memmgr_, GenerateUniqueSurfaceId(), true); |
- |
- // Both clients should be able to keep their contents should one of |
- // them become nonvisible. |
- SetClientStats(&stub1, 10, 20); |
- SetClientStats(&stub2, 10, 20); |
- Manage(); |
- EXPECT_GE(stub1.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- EXPECT_GE(stub2.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- |
- // If they both go nonvisible, then only the most recently used client |
- // should keep its contents. |
- stub1.SetVisible(false); |
- stub2.SetVisible(false); |
- Manage(); |
- EXPECT_EQ(stub1.BytesWhenNotVisible(), 0u); |
- EXPECT_GE(stub2.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- |
- // When becoming visible, stub 2 should get its contents back, and |
- // retain them next time it is made nonvisible. |
- stub2.SetVisible(true); |
- Manage(); |
- EXPECT_GE(stub2.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
- stub2.SetVisible(false); |
- Manage(); |
- EXPECT_GE(stub2.BytesWhenNotVisible(), bytes_when_not_visible_expected); |
-} |
- |
// Test tracking of unmanaged (e.g, WebGL) memory. |
TEST_F(GpuMemoryManagerTest, UnmanagedTracking) { |
// Set memory manager constants for this test |
@@ -810,7 +607,6 @@ TEST_F(GpuMemoryManagerTest, DefaultAllocation) { |
Manage(); |
EXPECT_GE(stub1.BytesWhenVisible(), |
memmgr_.GetDefaultClientAllocation()); |
- EXPECT_EQ(stub1.BytesWhenNotVisible(), 0u); |
} |
} // namespace content |