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