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

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

Issue 2609253003: Remove ForceReclaimResources (Closed)
Patch Set: Make test cases / phases the same 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 3025 matching lines...) Expand 10 before | Expand all | Expand 10 after
3036 class OnDrawCompositorFrameSink : public TestCompositorFrameSink { 3036 class OnDrawCompositorFrameSink : public TestCompositorFrameSink {
3037 public: 3037 public:
3038 explicit OnDrawCompositorFrameSink( 3038 explicit OnDrawCompositorFrameSink(
3039 scoped_refptr<ContextProvider> compositor_context_provider, 3039 scoped_refptr<ContextProvider> compositor_context_provider,
3040 scoped_refptr<ContextProvider> worker_context_provider, 3040 scoped_refptr<ContextProvider> worker_context_provider,
3041 SharedBitmapManager* shared_bitmap_manager, 3041 SharedBitmapManager* shared_bitmap_manager,
3042 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 3042 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
3043 const RendererSettings& renderer_settings, 3043 const RendererSettings& renderer_settings,
3044 base::SingleThreadTaskRunner* task_runner, 3044 base::SingleThreadTaskRunner* task_runner,
3045 bool synchronous_composite, 3045 bool synchronous_composite,
3046 bool force_disable_reclaim_resources,
3047 base::Closure invalidate_callback) 3046 base::Closure invalidate_callback)
3048 : TestCompositorFrameSink(std::move(compositor_context_provider), 3047 : TestCompositorFrameSink(std::move(compositor_context_provider),
3049 std::move(worker_context_provider), 3048 std::move(worker_context_provider),
3050 shared_bitmap_manager, 3049 shared_bitmap_manager,
3051 gpu_memory_buffer_manager, 3050 gpu_memory_buffer_manager,
3052 renderer_settings, 3051 renderer_settings,
3053 task_runner, 3052 task_runner,
3054 synchronous_composite, 3053 synchronous_composite),
3055 force_disable_reclaim_resources),
3056 invalidate_callback_(std::move(invalidate_callback)) {} 3054 invalidate_callback_(std::move(invalidate_callback)) {}
3057 3055
3058 // TestCompositorFrameSink overrides. 3056 // TestCompositorFrameSink overrides.
3059 void Invalidate() override { invalidate_callback_.Run(); } 3057 void Invalidate() override { invalidate_callback_.Run(); }
3060 3058
3061 void OnDraw(bool resourceless_software_draw) { 3059 void OnDraw(bool resourceless_software_draw) {
3062 gfx::Transform identity; 3060 gfx::Transform identity;
3063 gfx::Rect empty_rect; 3061 gfx::Rect empty_rect;
3064 client_->OnDraw(identity, empty_rect, resourceless_software_draw); 3062 client_->OnDraw(identity, empty_rect, resourceless_software_draw);
3065 } 3063 }
(...skipping 15 matching lines...) Expand all
3081 scoped_refptr<ContextProvider> worker_context_provider) override { 3079 scoped_refptr<ContextProvider> worker_context_provider) override {
3082 auto on_draw_callback = base::Bind( 3080 auto on_draw_callback = base::Bind(
3083 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: 3081 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor::
3084 CallOnDraw, 3082 CallOnDraw,
3085 base::Unretained(this)); 3083 base::Unretained(this));
3086 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( 3084 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>(
3087 compositor_context_provider, std::move(worker_context_provider), 3085 compositor_context_provider, std::move(worker_context_provider),
3088 shared_bitmap_manager(), gpu_memory_buffer_manager(), 3086 shared_bitmap_manager(), gpu_memory_buffer_manager(),
3089 layer_tree_host()->GetSettings().renderer_settings, 3087 layer_tree_host()->GetSettings().renderer_settings,
3090 ImplThreadTaskRunner(), false /* synchronous_composite */, 3088 ImplThreadTaskRunner(), false /* synchronous_composite */,
3091 false /* force_disable_reclaim_resources */,
3092 std::move(on_draw_callback)); 3089 std::move(on_draw_callback));
3093 compositor_frame_sink_ = frame_sink.get(); 3090 compositor_frame_sink_ = frame_sink.get();
3094 return std::move(frame_sink); 3091 return std::move(frame_sink);
3095 } 3092 }
3096 3093
3097 void CallOnDraw() { 3094 void CallOnDraw() {
3098 if (!TestEnded()) { 3095 if (!TestEnded()) {
3099 // Synchronous compositor does not draw unless told to do so by the output 3096 // Synchronous compositor does not draw unless told to do so by the output
3100 // surface. But it needs to be done on a new stack frame. 3097 // surface. But it needs to be done on a new stack frame.
3101 bool resourceless_software_draw = false; 3098 bool resourceless_software_draw = false;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
3221 scoped_refptr<ContextProvider> compositor_context_provider, 3218 scoped_refptr<ContextProvider> compositor_context_provider,
3222 scoped_refptr<ContextProvider> worker_context_provider) override { 3219 scoped_refptr<ContextProvider> worker_context_provider) override {
3223 auto on_draw_callback = 3220 auto on_draw_callback =
3224 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw, 3221 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw,
3225 base::Unretained(this)); 3222 base::Unretained(this));
3226 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>( 3223 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>(
3227 compositor_context_provider, std::move(worker_context_provider), 3224 compositor_context_provider, std::move(worker_context_provider),
3228 shared_bitmap_manager(), gpu_memory_buffer_manager(), 3225 shared_bitmap_manager(), gpu_memory_buffer_manager(),
3229 layer_tree_host()->GetSettings().renderer_settings, 3226 layer_tree_host()->GetSettings().renderer_settings,
3230 ImplThreadTaskRunner(), false /* synchronous_composite */, 3227 ImplThreadTaskRunner(), false /* synchronous_composite */,
3231 false /* force_disable_reclaim_resources */,
3232 std::move(on_draw_callback)); 3228 std::move(on_draw_callback));
3233 compositor_frame_sink_ = frame_sink.get(); 3229 compositor_frame_sink_ = frame_sink.get();
3234 return std::move(frame_sink); 3230 return std::move(frame_sink);
3235 } 3231 }
3236 3232
3237 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 3233 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
3238 3234
3239 void CallOnDraw() { 3235 void CallOnDraw() {
3240 if (!TestEnded()) { 3236 if (!TestEnded()) {
3241 // Synchronous compositor does not draw unless told to do so by the output 3237 // Synchronous compositor does not draw unless told to do so by the output
(...skipping 2574 matching lines...) Expand 10 before | Expand all | Expand 10 after
5816 settings->single_thread_proxy_scheduler = false; 5812 settings->single_thread_proxy_scheduler = false;
5817 settings->use_zero_copy = true; 5813 settings->use_zero_copy = true;
5818 } 5814 }
5819 5815
5820 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( 5816 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink(
5821 scoped_refptr<ContextProvider> compositor_context_provider, 5817 scoped_refptr<ContextProvider> compositor_context_provider,
5822 scoped_refptr<ContextProvider> worker_context_provider) override { 5818 scoped_refptr<ContextProvider> worker_context_provider) override {
5823 bool synchronous_composite = 5819 bool synchronous_composite =
5824 !HasImplThread() && 5820 !HasImplThread() &&
5825 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; 5821 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler;
5826 // Relaiming resources is parameterized for this test.
5827 bool force_disable_reclaim_resources = !reclaim_resources_;
5828 return base::MakeUnique<TestCompositorFrameSink>( 5822 return base::MakeUnique<TestCompositorFrameSink>(
5829 compositor_context_provider, std::move(worker_context_provider), 5823 compositor_context_provider, std::move(worker_context_provider),
5830 shared_bitmap_manager(), gpu_memory_buffer_manager(), 5824 shared_bitmap_manager(), gpu_memory_buffer_manager(),
5831 layer_tree_host()->GetSettings().renderer_settings, 5825 layer_tree_host()->GetSettings().renderer_settings,
5832 ImplThreadTaskRunner(), synchronous_composite, 5826 ImplThreadTaskRunner(), synchronous_composite);
5833 force_disable_reclaim_resources);
5834 } 5827 }
5835 5828
5836 void BeginTest() override { 5829 void BeginTest() override {
5837 // Successful composite. 5830 // Successful composite.
5838 std::unique_ptr<SwapPromise> swap_promise0( 5831 std::unique_ptr<SwapPromise> swap_promise0(
5839 new TestSwapPromise(&swap_promise_result_[0])); 5832 new TestSwapPromise(&swap_promise_result_[0]));
5840 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 5833 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
5841 std::move(swap_promise0)); 5834 std::move(swap_promise0));
5842 layer_tree_host()->Composite(base::TimeTicks::Now()); 5835 layer_tree_host()->Composite(base::TimeTicks::Now());
5843 5836
5844 // Fail to swap (no damage) if not reclaiming resources from the Display. 5837 // Fail to swap (no damage).
5845 std::unique_ptr<SwapPromise> swap_promise1( 5838 std::unique_ptr<SwapPromise> swap_promise1(
5846 new TestSwapPromise(&swap_promise_result_[1])); 5839 new TestSwapPromise(&swap_promise_result_[1]));
5847 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise( 5840 layer_tree_host()->GetSwapPromiseManager()->QueueSwapPromise(
5848 std::move(swap_promise1)); 5841 std::move(swap_promise1));
5849 layer_tree_host()->SetNeedsCommit(); 5842 layer_tree_host()->SetNeedsCommit();
5850 layer_tree_host()->Composite(base::TimeTicks::Now()); 5843 layer_tree_host()->Composite(base::TimeTicks::Now());
5851 5844
5852 // Fail to draw (not visible). 5845 // Fail to draw (not visible).
5853 std::unique_ptr<SwapPromise> swap_promise2( 5846 std::unique_ptr<SwapPromise> swap_promise2(
5854 new TestSwapPromise(&swap_promise_result_[2])); 5847 new TestSwapPromise(&swap_promise_result_[2]));
(...skipping 15 matching lines...) Expand all
5870 EXPECT_EQ(3, commit_count_); 5863 EXPECT_EQ(3, commit_count_);
5871 5864
5872 // Initial swap promise should have succeded. 5865 // Initial swap promise should have succeded.
5873 { 5866 {
5874 base::AutoLock lock(swap_promise_result_[0].lock); 5867 base::AutoLock lock(swap_promise_result_[0].lock);
5875 EXPECT_TRUE(swap_promise_result_[0].did_swap_called); 5868 EXPECT_TRUE(swap_promise_result_[0].did_swap_called);
5876 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called); 5869 EXPECT_FALSE(swap_promise_result_[0].did_not_swap_called);
5877 EXPECT_TRUE(swap_promise_result_[0].dtor_called); 5870 EXPECT_TRUE(swap_promise_result_[0].dtor_called);
5878 } 5871 }
5879 5872
5880 // Second swap promise fails to swap if not reclaiming resources from the 5873 // Second swap promise fails to swap.
5881 // Display.
5882 { 5874 {
5883 base::AutoLock lock(swap_promise_result_[1].lock); 5875 base::AutoLock lock(swap_promise_result_[1].lock);
5884 EXPECT_TRUE(swap_promise_result_[1].did_activate_called); 5876 EXPECT_TRUE(swap_promise_result_[1].did_activate_called);
5885 if (!reclaim_resources_) { 5877 EXPECT_FALSE(swap_promise_result_[1].did_swap_called);
5886 EXPECT_FALSE(swap_promise_result_[1].did_swap_called); 5878 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called);
5887 EXPECT_TRUE(swap_promise_result_[1].did_not_swap_called); 5879 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason);
5888 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[1].reason);
5889 } else {
5890 EXPECT_TRUE(swap_promise_result_[1].did_swap_called);
5891 EXPECT_FALSE(swap_promise_result_[1].did_not_swap_called);
5892 }
5893 EXPECT_TRUE(swap_promise_result_[1].dtor_called); 5880 EXPECT_TRUE(swap_promise_result_[1].dtor_called);
5894 } 5881 }
5895 5882
5896 // Third swap promises also fails to swap (and draw). 5883 // Third swap promises also fails to swap (and draw).
5897 { 5884 {
5898 base::AutoLock lock(swap_promise_result_[2].lock); 5885 base::AutoLock lock(swap_promise_result_[2].lock);
5899 EXPECT_TRUE(swap_promise_result_[2].did_activate_called); 5886 EXPECT_TRUE(swap_promise_result_[2].did_activate_called);
5900 EXPECT_FALSE(swap_promise_result_[2].did_swap_called); 5887 EXPECT_FALSE(swap_promise_result_[2].did_swap_called);
5901 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called); 5888 EXPECT_TRUE(swap_promise_result_[2].did_not_swap_called);
5902 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason); 5889 EXPECT_EQ(SwapPromise::SWAP_FAILS, swap_promise_result_[2].reason);
5903 EXPECT_TRUE(swap_promise_result_[2].dtor_called); 5890 EXPECT_TRUE(swap_promise_result_[2].dtor_called);
5904 } 5891 }
5905 } 5892 }
5906 5893
5907 bool reclaim_resources_;
5908 int commit_count_ = 0; 5894 int commit_count_ = 0;
5909 TestSwapPromiseResult swap_promise_result_[3]; 5895 TestSwapPromiseResult swap_promise_result_[3];
5910 }; 5896 };
5911 5897
5912 TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, NoReclaim) { 5898 // Synchronous composite is a single-threaded only feature.
5913 reclaim_resources_ = false; 5899 SINGLE_THREAD_TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise);
5914 RunTest(CompositorMode::SINGLE_THREADED);
5915 }
5916
5917 TEST_F(LayerTreeHostTestSynchronousCompositeSwapPromise, Reclaim) {
5918 reclaim_resources_ = true;
5919 RunTest(CompositorMode::SINGLE_THREADED);
5920 }
5921 5900
5922 // Make sure page scale and top control deltas are applied to the client even 5901 // Make sure page scale and top control deltas are applied to the client even
5923 // when the LayerTreeHost doesn't have a root layer. 5902 // when the LayerTreeHost doesn't have a root layer.
5924 class LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer 5903 class LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer
5925 : public LayerTreeHostTest { 5904 : public LayerTreeHostTest {
5926 public: 5905 public:
5927 LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer() 5906 LayerTreeHostAcceptsDeltasFromImplWithoutRootLayer()
5928 : deltas_sent_to_client_(false) {} 5907 : deltas_sent_to_client_(false) {}
5929 5908
5930 void BeginTest() override { 5909 void BeginTest() override {
(...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after
7188 EndTest(); 7167 EndTest();
7189 } 7168 }
7190 7169
7191 void AfterTest() override {} 7170 void AfterTest() override {}
7192 }; 7171 };
7193 7172
7194 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources); 7173 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources);
7195 7174
7196 } // namespace 7175 } // namespace
7197 } // namespace cc 7176 } // 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