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

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

Issue 2609253003: Remove ForceReclaimResources (Closed)
Patch Set: cleanup 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,
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
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
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
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
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
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
OLDNEW
« cc/trees/layer_tree_host_pixeltest_tiles.cc ('K') | « cc/trees/layer_tree_host_pixeltest_tiles.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698