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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 3068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3079 class OnDrawCompositorFrameSink : public TestCompositorFrameSink { | 3079 class OnDrawCompositorFrameSink : public TestCompositorFrameSink { |
3080 public: | 3080 public: |
3081 explicit OnDrawCompositorFrameSink( | 3081 explicit OnDrawCompositorFrameSink( |
3082 scoped_refptr<ContextProvider> compositor_context_provider, | 3082 scoped_refptr<ContextProvider> compositor_context_provider, |
3083 scoped_refptr<ContextProvider> worker_context_provider, | 3083 scoped_refptr<ContextProvider> worker_context_provider, |
3084 SharedBitmapManager* shared_bitmap_manager, | 3084 SharedBitmapManager* shared_bitmap_manager, |
3085 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 3085 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
3086 const RendererSettings& renderer_settings, | 3086 const RendererSettings& renderer_settings, |
3087 base::SingleThreadTaskRunner* task_runner, | 3087 base::SingleThreadTaskRunner* task_runner, |
3088 bool synchronous_composite, | 3088 bool synchronous_composite, |
3089 bool force_disable_reclaim_resources, | |
3090 base::Closure invalidate_callback) | 3089 base::Closure invalidate_callback) |
3091 : TestCompositorFrameSink(std::move(compositor_context_provider), | 3090 : TestCompositorFrameSink(std::move(compositor_context_provider), |
3092 std::move(worker_context_provider), | 3091 std::move(worker_context_provider), |
3093 shared_bitmap_manager, | 3092 shared_bitmap_manager, |
3094 gpu_memory_buffer_manager, | 3093 gpu_memory_buffer_manager, |
3095 renderer_settings, | 3094 renderer_settings, |
3096 task_runner, | 3095 task_runner, |
3097 synchronous_composite, | 3096 synchronous_composite), |
3098 force_disable_reclaim_resources), | |
3099 invalidate_callback_(std::move(invalidate_callback)) {} | 3097 invalidate_callback_(std::move(invalidate_callback)) {} |
3100 | 3098 |
3101 // TestCompositorFrameSink overrides. | 3099 // TestCompositorFrameSink overrides. |
3102 void Invalidate() override { invalidate_callback_.Run(); } | 3100 void Invalidate() override { invalidate_callback_.Run(); } |
3103 | 3101 |
3104 void OnDraw(bool resourceless_software_draw) { | 3102 void OnDraw(bool resourceless_software_draw) { |
3105 gfx::Transform identity; | 3103 gfx::Transform identity; |
3106 gfx::Rect empty_rect; | 3104 gfx::Rect empty_rect; |
3107 client_->OnDraw(identity, empty_rect, resourceless_software_draw); | 3105 client_->OnDraw(identity, empty_rect, resourceless_software_draw); |
3108 } | 3106 } |
(...skipping 15 matching lines...) Expand all Loading... |
3124 scoped_refptr<ContextProvider> worker_context_provider) override { | 3122 scoped_refptr<ContextProvider> worker_context_provider) override { |
3125 auto on_draw_callback = base::Bind( | 3123 auto on_draw_callback = base::Bind( |
3126 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: | 3124 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: |
3127 CallOnDraw, | 3125 CallOnDraw, |
3128 base::Unretained(this)); | 3126 base::Unretained(this)); |
3129 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( | 3127 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( |
3130 compositor_context_provider, std::move(worker_context_provider), | 3128 compositor_context_provider, std::move(worker_context_provider), |
3131 shared_bitmap_manager(), gpu_memory_buffer_manager(), | 3129 shared_bitmap_manager(), gpu_memory_buffer_manager(), |
3132 layer_tree_host()->GetSettings().renderer_settings, | 3130 layer_tree_host()->GetSettings().renderer_settings, |
3133 ImplThreadTaskRunner(), false /* synchronous_composite */, | 3131 ImplThreadTaskRunner(), false /* synchronous_composite */, |
3134 false /* force_disable_reclaim_resources */, | |
3135 std::move(on_draw_callback)); | 3132 std::move(on_draw_callback)); |
3136 compositor_frame_sink_ = frame_sink.get(); | 3133 compositor_frame_sink_ = frame_sink.get(); |
3137 return std::move(frame_sink); | 3134 return std::move(frame_sink); |
3138 } | 3135 } |
3139 | 3136 |
3140 void CallOnDraw() { | 3137 void CallOnDraw() { |
3141 if (!TestEnded()) { | 3138 if (!TestEnded()) { |
3142 // Synchronous compositor does not draw unless told to do so by the output | 3139 // Synchronous compositor does not draw unless told to do so by the output |
3143 // surface. But it needs to be done on a new stack frame. | 3140 // surface. But it needs to be done on a new stack frame. |
3144 bool resourceless_software_draw = false; | 3141 bool resourceless_software_draw = false; |
(...skipping 2596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5741 settings->single_thread_proxy_scheduler = false; | 5738 settings->single_thread_proxy_scheduler = false; |
5742 settings->use_zero_copy = true; | 5739 settings->use_zero_copy = true; |
5743 } | 5740 } |
5744 | 5741 |
5745 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( | 5742 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( |
5746 scoped_refptr<ContextProvider> compositor_context_provider, | 5743 scoped_refptr<ContextProvider> compositor_context_provider, |
5747 scoped_refptr<ContextProvider> worker_context_provider) override { | 5744 scoped_refptr<ContextProvider> worker_context_provider) override { |
5748 bool synchronous_composite = | 5745 bool synchronous_composite = |
5749 !HasImplThread() && | 5746 !HasImplThread() && |
5750 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; | 5747 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; |
5751 // Relaiming resources is parameterized for this test. | |
5752 bool force_disable_reclaim_resources = !reclaim_resources_; | |
5753 return base::MakeUnique<TestCompositorFrameSink>( | 5748 return base::MakeUnique<TestCompositorFrameSink>( |
5754 compositor_context_provider, std::move(worker_context_provider), | 5749 compositor_context_provider, std::move(worker_context_provider), |
5755 shared_bitmap_manager(), gpu_memory_buffer_manager(), | 5750 shared_bitmap_manager(), gpu_memory_buffer_manager(), |
5756 layer_tree_host()->GetSettings().renderer_settings, | 5751 layer_tree_host()->GetSettings().renderer_settings, |
5757 ImplThreadTaskRunner(), synchronous_composite, | 5752 ImplThreadTaskRunner(), synchronous_composite); |
5758 force_disable_reclaim_resources); | |
5759 } | 5753 } |
5760 | 5754 |
5761 void BeginTest() override { | 5755 void BeginTest() override { |
5762 // Successful composite. | 5756 // Successful composite. |
5763 std::unique_ptr<SwapPromise> swap_promise0( | 5757 std::unique_ptr<SwapPromise> swap_promise0( |
5764 new TestSwapPromise(&swap_promise_result_[0])); | 5758 new TestSwapPromise(&swap_promise_result_[0])); |
5765 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( | 5759 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( |
5766 std::move(swap_promise0)); | 5760 std::move(swap_promise0)); |
5767 layer_tree_host()->Composite(base::TimeTicks::Now()); | 5761 layer_tree_host()->Composite(base::TimeTicks::Now()); |
5768 | 5762 |
(...skipping 26 matching lines...) Expand all Loading... |
5795 EXPECT_EQ(3, commit_count_); | 5789 EXPECT_EQ(3, commit_count_); |
5796 | 5790 |
5797 // Initial swap promise should have succeded. | 5791 // Initial swap promise should have succeded. |
5798 { | 5792 { |
5799 base::AutoLock lock(swap_promise_result_[0].lock); | 5793 base::AutoLock lock(swap_promise_result_[0].lock); |
5800 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); | 5794 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); |
5801 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); | 5795 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); |
5802 EXPECT_TRUE(swap_promise_result_[0].dtor_called); | 5796 EXPECT_TRUE(swap_promise_result_[0].dtor_called); |
5803 } | 5797 } |
5804 | 5798 |
5805 // Second swap promise fails to swap if not reclaiming resources from the | 5799 // Second swap promise fails to swap. |
5806 // Display. | |
5807 { | 5800 { |
5808 base::AutoLock lock(swap_promise_result_[1].lock); | 5801 base::AutoLock lock(swap_promise_result_[1].lock); |
5809 EXPECT_TRUE(swap_promise_result_[1].did_activate_called); | 5802 EXPECT_TRUE(swap_promise_result_[1].did_activate_called); |
5810 if (!reclaim_resources_) { | 5803 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); |
5811 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); | 5804 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); |
5812 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); | 5805 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); |
5813 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason); | |
5814 } else { | |
5815 EXPECT_TRUE(swap_promise_result_[1].did_swap_called); | |
5816 EXPECT_FALSE(swap_promise_result_[1].did_not_swap_called); | |
5817 } | |
5818 EXPECT_TRUE(swap_promise_result_[1].dtor_called); | 5806 EXPECT_TRUE(swap_promise_result_[1].dtor_called); |
5819 } | 5807 } |
5820 | 5808 |
5821 // Third swap promises also fails to swap (and draw). | 5809 // Third swap promises also fails to swap (and draw). |
5822 { | 5810 { |
5823 base::AutoLock lock(swap_promise_result_[2].lock); | 5811 base::AutoLock lock(swap_promise_result_[2].lock); |
5824 EXPECT_TRUE(swap_promise_result_[2].did_activate_called); | 5812 EXPECT_TRUE(swap_promise_result_[2].did_activate_called); |
5825 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); | 5813 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); |
5826 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); | 5814 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); |
5827 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); | 5815 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); |
5828 EXPECT_TRUE(swap_promise_result_[2].dtor_called); | 5816 EXPECT_TRUE(swap_promise_result_[2].dtor_called); |
5829 } | 5817 } |
5830 } | 5818 } |
5831 | 5819 |
5832 bool reclaim_resources_; | |
5833 int commit_count_ = 0; | 5820 int commit_count_ = 0; |
5834 TestSwapPromiseResult swap_promise_result_[3]; | 5821 TestSwapPromiseResult swap_promise_result_[3]; |
5835 }; | 5822 }; |
5836 | 5823 |
5837 TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, NoReclaim) { | 5824 // Synchronous composite is a single-threaded only feature. |
5838 reclaim_resources_ = false; | 5825 SINGLE_THREAD_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise); |
5839 RunTest(CompositorMode::SINGLE_THREADED); | |
5840 } | |
5841 | |
5842 TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, Reclaim) { | |
5843 reclaim_resources_ = true; | |
5844 RunTest(CompositorMode::SINGLE_THREADED); | |
5845 } | |
5846 | 5826 |
5847 // Make sure page scale and top control deltas are applied to the client even | 5827 // Make sure page scale and top control deltas are applied to the client even |
5848 // when the LayerTreeHost doesn't have a root layer. | 5828 // when the LayerTreeHost doesn't have a root layer. |
5849 class LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer | 5829 class LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer |
5850 : public LayerTreeHostTest { | 5830 : public LayerTreeHostTest { |
5851 public: | 5831 public: |
5852 LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer() | 5832 LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer() |
5853 : deltas_sent_to_client_(false) {} | 5833 : deltas_sent_to_client_(false) {} |
5854 | 5834 |
5855 void BeginTest() override { | 5835 void BeginTest() override { |
(...skipping 1659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7515 DCHECK_EQ(hud->scroll_tree_index(), root_layer->scroll_tree_index()); | 7495 DCHECK_EQ(hud->scroll_tree_index(), root_layer->scroll_tree_index()); |
7516 } | 7496 } |
7517 | 7497 |
7518 void AfterTest() override {} | 7498 void AfterTest() override {} |
7519 }; | 7499 }; |
7520 | 7500 |
7521 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestHudLayerWithLayerLists); | 7501 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestHudLayerWithLayerLists); |
7522 | 7502 |
7523 } // namespace | 7503 } // namespace |
7524 } // namespace cc | 7504 } // namespace cc |
OLD | NEW |