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