| 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 |