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 2896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |