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

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

Issue 2445553002: cc: Make OutputSurface entirely live on one thread in tests. (Closed)
Patch Set: osonthread: fixcontextdeleteintest Created 4 years, 1 month 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 2896 matching lines...) Expand 10 before | Expand all | Expand 10 after
2907 int commit_count_; 2907 int commit_count_;
2908 int commit_abort_count_; 2908 int commit_abort_count_;
2909 int commit_complete_count_; 2909 int commit_complete_count_;
2910 }; 2910 };
2911 2911
2912 class OnDrawCompositorFrameSink : public TestCompositorFrameSink { 2912 class OnDrawCompositorFrameSink : public TestCompositorFrameSink {
2913 public: 2913 public:
2914 explicit OnDrawCompositorFrameSink( 2914 explicit OnDrawCompositorFrameSink(
2915 scoped_refptr<ContextProvider> compositor_context_provider, 2915 scoped_refptr<ContextProvider> compositor_context_provider,
2916 scoped_refptr<ContextProvider> worker_context_provider, 2916 scoped_refptr<ContextProvider> worker_context_provider,
2917 std::unique_ptr<OutputSurface> display_output_surface,
2918 SharedBitmapManager* shared_bitmap_manager, 2917 SharedBitmapManager* shared_bitmap_manager,
2919 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 2918 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
2920 const RendererSettings& renderer_settings, 2919 const RendererSettings& renderer_settings,
2921 base::SingleThreadTaskRunner* task_runner, 2920 base::SingleThreadTaskRunner* task_runner,
2922 bool synchronous_composite, 2921 bool synchronous_composite,
2923 bool force_disable_reclaim_resources, 2922 bool force_disable_reclaim_resources,
2924 base::Closure invalidate_callback) 2923 base::Closure invalidate_callback)
2925 : TestCompositorFrameSink(std::move(compositor_context_provider), 2924 : TestCompositorFrameSink(std::move(compositor_context_provider),
2926 std::move(worker_context_provider), 2925 std::move(worker_context_provider),
2927 std::move(display_output_surface),
2928 shared_bitmap_manager, 2926 shared_bitmap_manager,
2929 gpu_memory_buffer_manager, 2927 gpu_memory_buffer_manager,
2930 renderer_settings, 2928 renderer_settings,
2931 task_runner, 2929 task_runner,
2932 synchronous_composite, 2930 synchronous_composite,
2933 force_disable_reclaim_resources), 2931 force_disable_reclaim_resources),
2934 invalidate_callback_(std::move(invalidate_callback)) {} 2932 invalidate_callback_(std::move(invalidate_callback)) {}
2935 2933
2936 // TestCompositorFrameSink overrides. 2934 // TestCompositorFrameSink overrides.
2937 void Invalidate() override { invalidate_callback_.Run(); } 2935 void Invalidate() override { invalidate_callback_.Run(); }
(...skipping 16 matching lines...) Expand all
2954 settings->using_synchronous_renderer_compositor = true; 2952 settings->using_synchronous_renderer_compositor = true;
2955 } 2953 }
2956 2954
2957 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( 2955 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink(
2958 scoped_refptr<ContextProvider> compositor_context_provider, 2956 scoped_refptr<ContextProvider> compositor_context_provider,
2959 scoped_refptr<ContextProvider> worker_context_provider) override { 2957 scoped_refptr<ContextProvider> worker_context_provider) override {
2960 auto on_draw_callback = base::Bind( 2958 auto on_draw_callback = base::Bind(
2961 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: 2959 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor::
2962 CallOnDraw, 2960 CallOnDraw,
2963 base::Unretained(this)); 2961 base::Unretained(this));
2964 auto output_surface = base::MakeUnique<OnDrawCompositorFrameSink>( 2962 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>(
2965 compositor_context_provider, std::move(worker_context_provider), 2963 compositor_context_provider, std::move(worker_context_provider),
2966 CreateDisplayOutputSurface(compositor_context_provider),
2967 shared_bitmap_manager(), gpu_memory_buffer_manager(), 2964 shared_bitmap_manager(), gpu_memory_buffer_manager(),
2968 layer_tree_host()->GetSettings().renderer_settings, 2965 layer_tree_host()->GetSettings().renderer_settings,
2969 ImplThreadTaskRunner(), false /* synchronous_composite */, 2966 ImplThreadTaskRunner(), false /* synchronous_composite */,
2970 false /* force_disable_reclaim_resources */, 2967 false /* force_disable_reclaim_resources */,
2971 std::move(on_draw_callback)); 2968 std::move(on_draw_callback));
2972 output_surface_ = output_surface.get(); 2969 compositor_frame_sink_ = frame_sink.get();
2973 return std::move(output_surface); 2970 return std::move(frame_sink);
2974 } 2971 }
2975 2972
2976 void CallOnDraw() { 2973 void CallOnDraw() {
2977 if (!TestEnded()) { 2974 if (!TestEnded()) {
2978 // Synchronous compositor does not draw unless told to do so by the output 2975 // Synchronous compositor does not draw unless told to do so by the output
2979 // surface. But it needs to be done on a new stack frame. 2976 // surface. But it needs to be done on a new stack frame.
2980 bool resourceless_software_draw = false; 2977 bool resourceless_software_draw = false;
2981 ImplThreadTaskRunner()->PostTask( 2978 ImplThreadTaskRunner()->PostTask(
2982 FROM_HERE, base::Bind(&OnDrawCompositorFrameSink::OnDraw, 2979 FROM_HERE, base::Bind(&OnDrawCompositorFrameSink::OnDraw,
2983 base::Unretained(output_surface_), 2980 base::Unretained(compositor_frame_sink_),
2984 resourceless_software_draw)); 2981 resourceless_software_draw));
2985 } 2982 }
2986 } 2983 }
2987 2984
2988 OnDrawCompositorFrameSink* output_surface_ = nullptr; 2985 OnDrawCompositorFrameSink* compositor_frame_sink_ = nullptr;
2989 }; 2986 };
2990 2987
2991 MULTI_THREAD_TEST_F( 2988 MULTI_THREAD_TEST_F(
2992 LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor); 2989 LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor);
2993 2990
2994 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation 2991 class LayerTreeHostTestUninvertibleTransformDoesNotBlockActivation
2995 : public LayerTreeHostTest { 2992 : public LayerTreeHostTest {
2996 protected: 2993 protected:
2997 void SetupTree() override { 2994 void SetupTree() override {
2998 LayerTreeHostTest::SetupTree(); 2995 LayerTreeHostTest::SetupTree();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
3093 LayerTreeHostTest::SetupTree(); 3090 LayerTreeHostTest::SetupTree();
3094 client_.set_bounds(root_layer_->bounds()); 3091 client_.set_bounds(root_layer_->bounds());
3095 } 3092 }
3096 3093
3097 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( 3094 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink(
3098 scoped_refptr<ContextProvider> compositor_context_provider, 3095 scoped_refptr<ContextProvider> compositor_context_provider,
3099 scoped_refptr<ContextProvider> worker_context_provider) override { 3096 scoped_refptr<ContextProvider> worker_context_provider) override {
3100 auto on_draw_callback = 3097 auto on_draw_callback =
3101 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw, 3098 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw,
3102 base::Unretained(this)); 3099 base::Unretained(this));
3103 auto output_surface = base::MakeUnique<OnDrawCompositorFrameSink>( 3100 auto frame_sink = base::MakeUnique<OnDrawCompositorFrameSink>(
3104 compositor_context_provider, std::move(worker_context_provider), 3101 compositor_context_provider, std::move(worker_context_provider),
3105 CreateDisplayOutputSurface(compositor_context_provider),
3106 shared_bitmap_manager(), gpu_memory_buffer_manager(), 3102 shared_bitmap_manager(), gpu_memory_buffer_manager(),
3107 layer_tree_host()->GetSettings().renderer_settings, 3103 layer_tree_host()->GetSettings().renderer_settings,
3108 ImplThreadTaskRunner(), false /* synchronous_composite */, 3104 ImplThreadTaskRunner(), false /* synchronous_composite */,
3109 false /* force_disable_reclaim_resources */, 3105 false /* force_disable_reclaim_resources */,
3110 std::move(on_draw_callback)); 3106 std::move(on_draw_callback));
3111 output_surface_ = output_surface.get(); 3107 compositor_frame_sink_ = frame_sink.get();
3112 return std::move(output_surface); 3108 return std::move(frame_sink);
3113 } 3109 }
3114 3110
3115 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 3111 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
3116 3112
3117 void CallOnDraw() { 3113 void CallOnDraw() {
3118 if (!TestEnded()) { 3114 if (!TestEnded()) {
3119 // Synchronous compositor does not draw unless told to do so by the output 3115 // Synchronous compositor does not draw unless told to do so by the output
3120 // surface. But it needs to be done on a new stack frame. 3116 // surface. But it needs to be done on a new stack frame.
3121 bool resourceless_software_draw = true; 3117 bool resourceless_software_draw = true;
3122 ImplThreadTaskRunner()->PostTask( 3118 ImplThreadTaskRunner()->PostTask(
3123 FROM_HERE, base::Bind(&OnDrawCompositorFrameSink::OnDraw, 3119 FROM_HERE, base::Bind(&OnDrawCompositorFrameSink::OnDraw,
3124 base::Unretained(output_surface_), 3120 base::Unretained(compositor_frame_sink_),
3125 resourceless_software_draw)); 3121 resourceless_software_draw));
3126 } 3122 }
3127 } 3123 }
3128 3124
3129 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 3125 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
3130 LayerTreeHostImpl::FrameData* frame_data, 3126 LayerTreeHostImpl::FrameData* frame_data,
3131 DrawResult draw_result) override { 3127 DrawResult draw_result) override {
3132 if (host_impl->GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE) { 3128 if (host_impl->GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE) {
3133 EXPECT_EQ(1u, frame_data->render_passes.size()); 3129 EXPECT_EQ(1u, frame_data->render_passes.size());
3134 // Has at least 3 quads for each layer. 3130 // Has at least 3 quads for each layer.
(...skipping 20 matching lines...) Expand all
3155 EndTest(); 3151 EndTest();
3156 break; 3152 break;
3157 default: 3153 default:
3158 NOTREACHED(); 3154 NOTREACHED();
3159 } 3155 }
3160 } 3156 }
3161 3157
3162 void AfterTest() override {} 3158 void AfterTest() override {}
3163 3159
3164 private: 3160 private:
3165 OnDrawCompositorFrameSink* output_surface_ = nullptr; 3161 OnDrawCompositorFrameSink* compositor_frame_sink_ = nullptr;
3166 FakeContentLayerClient client_; 3162 FakeContentLayerClient client_;
3167 scoped_refptr<Layer> root_layer_; 3163 scoped_refptr<Layer> root_layer_;
3168 scoped_refptr<Layer> parent_layer_; 3164 scoped_refptr<Layer> parent_layer_;
3169 scoped_refptr<Layer> child_layer_; 3165 scoped_refptr<Layer> child_layer_;
3170 int draw_count_ = 0; 3166 int draw_count_ = 0;
3171 }; 3167 };
3172 3168
3173 // Resourceless is not used for SingleThreadProxy, so it is unimplemented. 3169 // Resourceless is not used for SingleThreadProxy, so it is unimplemented.
3174 MULTI_THREAD_TEST_F(LayerTreeHostTestResourcelessSoftwareDraw); 3170 MULTI_THREAD_TEST_F(LayerTreeHostTestResourcelessSoftwareDraw);
3175 3171
(...skipping 2492 matching lines...) Expand 10 before | Expand all | Expand 10 after
5668 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink( 5664 std::unique_ptr<TestCompositorFrameSink> CreateCompositorFrameSink(
5669 scoped_refptr<ContextProvider> compositor_context_provider, 5665 scoped_refptr<ContextProvider> compositor_context_provider,
5670 scoped_refptr<ContextProvider> worker_context_provider) override { 5666 scoped_refptr<ContextProvider> worker_context_provider) override {
5671 bool synchronous_composite = 5667 bool synchronous_composite =
5672 !HasImplThread() && 5668 !HasImplThread() &&
5673 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler; 5669 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler;
5674 // Relaiming resources is parameterized for this test. 5670 // Relaiming resources is parameterized for this test.
5675 bool force_disable_reclaim_resources = !reclaim_resources_; 5671 bool force_disable_reclaim_resources = !reclaim_resources_;
5676 return base::MakeUnique<TestCompositorFrameSink>( 5672 return base::MakeUnique<TestCompositorFrameSink>(
5677 compositor_context_provider, std::move(worker_context_provider), 5673 compositor_context_provider, std::move(worker_context_provider),
5678 CreateDisplayOutputSurface(compositor_context_provider),
5679 shared_bitmap_manager(), gpu_memory_buffer_manager(), 5674 shared_bitmap_manager(), gpu_memory_buffer_manager(),
5680 layer_tree_host()->GetSettings().renderer_settings, 5675 layer_tree_host()->GetSettings().renderer_settings,
5681 ImplThreadTaskRunner(), synchronous_composite, 5676 ImplThreadTaskRunner(), synchronous_composite,
5682 force_disable_reclaim_resources); 5677 force_disable_reclaim_resources);
5683 } 5678 }
5684 5679
5685 void BeginTest() override { 5680 void BeginTest() override {
5686 // Successful composite. 5681 // Successful composite.
5687 std::unique_ptr<SwapPromise> swap_promise0( 5682 std::unique_ptr<SwapPromise> swap_promise0(
5688 new TestSwapPromise(&swap_promise_result_[0])); 5683 new TestSwapPromise(&swap_promise_result_[0]));
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
5995 base::WaitableEvent playback_allowed_event_; 5990 base::WaitableEvent playback_allowed_event_;
5996 }; 5991 };
5997 5992
5998 // This test does pinching on the impl side which is not supported in single 5993 // This test does pinching on the impl side which is not supported in single
5999 // thread. 5994 // thread.
6000 MULTI_THREAD_TEST_F(LayerTreeHostTestCrispUpAfterPinchEnds); 5995 MULTI_THREAD_TEST_F(LayerTreeHostTestCrispUpAfterPinchEnds);
6001 5996
6002 class LayerTreeHostTestCrispUpAfterPinchEndsWithOneCopy 5997 class LayerTreeHostTestCrispUpAfterPinchEndsWithOneCopy
6003 : public LayerTreeHostTestCrispUpAfterPinchEnds { 5998 : public LayerTreeHostTestCrispUpAfterPinchEnds {
6004 protected: 5999 protected:
6005 std::unique_ptr<OutputSurface> CreateDisplayOutputSurface( 6000 std::unique_ptr<OutputSurface> CreateDisplayOutputSurfaceOnThread(
6006 scoped_refptr<ContextProvider> compositor_context_provider) override { 6001 scoped_refptr<ContextProvider> compositor_context_provider) override {
6007 scoped_refptr<TestContextProvider> display_context_provider = 6002 scoped_refptr<TestContextProvider> display_context_provider =
6008 TestContextProvider::Create(); 6003 TestContextProvider::Create();
6009 TestWebGraphicsContext3D* context3d = 6004 TestWebGraphicsContext3D* context3d =
6010 display_context_provider->UnboundTestContext3d(); 6005 display_context_provider->UnboundTestContext3d();
6011 context3d->set_support_sync_query(true); 6006 context3d->set_support_sync_query(true);
6012 #if defined(OS_MACOSX) 6007 #if defined(OS_MACOSX)
6013 context3d->set_support_texture_rectangle(true); 6008 context3d->set_support_texture_rectangle(true);
6014 #endif 6009 #endif
6015 return LayerTreeTest::CreateDisplayOutputSurface( 6010 return LayerTreeTest::CreateDisplayOutputSurfaceOnThread(
6016 std::move(display_context_provider)); 6011 std::move(display_context_provider));
6017 } 6012 }
6018 }; 6013 };
6019 6014
6020 // This test does pinching on the impl side which is not supported in single 6015 // This test does pinching on the impl side which is not supported in single
6021 // thread. 6016 // thread.
6022 MULTI_THREAD_TEST_F(LayerTreeHostTestCrispUpAfterPinchEndsWithOneCopy); 6017 MULTI_THREAD_TEST_F(LayerTreeHostTestCrispUpAfterPinchEndsWithOneCopy);
6023 6018
6024 class RasterizeWithGpuRasterizationCreatesResources : public LayerTreeHostTest { 6019 class RasterizeWithGpuRasterizationCreatesResources : public LayerTreeHostTest {
6025 protected: 6020 protected:
(...skipping 1014 matching lines...) Expand 10 before | Expand all | Expand 10 after
7040 EndTest(); 7035 EndTest();
7041 } 7036 }
7042 7037
7043 void AfterTest() override {} 7038 void AfterTest() override {}
7044 }; 7039 };
7045 7040
7046 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources); 7041 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources);
7047 7042
7048 } // namespace 7043 } // namespace
7049 } // namespace cc 7044 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_copyrequest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698