| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| (...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1896 case 0: | 1896 case 0: |
| 1897 EXPECT_TRUE(renderer->HasAllocatedResourcesForTesting( | 1897 EXPECT_TRUE(renderer->HasAllocatedResourcesForTesting( |
| 1898 surface1_render_pass_id)); | 1898 surface1_render_pass_id)); |
| 1899 EXPECT_TRUE(renderer->HasAllocatedResourcesForTesting( | 1899 EXPECT_TRUE(renderer->HasAllocatedResourcesForTesting( |
| 1900 surface2_render_pass_id)); | 1900 surface2_render_pass_id)); |
| 1901 | 1901 |
| 1902 // Reduce the memory limit to only fit the root layer and one render | 1902 // Reduce the memory limit to only fit the root layer and one render |
| 1903 // surface. This prevents any contents drawing into surfaces | 1903 // surface. This prevents any contents drawing into surfaces |
| 1904 // from being allocated. | 1904 // from being allocated. |
| 1905 host_impl->SetMemoryPolicy(ManagedMemoryPolicy(100 * 100 * 4 * 2)); | 1905 host_impl->SetMemoryPolicy(ManagedMemoryPolicy(100 * 100 * 4 * 2)); |
| 1906 host_impl->SetDiscardBackBufferWhenNotVisible(true); | |
| 1907 break; | 1906 break; |
| 1908 case 1: | 1907 case 1: |
| 1909 EXPECT_FALSE(renderer->HasAllocatedResourcesForTesting( | 1908 EXPECT_FALSE(renderer->HasAllocatedResourcesForTesting( |
| 1910 surface1_render_pass_id)); | 1909 surface1_render_pass_id)); |
| 1911 EXPECT_FALSE(renderer->HasAllocatedResourcesForTesting( | 1910 EXPECT_FALSE(renderer->HasAllocatedResourcesForTesting( |
| 1912 surface2_render_pass_id)); | 1911 surface2_render_pass_id)); |
| 1913 | 1912 |
| 1914 EndTest(); | 1913 EndTest(); |
| 1915 break; | 1914 break; |
| 1916 } | 1915 } |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2424 child_layer1_->SetBounds(gfx::Size(100, 100)); | 2423 child_layer1_->SetBounds(gfx::Size(100, 100)); |
| 2425 child_layer2_->SetBounds(gfx::Size(100, 100)); | 2424 child_layer2_->SetBounds(gfx::Size(100, 100)); |
| 2426 root_layer_->AddChild(child_layer1_); | 2425 root_layer_->AddChild(child_layer1_); |
| 2427 root_layer_->AddChild(child_layer2_); | 2426 root_layer_->AddChild(child_layer2_); |
| 2428 layer_tree_host()->SetRootLayer(root_layer_); | 2427 layer_tree_host()->SetRootLayer(root_layer_); |
| 2429 PostSetNeedsCommitToMainThread(); | 2428 PostSetNeedsCommitToMainThread(); |
| 2430 } | 2429 } |
| 2431 | 2430 |
| 2432 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, | 2431 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl, |
| 2433 bool visible) OVERRIDE { | 2432 bool visible) OVERRIDE { |
| 2434 // One backing should remain unevicted. | 2433 if (visible) { |
| 2435 EXPECT_EQ(100u * 100u * 4u * 1u, | 2434 // One backing should remain unevicted. |
| 2436 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); | 2435 EXPECT_EQ( |
| 2436 100u * 100u * 4u * 1u, |
| 2437 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
| 2438 } else { |
| 2439 EXPECT_EQ( |
| 2440 0u, |
| 2441 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
| 2442 } |
| 2443 |
| 2437 // Make sure that contents textures are marked as having been | 2444 // Make sure that contents textures are marked as having been |
| 2438 // purged. | 2445 // purged. |
| 2439 EXPECT_TRUE(host_impl->active_tree()->ContentsTexturesPurged()); | 2446 EXPECT_TRUE(host_impl->active_tree()->ContentsTexturesPurged()); |
| 2440 // End the test in this state. | 2447 // End the test in this state. |
| 2441 EndTest(); | 2448 EndTest(); |
| 2442 } | 2449 } |
| 2443 | 2450 |
| 2444 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { | 2451 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
| 2445 ++num_commits_; | 2452 ++num_commits_; |
| 2446 switch (num_commits_) { | 2453 switch (num_commits_) { |
| 2447 case 1: | 2454 case 1: |
| 2448 // All three backings should have memory. | 2455 // All three backings should have memory. |
| 2449 EXPECT_EQ( | 2456 EXPECT_EQ( |
| 2450 100u * 100u * 4u * 3u, | 2457 100u * 100u * 4u * 3u, |
| 2451 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); | 2458 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
| 2452 // Set a new policy that will kick out 1 of the 3 resources. | 2459 // Set a new policy that will kick out 1 of the 3 resources. |
| 2453 // Because a resource was evicted, a commit will be kicked off. | 2460 // Because a resource was evicted, a commit will be kicked off. |
| 2454 host_impl->SetMemoryPolicy( | 2461 host_impl->SetMemoryPolicy( |
| 2455 ManagedMemoryPolicy(100 * 100 * 4 * 2, | 2462 ManagedMemoryPolicy(100 * 100 * 4 * 2, |
| 2456 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, | 2463 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, |
| 2457 100 * 100 * 4 * 1, | |
| 2458 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, | |
| 2459 1000)); | 2464 1000)); |
| 2460 host_impl->SetDiscardBackBufferWhenNotVisible(true); | |
| 2461 break; | 2465 break; |
| 2462 case 2: | 2466 case 2: |
| 2463 // Only two backings should have memory. | 2467 // Only two backings should have memory. |
| 2464 EXPECT_EQ( | 2468 EXPECT_EQ( |
| 2465 100u * 100u * 4u * 2u, | 2469 100u * 100u * 4u * 2u, |
| 2466 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); | 2470 layer_tree_host()->contents_texture_manager()->MemoryUseBytes()); |
| 2467 // Become backgrounded, which will cause 1 more resource to be | 2471 // Become backgrounded, which will cause 1 more resource to be |
| 2468 // evicted. | 2472 // evicted. |
| 2469 PostSetVisibleToMainThread(false); | 2473 PostSetVisibleToMainThread(false); |
| 2470 break; | 2474 break; |
| (...skipping 2500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4971 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 4975 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 4972 int frame = num_commits_; | 4976 int frame = num_commits_; |
| 4973 switch (frame) { | 4977 switch (frame) { |
| 4974 case 0: | 4978 case 0: |
| 4975 break; | 4979 break; |
| 4976 case 1: | 4980 case 1: |
| 4977 // This will trigger a commit because the priority cutoff has changed. | 4981 // This will trigger a commit because the priority cutoff has changed. |
| 4978 impl->SetMemoryPolicy(ManagedMemoryPolicy( | 4982 impl->SetMemoryPolicy(ManagedMemoryPolicy( |
| 4979 16u*1024u*1024u, | 4983 16u*1024u*1024u, |
| 4980 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, | 4984 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, |
| 4981 0, | |
| 4982 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING, | |
| 4983 1000)); | 4985 1000)); |
| 4984 break; | 4986 break; |
| 4985 case 2: | 4987 case 2: |
| 4986 // This will not trigger a commit because the priority cutoff has not | 4988 // This will not trigger a commit because the priority cutoff has not |
| 4987 // changed, and there is already enough memory for all allocations. | 4989 // changed, and there is already enough memory for all allocations. |
| 4988 impl->SetMemoryPolicy(ManagedMemoryPolicy( | 4990 impl->SetMemoryPolicy(ManagedMemoryPolicy( |
| 4989 32u*1024u*1024u, | 4991 32u*1024u*1024u, |
| 4990 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, | 4992 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, |
| 4991 0, | |
| 4992 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING, | |
| 4993 1000)); | 4993 1000)); |
| 4994 break; | 4994 break; |
| 4995 case 3: | 4995 case 3: |
| 4996 NOTREACHED(); | 4996 NOTREACHED(); |
| 4997 break; | 4997 break; |
| 4998 } | 4998 } |
| 4999 } | 4999 } |
| 5000 | 5000 |
| 5001 virtual void AfterTest() OVERRIDE {} | 5001 virtual void AfterTest() OVERRIDE {} |
| 5002 | 5002 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5135 FakeOutputSurface::Create3d( | 5135 FakeOutputSurface::Create3d( |
| 5136 second_context_provider_ ? | 5136 second_context_provider_ ? |
| 5137 second_context_provider_ : | 5137 second_context_provider_ : |
| 5138 first_context_provider_)); | 5138 first_context_provider_)); |
| 5139 output_surface->SetMemoryPolicyToSetAtBind(make_scoped_ptr( | 5139 output_surface->SetMemoryPolicyToSetAtBind(make_scoped_ptr( |
| 5140 new ManagedMemoryPolicy( | 5140 new ManagedMemoryPolicy( |
| 5141 second_context_provider_ ? | 5141 second_context_provider_ ? |
| 5142 second_output_surface_memory_limit_ : | 5142 second_output_surface_memory_limit_ : |
| 5143 first_output_surface_memory_limit_, | 5143 first_output_surface_memory_limit_, |
| 5144 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, | 5144 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, |
| 5145 0, | |
| 5146 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING, | |
| 5147 ManagedMemoryPolicy::kDefaultNumResourcesLimit))); | 5145 ManagedMemoryPolicy::kDefaultNumResourcesLimit))); |
| 5148 return output_surface.PassAs<OutputSurface>(); | 5146 return output_surface.PassAs<OutputSurface>(); |
| 5149 } | 5147 } |
| 5150 | 5148 |
| 5151 virtual void SetupTree() OVERRIDE { | 5149 virtual void SetupTree() OVERRIDE { |
| 5152 root_ = FakeContentLayer::Create(&client_); | 5150 root_ = FakeContentLayer::Create(&client_); |
| 5153 root_->SetBounds(gfx::Size(20, 20)); | 5151 root_->SetBounds(gfx::Size(20, 20)); |
| 5154 layer_tree_host()->SetRootLayer(root_); | 5152 layer_tree_host()->SetRootLayer(root_); |
| 5155 LayerTreeHostTest::SetupTree(); | 5153 LayerTreeHostTest::SetupTree(); |
| 5156 } | 5154 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5196 size_t second_output_surface_memory_limit_; | 5194 size_t second_output_surface_memory_limit_; |
| 5197 FakeContentLayerClient client_; | 5195 FakeContentLayerClient client_; |
| 5198 scoped_refptr<FakeContentLayer> root_; | 5196 scoped_refptr<FakeContentLayer> root_; |
| 5199 }; | 5197 }; |
| 5200 | 5198 |
| 5201 // No output to copy for delegated renderers. | 5199 // No output to copy for delegated renderers. |
| 5202 SINGLE_AND_MULTI_THREAD_TEST_F( | 5200 SINGLE_AND_MULTI_THREAD_TEST_F( |
| 5203 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface); | 5201 LayerTreeHostTestSetMemoryPolicyOnLostOutputSurface); |
| 5204 | 5202 |
| 5205 } // namespace cc | 5203 } // namespace cc |
| OLD | NEW |