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

Side by Side Diff: cc/trees/layer_tree_host_unittest.cc

Issue 2633563003: Revert of Remove ForceReclaimResources (Closed)
Patch Set: Created 3 years, 11 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 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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 2911 matching lines...) Expand 10 before | Expand all | Expand 10 after
2922 class OnDrawCompositorFrameSink : public TestCompositorFrameSink { 2922 class OnDrawCompositorFrameSink : public TestCompositorFrameSink {
2923 public: 2923 public:
2924 explicit OnDrawCompositorFrameSink( 2924 explicit OnDrawCompositorFrameSink(
2925 scoped_refptr<ContextProvider> compositor_context_provider, 2925 scoped_refptr<ContextProvider> compositor_context_provider,
2926 scoped_refptr<ContextProvider> worker_context_provider, 2926 scoped_refptr<ContextProvider> worker_context_provider,
2927 SharedBitmapManager* shared_bitmap_manager, 2927 SharedBitmapManager* shared_bitmap_manager,
2928 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 2928 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
2929 const RendererSettings& renderer_settings, 2929 const RendererSettings& renderer_settings,
2930 base::SingleThreadTaskRunner* task_runner, 2930 base::SingleThreadTaskRunner* task_runner,
2931 bool synchronous_composite, 2931 bool synchronous_composite,
2932 bool force_disable_reclaim_resources,
2932 base::Closure invalidate_callback) 2933 base::Closure invalidate_callback)
2933 : TestCompositorFrameSink(std::move(compositor_context_provider), 2934 : TestCompositorFrameSink(std::move(compositor_context_provider),
2934 std::move(worker_context_provider), 2935 std::move(worker_context_provider),
2935 shared_bitmap_manager, 2936 shared_bitmap_manager,
2936 gpu_memory_buffer_manager, 2937 gpu_memory_buffer_manager,
2937 renderer_settings, 2938 renderer_settings,
2938 task_runner, 2939 task_runner,
2939 synchronous_composite), 2940 synchronous_composite,
2941 force_disable_reclaim_resources),
2940 invalidate_callback_(std::move(invalidate_callback)) {} 2942 invalidate_callback_(std::move(invalidate_callback)) {}
2941 2943
2942 // TestCompositorFrameSink overrides. 2944 // TestCompositorFrameSink overrides.
2943 void Invalidate() override { invalidate_callback_.Run(); } 2945 void Invalidate() override { invalidate_callback_.Run(); }
2944 2946
2945 void OnDraw(bool resourceless_software_draw) { 2947 void OnDraw(bool resourceless_software_draw) {
2946 gfx::Transform identity; 2948 gfx::Transform identity;
2947 gfx::Rect empty_rect; 2949 gfx::Rect empty_rect;
2948 client_->OnDraw(identity, empty_rect, resourceless_software_draw); 2950 client_->OnDraw(identity, empty_rect, resourceless_software_draw);
2949 } 2951 }
(...skipping 15 matching lines...) Expand all
2965 scoped_refptr<ContextProvider> worker_context_provider) override { 2967 scoped_refptr<ContextProvider> worker_context_provider) override {
2966 auto on_draw_callback = base::Bind( 2968 auto on_draw_callback = base::Bind(
2967 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: 2969 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor::
2968 CallOnDraw, 2970 CallOnDraw,
2969 base::Unretained(this)); 2971 base::Unretained(this));
2970 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( 2972 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>(
2971 compositor_context_provider, std::move(worker_context_provider), 2973 compositor_context_provider, std::move(worker_context_provider),
2972 shared_bitmap_manager(), gpu_memory_buffer_manager(), 2974 shared_bitmap_manager(), gpu_memory_buffer_manager(),
2973 layer_tree_host()->GetSettings().renderer_settings, 2975 layer_tree_host()->GetSettings().renderer_settings,
2974 ImplThreadTaskRunner(), false /* synchronous_composite */, 2976 ImplThreadTaskRunner(), false /* synchronous_composite */,
2977 false /* force_disable_reclaim_resources */,
2975 std::move(on_draw_callback)); 2978 std::move(on_draw_callback));
2976 compositor_frame_sink_ = frame_sink.get(); 2979 compositor_frame_sink_ = frame_sink.get();
2977 return std::move(frame_sink); 2980 return std::move(frame_sink);
2978 } 2981 }
2979 2982
2980 void CallOnDraw() { 2983 void CallOnDraw() {
2981 if (!TestEnded()) { 2984 if (!TestEnded()) {
2982 // Synchronous compositor does not draw unless told to do so by the output 2985 // Synchronous compositor does not draw unless told to do so by the output
2983 // surface. But it needs to be done on a new stack frame. 2986 // surface. But it needs to be done on a new stack frame.
2984 bool resourceless_software_draw = false; 2987 bool resourceless_software_draw = false;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
3104 scoped_refptr<ContextProvider> compositor_context_provider, 3107 scoped_refptr<ContextProvider> compositor_context_provider,
3105 scoped_refptr<ContextProvider> worker_context_provider) override { 3108 scoped_refptr<ContextProvider> worker_context_provider) override {
3106 auto on_draw_callback = 3109 auto on_draw_callback =
3107 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw, 3110 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw,
3108 base::Unretained(this)); 3111 base::Unretained(this));
3109 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( 3112 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>(
3110 compositor_context_provider, std::move(worker_context_provider), 3113 compositor_context_provider, std::move(worker_context_provider),
3111 shared_bitmap_manager(), gpu_memory_buffer_manager(), 3114 shared_bitmap_manager(), gpu_memory_buffer_manager(),
3112 layer_tree_host()->GetSettings().renderer_settings, 3115 layer_tree_host()->GetSettings().renderer_settings,
3113 ImplThreadTaskRunner(), false /* synchronous_composite */, 3116 ImplThreadTaskRunner(), false /* synchronous_composite */,
3117 false /* force_disable_reclaim_resources */,
3114 std::move(on_draw_callback)); 3118 std::move(on_draw_callback));
3115 compositor_frame_sink_ = frame_sink.get(); 3119 compositor_frame_sink_ = frame_sink.get();
3116 return std::move(frame_sink); 3120 return std::move(frame_sink);
3117 } 3121 }
3118 3122
3119 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 3123 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
3120 3124
3121 void CallOnDraw() { 3125 void CallOnDraw() {
3122 if (!TestEnded()) { 3126 if (!TestEnded()) {
3123 // Synchronous compositor does not draw unless told to do so by the output 3127 // Synchronous compositor does not draw unless told to do so by the output
(...skipping 2498 matching lines...) Expand 10 before | Expand all | Expand 10 after
5622 settings->single_thread_proxy_scheduler = false; 5626 settings->single_thread_proxy_scheduler = false;
5623 settings->use_zero_copy = true; 5627 settings->use_zero_copy = true;
5624 } 5628 }
5625 5629
5626 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( 5630 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink(
5627 scoped_refptr<ContextProvider> compositor_context_provider, 5631 scoped_refptr<ContextProvider> compositor_context_provider,
5628 scoped_refptr<ContextProvider> worker_context_provider) override { 5632 scoped_refptr<ContextProvider> worker_context_provider) override {
5629 bool synchronous_composite = 5633 bool synchronous_composite =
5630 !HasImplThread() && 5634 !HasImplThread() &&
5631 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; 5635 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler;
5636 // Relaiming resources is parameterized for this test.
5637 bool force_disable_reclaim_resources = !reclaim_resources_;
5632 return base::MakeUnique<TestCompositorFrameSink>( 5638 return base::MakeUnique<TestCompositorFrameSink>(
5633 compositor_context_provider, std::move(worker_context_provider), 5639 compositor_context_provider, std::move(worker_context_provider),
5634 shared_bitmap_manager(), gpu_memory_buffer_manager(), 5640 shared_bitmap_manager(), gpu_memory_buffer_manager(),
5635 layer_tree_host()->GetSettings().renderer_settings, 5641 layer_tree_host()->GetSettings().renderer_settings,
5636 ImplThreadTaskRunner(), synchronous_composite); 5642 ImplThreadTaskRunner(), synchronous_composite,
5643 force_disable_reclaim_resources);
5637 } 5644 }
5638 5645
5639 void BeginTest() override { 5646 void BeginTest() override {
5640 // Successful composite. 5647 // Successful composite.
5641 std::unique_ptr<SwapPromise> swap_promise0( 5648 std::unique_ptr<SwapPromise> swap_promise0(
5642 new TestSwapPromise(&swap_promise_result_[0])); 5649 new TestSwapPromise(&swap_promise_result_[0]));
5643 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 5650 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
5644 std::move(swap_promise0)); 5651 std::move(swap_promise0));
5645 layer_tree_host()->Composite(base::TimeTicks::Now()); 5652 layer_tree_host()->Composite(base::TimeTicks::Now());
5646 5653
5647 // Fail to swap (no damage). 5654 // Fail to swap (no damage) if not reclaiming resources from the Display.
5648 std::unique_ptr<SwapPromise> swap_promise1( 5655 std::unique_ptr<SwapPromise> swap_promise1(
5649 new TestSwapPromise(&swap_promise_result_[1])); 5656 new TestSwapPromise(&swap_promise_result_[1]));
5650 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 5657 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
5651 std::move(swap_promise1)); 5658 std::move(swap_promise1));
5652 layer_tree_host()->SetNeedsCommit(); 5659 layer_tree_host()->SetNeedsCommit();
5653 layer_tree_host()->Composite(base::TimeTicks::Now()); 5660 layer_tree_host()->Composite(base::TimeTicks::Now());
5654 5661
5655 // Fail to draw (not visible). 5662 // Fail to draw (not visible).
5656 std::unique_ptr<SwapPromise> swap_promise2( 5663 std::unique_ptr<SwapPromise> swap_promise2(
5657 new TestSwapPromise(&swap_promise_result_[2])); 5664 new TestSwapPromise(&swap_promise_result_[2]));
(...skipping 15 matching lines...) Expand all
5673 EXPECT_EQ(3, commit_count_); 5680 EXPECT_EQ(3, commit_count_);
5674 5681
5675 // Initial swap promise should have succeded. 5682 // Initial swap promise should have succeded.
5676 { 5683 {
5677 base::AutoLock lock(swap_promise_result_[0].lock); 5684 base::AutoLock lock(swap_promise_result_[0].lock);
5678 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); 5685 EXPECT_TRUE(swap_promise_result_[0].did_swap_called);
5679 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); 5686 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called);
5680 EXPECT_TRUE(swap_promise_result_[0].dtor_called); 5687 EXPECT_TRUE(swap_promise_result_[0].dtor_called);
5681 } 5688 }
5682 5689
5683 // Second swap promise fails to swap. 5690 // Second swap promise fails to swap if not reclaiming resources from the
5691 // Display.
5684 { 5692 {
5685 base::AutoLock lock(swap_promise_result_[1].lock); 5693 base::AutoLock lock(swap_promise_result_[1].lock);
5686 EXPECT_TRUE(swap_promise_result_[1].did_activate_called); 5694 EXPECT_TRUE(swap_promise_result_[1].did_activate_called);
5687 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); 5695 if (!reclaim_resources_) {
5688 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); 5696 EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
5689 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); 5697 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
5698 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason);
5699 } else {
5700 EXPECT_TRUE(swap_promise_result_[1].did_swap_called);
5701 EXPECT_FALSE(swap_promise_result_[1].did_not_swap_called);
5702 }
5690 EXPECT_TRUE(swap_promise_result_[1].dtor_called); 5703 EXPECT_TRUE(swap_promise_result_[1].dtor_called);
5691 } 5704 }
5692 5705
5693 // Third swap promises also fails to swap (and draw). 5706 // Third swap promises also fails to swap (and draw).
5694 { 5707 {
5695 base::AutoLock lock(swap_promise_result_[2].lock); 5708 base::AutoLock lock(swap_promise_result_[2].lock);
5696 EXPECT_TRUE(swap_promise_result_[2].did_activate_called); 5709 EXPECT_TRUE(swap_promise_result_[2].did_activate_called);
5697 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); 5710 EXPECT_FALSE(swap_promise_result_[2].did_swap_called);
5698 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); 5711 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called);
5699 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); 5712 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason);
5700 EXPECT_TRUE(swap_promise_result_[2].dtor_called); 5713 EXPECT_TRUE(swap_promise_result_[2].dtor_called);
5701 } 5714 }
5702 } 5715 }
5703 5716
5717 bool reclaim_resources_;
5704 int commit_count_ = 0; 5718 int commit_count_ = 0;
5705 TestSwapPromiseResult swap_promise_result_[3]; 5719 TestSwapPromiseResult swap_promise_result_[3];
5706 }; 5720 };
5707 5721
5708 // Synchronous composite is a single-threaded only feature. 5722 TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, NoReclaim) {
5709 SINGLE_THREAD_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise); 5723 reclaim_resources_ = false;
5724 RunTest(CompositorMode::SINGLE_THREADED);
5725 }
5726
5727 TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, Reclaim) {
5728 reclaim_resources_ = true;
5729 RunTest(CompositorMode::SINGLE_THREADED);
5730 }
5710 5731
5711 // Make sure page scale and top control deltas are applied to the client even 5732 // Make sure page scale and top control deltas are applied to the client even
5712 // when the LayerTreeHost doesn't have a root layer. 5733 // when the LayerTreeHost doesn't have a root layer.
5713 class LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer 5734 class LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer
5714 : public LayerTreeHostTest { 5735 : public LayerTreeHostTest {
5715 public: 5736 public:
5716 LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer() 5737 LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer()
5717 : deltas_sent_to_client_(false) {} 5738 : deltas_sent_to_client_(false) {}
5718 5739
5719 void BeginTest() override { 5740 void BeginTest() override {
(...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after
6977 EndTest(); 6998 EndTest();
6978 } 6999 }
6979 7000
6980 void AfterTest() override {} 7001 void AfterTest() override {}
6981 }; 7002 };
6982 7003
6983 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources); 7004 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources);
6984 7005
6985 } // namespace 7006 } // namespace
6986 } // namespace cc 7007 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_pixeltest_tiles.cc ('k') | content/renderer/gpu/render_widget_compositor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698