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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 #include "cc/test/fake_recording_source.h" | 43 #include "cc/test/fake_recording_source.h" |
44 #include "cc/test/fake_scoped_ui_resource.h" | 44 #include "cc/test/fake_scoped_ui_resource.h" |
45 #include "cc/test/fake_video_frame_provider.h" | 45 #include "cc/test/fake_video_frame_provider.h" |
46 #include "cc/test/geometry_test_utils.h" | 46 #include "cc/test/geometry_test_utils.h" |
47 #include "cc/test/layer_internals_for_test.h" | 47 #include "cc/test/layer_internals_for_test.h" |
48 #include "cc/test/layer_tree_test.h" | 48 #include "cc/test/layer_tree_test.h" |
49 #include "cc/test/skia_common.h" | 49 #include "cc/test/skia_common.h" |
50 #include "cc/test/test_shared_bitmap_manager.h" | 50 #include "cc/test/test_shared_bitmap_manager.h" |
51 #include "cc/test/test_web_graphics_context_3d.h" | 51 #include "cc/test/test_web_graphics_context_3d.h" |
52 #include "cc/trees/effect_node.h" | 52 #include "cc/trees/effect_node.h" |
| 53 #include "cc/trees/layer_tree_host_common.h" |
53 #include "cc/trees/layer_tree_host_impl.h" | 54 #include "cc/trees/layer_tree_host_impl.h" |
54 #include "cc/trees/layer_tree_impl.h" | 55 #include "cc/trees/layer_tree_impl.h" |
55 #include "cc/trees/single_thread_proxy.h" | 56 #include "cc/trees/single_thread_proxy.h" |
56 #include "cc/trees/transform_node.h" | 57 #include "cc/trees/transform_node.h" |
57 #include "gpu/GLES2/gl2extchromium.h" | 58 #include "gpu/GLES2/gl2extchromium.h" |
58 #include "testing/gmock/include/gmock/gmock.h" | 59 #include "testing/gmock/include/gmock/gmock.h" |
59 #include "third_party/khronos/GLES2/gl2.h" | 60 #include "third_party/khronos/GLES2/gl2.h" |
60 #include "third_party/khronos/GLES2/gl2ext.h" | 61 #include "third_party/khronos/GLES2/gl2ext.h" |
61 #include "third_party/skia/include/core/SkPicture.h" | 62 #include "third_party/skia/include/core/SkPicture.h" |
62 #include "third_party/skia/include/gpu/GrContext.h" | 63 #include "third_party/skia/include/gpu/GrContext.h" |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 enum MainOrder : int { | 141 enum MainOrder : int { |
141 MAIN_START = 1, | 142 MAIN_START = 1, |
142 MAIN_LAYOUT, | 143 MAIN_LAYOUT, |
143 MAIN_COMMIT_COMPLETE, | 144 MAIN_COMMIT_COMPLETE, |
144 MAIN_DID_BEGIN_FRAME, | 145 MAIN_DID_BEGIN_FRAME, |
145 MAIN_END, | 146 MAIN_END, |
146 }; | 147 }; |
147 | 148 |
148 enum ImplOrder : int { | 149 enum ImplOrder : int { |
149 IMPL_START = 1, | 150 IMPL_START = 1, |
| 151 IMPL_READY_TO_COMMIT, |
150 IMPL_COMMIT, | 152 IMPL_COMMIT, |
151 IMPL_COMMIT_COMPLETE, | 153 IMPL_COMMIT_COMPLETE, |
152 IMPL_ACTIVATE, | 154 IMPL_ACTIVATE, |
153 IMPL_DRAW, | 155 IMPL_DRAW, |
154 IMPL_END, | 156 IMPL_END, |
155 }; | 157 }; |
156 | 158 |
157 template <typename T> | 159 template <typename T> |
158 bool CheckStep(T next, T* var) { | 160 bool CheckStep(T next, T* var) { |
159 int expected = next - 1; | 161 int expected = next - 1; |
(...skipping 10 matching lines...) Expand all Loading... |
170 } | 172 } |
171 | 173 |
172 void DidCommit() override { | 174 void DidCommit() override { |
173 EXPECT_TRUE(CheckStep(MAIN_COMMIT_COMPLETE, &main_)); | 175 EXPECT_TRUE(CheckStep(MAIN_COMMIT_COMPLETE, &main_)); |
174 } | 176 } |
175 | 177 |
176 void DidBeginMainFrame() override { | 178 void DidBeginMainFrame() override { |
177 EXPECT_TRUE(CheckStep(MAIN_DID_BEGIN_FRAME, &main_)); | 179 EXPECT_TRUE(CheckStep(MAIN_DID_BEGIN_FRAME, &main_)); |
178 } | 180 } |
179 | 181 |
| 182 void ReadyToCommitOnThread(LayerTreeHostImpl* impl) override { |
| 183 EXPECT_TRUE(CheckStep(IMPL_READY_TO_COMMIT, &impl_)); |
| 184 } |
| 185 |
180 void BeginCommitOnThread(LayerTreeHostImpl* impl) override { | 186 void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
181 EXPECT_TRUE(CheckStep(IMPL_COMMIT, &impl_)); | 187 EXPECT_TRUE(CheckStep(IMPL_COMMIT, &impl_)); |
182 } | 188 } |
183 | 189 |
184 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { | 190 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
185 EXPECT_TRUE(CheckStep(IMPL_COMMIT_COMPLETE, &impl_)); | 191 EXPECT_TRUE(CheckStep(IMPL_COMMIT_COMPLETE, &impl_)); |
186 } | 192 } |
187 | 193 |
188 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { | 194 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
189 EXPECT_TRUE(CheckStep(IMPL_ACTIVATE, &impl_)); | 195 EXPECT_TRUE(CheckStep(IMPL_ACTIVATE, &impl_)); |
(...skipping 2132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2322 case 5: | 2328 case 5: |
2323 PostSetDeferCommitsToMainThread(false); | 2329 PostSetDeferCommitsToMainThread(false); |
2324 break; | 2330 break; |
2325 default: | 2331 default: |
2326 // Sometimes |num_will_begin_impl_frame_| will be greater than 5 if the | 2332 // Sometimes |num_will_begin_impl_frame_| will be greater than 5 if the |
2327 // main thread is slow to respond. | 2333 // main thread is slow to respond. |
2328 break; | 2334 break; |
2329 } | 2335 } |
2330 } | 2336 } |
2331 | 2337 |
2332 void ScheduledActionSendBeginMainFrame() override { | 2338 void WillBeginMainFrame() override { |
2333 num_send_begin_main_frame_++; | 2339 num_send_begin_main_frame_++; |
2334 switch (num_send_begin_main_frame_) { | 2340 switch (num_send_begin_main_frame_) { |
2335 case 1: | 2341 case 1: |
2336 PostSetDeferCommitsToMainThread(true); | 2342 layer_tree_host()->SetDeferCommits(true); |
2337 break; | 2343 break; |
2338 case 2: | 2344 case 2: |
2339 EndTest(); | 2345 EndTest(); |
2340 break; | 2346 break; |
2341 default: | 2347 default: |
2342 NOTREACHED(); | 2348 NOTREACHED(); |
2343 break; | 2349 break; |
2344 } | 2350 } |
2345 } | 2351 } |
2346 | 2352 |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2610 EXPECT_EQ(commit_count_, 5); | 2616 EXPECT_EQ(commit_count_, 5); |
2611 EXPECT_EQ(commit_abort_count_, 3); | 2617 EXPECT_EQ(commit_abort_count_, 3); |
2612 EXPECT_EQ(commit_complete_count_, 2); | 2618 EXPECT_EQ(commit_complete_count_, 2); |
2613 } | 2619 } |
2614 | 2620 |
2615 int commit_count_; | 2621 int commit_count_; |
2616 int commit_abort_count_; | 2622 int commit_abort_count_; |
2617 int commit_complete_count_; | 2623 int commit_complete_count_; |
2618 }; | 2624 }; |
2619 | 2625 |
| 2626 class OnDrawOutputSurface : public OutputSurface { |
| 2627 public: |
| 2628 explicit OnDrawOutputSurface(base::Closure invalidate_callback) |
| 2629 : OutputSurface(TestContextProvider::Create(), |
| 2630 TestContextProvider::CreateWorker(), |
| 2631 nullptr), |
| 2632 invalidate_callback_(std::move(invalidate_callback)) { |
| 2633 capabilities_.delegated_rendering = true; |
| 2634 } |
| 2635 |
| 2636 // OutputSurface implementation. |
| 2637 void SwapBuffers(CompositorFrame frame) override { did_swap_ = true; } |
| 2638 uint32_t GetFramebufferCopyTextureFormat() override { return 0; } |
| 2639 void Invalidate() override { invalidate_callback_.Run(); } |
| 2640 |
| 2641 void OnDraw(bool resourceless_software_draw) { |
| 2642 gfx::Transform identity; |
| 2643 gfx::Rect empty_rect; |
| 2644 // SwapBuffers happens inside of OnDraw. |
| 2645 client_->OnDraw(identity, empty_rect, empty_rect, |
| 2646 resourceless_software_draw); |
| 2647 if (did_swap_) { |
| 2648 did_swap_ = false; |
| 2649 client_->DidSwapBuffersComplete(); |
| 2650 } |
| 2651 } |
| 2652 |
| 2653 private: |
| 2654 bool did_swap_ = false; |
| 2655 base::Closure invalidate_callback_; |
| 2656 }; |
| 2657 |
2620 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor | 2658 class LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor |
2621 : public LayerTreeHostTestAbortedCommitDoesntStall { | 2659 : public LayerTreeHostTestAbortedCommitDoesntStall { |
2622 protected: | 2660 protected: |
2623 void InitializeSettings(LayerTreeSettings* settings) override { | 2661 void InitializeSettings(LayerTreeSettings* settings) override { |
2624 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); | 2662 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); |
2625 settings->using_synchronous_renderer_compositor = true; | 2663 settings->using_synchronous_renderer_compositor = true; |
2626 } | 2664 } |
2627 | 2665 |
2628 void ScheduledActionInvalidateOutputSurface() override { | 2666 std::unique_ptr<OutputSurface> CreateOutputSurface() override { |
2629 // Do not call ImplThreadTaskRunner after the test ended because of the | 2667 auto output_surface = base::MakeUnique<OnDrawOutputSurface>(base::Bind( |
2630 // possibility of use-after-free due to a race. | 2668 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: |
2631 if (TestEnded()) | 2669 CallOnDraw, |
2632 return; | 2670 base::Unretained(this))); |
2633 ImplThreadTaskRunner()->PostTask( | 2671 output_surface_ = output_surface.get(); |
2634 FROM_HERE, | 2672 return std::move(output_surface); |
2635 base::Bind( | |
2636 &LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor:: | |
2637 CallOnDraw, | |
2638 base::Unretained(this))); | |
2639 } | 2673 } |
2640 | 2674 |
2641 void CallOnDraw() { | 2675 void CallOnDraw() { |
2642 // Synchronous compositor does not draw unless told to do so by the output | 2676 if (!TestEnded()) { |
2643 // surface. | 2677 // Synchronous compositor does not draw unless told to do so by the output |
2644 gfx::Transform identity; | 2678 // surface. But it needs to be done on a new stack frame. |
2645 gfx::Rect empty_rect; | 2679 bool resourceless_software_draw = false; |
2646 bool resourceless_software_draw = false; | 2680 ImplThreadTaskRunner()->PostTask( |
2647 fake_output_surface()->client()->OnDraw(identity, empty_rect, empty_rect, | 2681 FROM_HERE, base::Bind(&OnDrawOutputSurface::OnDraw, |
2648 resourceless_software_draw); | 2682 base::Unretained(output_surface_), |
| 2683 resourceless_software_draw)); |
| 2684 } |
2649 } | 2685 } |
| 2686 |
| 2687 OnDrawOutputSurface* output_surface_ = nullptr; |
2650 }; | 2688 }; |
2651 | 2689 |
2652 MULTI_THREAD_TEST_F( | 2690 MULTI_THREAD_TEST_F( |
2653 LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor); | 2691 LayerTreeHostTestAbortedCommitDoesntStallSynchronousCompositor); |
2654 | 2692 |
2655 class LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync | 2693 class LayerTreeHostTestAbortedCommitDoesntStallDisabledVsync |
2656 : public LayerTreeHostTestAbortedCommitDoesntStall { | 2694 : public LayerTreeHostTestAbortedCommitDoesntStall { |
2657 void InitializeSettings(LayerTreeSettings* settings) override { | 2695 void InitializeSettings(LayerTreeSettings* settings) override { |
2658 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); | 2696 LayerTreeHostTestAbortedCommitDoesntStall::InitializeSettings(settings); |
2659 settings->wait_for_beginframe_interval = false; | 2697 settings->wait_for_beginframe_interval = false; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2731 | 2769 |
2732 void AfterTest() override {} | 2770 void AfterTest() override {} |
2733 | 2771 |
2734 protected: | 2772 protected: |
2735 int frame_; | 2773 int frame_; |
2736 }; | 2774 }; |
2737 | 2775 |
2738 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNumFramesPending); | 2776 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNumFramesPending); |
2739 | 2777 |
2740 class LayerTreeHostTestResourcelessSoftwareDraw : public LayerTreeHostTest { | 2778 class LayerTreeHostTestResourcelessSoftwareDraw : public LayerTreeHostTest { |
2741 public: | 2779 protected: |
2742 void InitializeSettings(LayerTreeSettings* settings) override { | 2780 void InitializeSettings(LayerTreeSettings* settings) override { |
2743 settings->using_synchronous_renderer_compositor = true; | 2781 settings->using_synchronous_renderer_compositor = true; |
2744 } | 2782 } |
2745 | 2783 |
2746 void SetupTree() override { | 2784 void SetupTree() override { |
2747 root_layer_ = FakePictureLayer::Create(&client_); | 2785 root_layer_ = FakePictureLayer::Create(&client_); |
2748 root_layer_->SetIsDrawable(true); | 2786 root_layer_->SetIsDrawable(true); |
2749 root_layer_->SetBounds(gfx::Size(50, 50)); | 2787 root_layer_->SetBounds(gfx::Size(50, 50)); |
2750 | 2788 |
2751 parent_layer_ = FakePictureLayer::Create(&client_); | 2789 parent_layer_ = FakePictureLayer::Create(&client_); |
2752 parent_layer_->SetIsDrawable(true); | 2790 parent_layer_->SetIsDrawable(true); |
2753 parent_layer_->SetBounds(gfx::Size(50, 50)); | 2791 parent_layer_->SetBounds(gfx::Size(50, 50)); |
2754 parent_layer_->SetForceRenderSurfaceForTesting(true); | 2792 parent_layer_->SetForceRenderSurfaceForTesting(true); |
2755 | 2793 |
2756 child_layer_ = FakePictureLayer::Create(&client_); | 2794 child_layer_ = FakePictureLayer::Create(&client_); |
2757 child_layer_->SetIsDrawable(true); | 2795 child_layer_->SetIsDrawable(true); |
2758 child_layer_->SetBounds(gfx::Size(50, 50)); | 2796 child_layer_->SetBounds(gfx::Size(50, 50)); |
2759 | 2797 |
2760 root_layer_->AddChild(parent_layer_); | 2798 root_layer_->AddChild(parent_layer_); |
2761 parent_layer_->AddChild(child_layer_); | 2799 parent_layer_->AddChild(child_layer_); |
2762 layer_tree_host()->SetRootLayer(root_layer_); | 2800 layer_tree_host()->SetRootLayer(root_layer_); |
2763 | 2801 |
2764 LayerTreeHostTest::SetupTree(); | 2802 LayerTreeHostTest::SetupTree(); |
2765 client_.set_bounds(root_layer_->bounds()); | 2803 client_.set_bounds(root_layer_->bounds()); |
2766 } | 2804 } |
2767 | 2805 |
2768 std::unique_ptr<OutputSurface> CreateOutputSurface() override { | 2806 std::unique_ptr<OutputSurface> CreateOutputSurface() override { |
2769 auto output_surface = delegating_renderer() | 2807 auto output_surface = base::MakeUnique<OnDrawOutputSurface>( |
2770 ? FakeOutputSurface::CreateDelegatingSoftware( | 2808 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw, |
2771 base::WrapUnique(new SoftwareOutputDevice)) | 2809 base::Unretained(this))); |
2772 : FakeOutputSurface::CreateSoftware( | 2810 output_surface_ = output_surface.get(); |
2773 base::WrapUnique(new SoftwareOutputDevice)); | |
2774 software_output_surface_ = output_surface.get(); | |
2775 return std::move(output_surface); | 2811 return std::move(output_surface); |
2776 } | 2812 } |
2777 | 2813 |
2778 void BeginTest() override { | 2814 void BeginTest() override { |
2779 PostSetNeedsCommitToMainThread(); | 2815 PostSetNeedsCommitToMainThread(); |
2780 swap_count_ = 0; | |
2781 } | |
2782 | |
2783 void ScheduledActionInvalidateOutputSurface() override { | |
2784 if (TestEnded()) | |
2785 return; | |
2786 | |
2787 ImplThreadTaskRunner()->PostTask( | |
2788 FROM_HERE, | |
2789 base::Bind(&LayerTreeHostTestResourcelessSoftwareDraw::CallOnDraw, | |
2790 base::Unretained(this))); | |
2791 } | 2816 } |
2792 | 2817 |
2793 void CallOnDraw() { | 2818 void CallOnDraw() { |
2794 gfx::Transform identity; | 2819 if (!TestEnded()) { |
2795 gfx::Rect empty_rect; | 2820 // Synchronous compositor does not draw unless told to do so by the output |
2796 bool resourceless_software_draw = true; | 2821 // surface. But it needs to be done on a new stack frame. |
2797 software_output_surface_->client()->OnDraw(identity, empty_rect, empty_rect, | 2822 bool resourceless_software_draw = true; |
2798 resourceless_software_draw); | 2823 ImplThreadTaskRunner()->PostTask( |
| 2824 FROM_HERE, base::Bind(&OnDrawOutputSurface::OnDraw, |
| 2825 base::Unretained(output_surface_), |
| 2826 resourceless_software_draw)); |
| 2827 } |
2799 } | 2828 } |
2800 | 2829 |
2801 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, | 2830 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
2802 LayerTreeHostImpl::FrameData* frame_data, | 2831 LayerTreeHostImpl::FrameData* frame_data, |
2803 DrawResult draw_result) override { | 2832 DrawResult draw_result) override { |
2804 if (host_impl->GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE) { | 2833 if (host_impl->GetDrawMode() == DRAW_MODE_RESOURCELESS_SOFTWARE) { |
2805 EXPECT_EQ(1u, frame_data->render_passes.size()); | 2834 EXPECT_EQ(1u, frame_data->render_passes.size()); |
2806 // Has at least 3 quads for each layer. | 2835 // Has at least 3 quads for each layer. |
2807 RenderPass* render_pass = frame_data->render_passes[0].get(); | 2836 RenderPass* render_pass = frame_data->render_passes[0].get(); |
2808 EXPECT_GE(render_pass->quad_list.size(), 3u); | 2837 EXPECT_GE(render_pass->quad_list.size(), 3u); |
2809 } else { | 2838 } else { |
2810 EXPECT_EQ(2u, frame_data->render_passes.size()); | 2839 EXPECT_EQ(2u, frame_data->render_passes.size()); |
2811 | 2840 |
2812 // At least root layer quad in root render pass. | 2841 // At least root layer quad in root render pass. |
2813 EXPECT_GE(frame_data->render_passes[0]->quad_list.size(), 1u); | 2842 EXPECT_GE(frame_data->render_passes[0]->quad_list.size(), 1u); |
2814 // At least parent and child layer quads in parent render pass. | 2843 // At least parent and child layer quads in parent render pass. |
2815 EXPECT_GE(frame_data->render_passes[1]->quad_list.size(), 2u); | 2844 EXPECT_GE(frame_data->render_passes[1]->quad_list.size(), 2u); |
2816 } | 2845 } |
2817 return draw_result; | 2846 return draw_result; |
2818 } | 2847 } |
2819 | 2848 |
2820 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 2849 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
2821 swap_count_++; | 2850 draw_count_++; |
2822 switch (swap_count_) { | 2851 switch (draw_count_) { |
2823 case 1: | 2852 case 1: |
2824 host_impl->SetNeedsRedraw(); | 2853 host_impl->SetNeedsRedraw(); |
2825 break; | 2854 break; |
2826 case 2: | 2855 case 2: |
2827 EndTest(); | 2856 EndTest(); |
2828 break; | 2857 break; |
2829 default: | 2858 default: |
2830 NOTREACHED(); | 2859 NOTREACHED(); |
2831 } | 2860 } |
2832 } | 2861 } |
2833 | 2862 |
2834 void AfterTest() override {} | 2863 void AfterTest() override {} |
2835 | 2864 |
2836 private: | 2865 private: |
2837 FakeOutputSurface* software_output_surface_ = nullptr; | 2866 OnDrawOutputSurface* output_surface_ = nullptr; |
2838 FakeContentLayerClient client_; | 2867 FakeContentLayerClient client_; |
2839 scoped_refptr<Layer> root_layer_; | 2868 scoped_refptr<Layer> root_layer_; |
2840 scoped_refptr<Layer> parent_layer_; | 2869 scoped_refptr<Layer> parent_layer_; |
2841 scoped_refptr<Layer> child_layer_; | 2870 scoped_refptr<Layer> child_layer_; |
2842 int swap_count_; | 2871 int draw_count_ = 0; |
2843 }; | 2872 }; |
2844 | 2873 |
2845 // Resourceless is not used for SingleThreadProxy, so it is unimplemented. | 2874 // Resourceless is not used for SingleThreadProxy, so it is unimplemented. |
2846 MULTI_THREAD_TEST_F(LayerTreeHostTestResourcelessSoftwareDraw); | 2875 MULTI_THREAD_TEST_F(LayerTreeHostTestResourcelessSoftwareDraw); |
2847 | 2876 |
2848 // Test for UI Resource management. | 2877 // Test for UI Resource management. |
2849 class LayerTreeHostTestUIResource : public LayerTreeHostTest { | 2878 class LayerTreeHostTestUIResource : public LayerTreeHostTest { |
2850 public: | 2879 public: |
2851 LayerTreeHostTestUIResource() : num_ui_resources_(0) {} | 2880 LayerTreeHostTestUIResource() : num_ui_resources_(0) {} |
2852 | 2881 |
(...skipping 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4625 protected: | 4654 protected: |
4626 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4655 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4627 | 4656 |
4628 void SetVisibleFalseAndQueueSwapPromise() { | 4657 void SetVisibleFalseAndQueueSwapPromise() { |
4629 layer_tree_host()->SetVisible(false); | 4658 layer_tree_host()->SetVisible(false); |
4630 std::unique_ptr<SwapPromise> swap_promise( | 4659 std::unique_ptr<SwapPromise> swap_promise( |
4631 new TestSwapPromise(&swap_promise_result_)); | 4660 new TestSwapPromise(&swap_promise_result_)); |
4632 layer_tree_host()->QueueSwapPromise(std::move(swap_promise)); | 4661 layer_tree_host()->QueueSwapPromise(std::move(swap_promise)); |
4633 } | 4662 } |
4634 | 4663 |
4635 void ScheduledActionWillSendBeginMainFrame() override { | 4664 void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl, |
| 4665 const BeginFrameArgs& args) override { |
4636 MainThreadTaskRunner()->PostTask( | 4666 MainThreadTaskRunner()->PostTask( |
4637 FROM_HERE, | 4667 FROM_HERE, |
4638 base::Bind(&LayerTreeHostTestBreakSwapPromiseForVisibility | 4668 base::Bind(&LayerTreeHostTestBreakSwapPromiseForVisibility |
4639 ::SetVisibleFalseAndQueueSwapPromise, | 4669 ::SetVisibleFalseAndQueueSwapPromise, |
4640 base::Unretained(this))); | 4670 base::Unretained(this))); |
4641 } | 4671 } |
4642 | 4672 |
4643 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, | 4673 void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
4644 CommitEarlyOutReason reason) override { | 4674 CommitEarlyOutReason reason) override { |
4645 EndTest(); | 4675 EndTest(); |
(...skipping 23 matching lines...) Expand all Loading... |
4669 | 4699 |
4670 void BeginTest() override { PostSetNeedsCommitToMainThread(); } | 4700 void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
4671 | 4701 |
4672 void LoseOutputSurfaceAndQueueSwapPromise() { | 4702 void LoseOutputSurfaceAndQueueSwapPromise() { |
4673 layer_tree_host()->DidLoseOutputSurface(); | 4703 layer_tree_host()->DidLoseOutputSurface(); |
4674 std::unique_ptr<SwapPromise> swap_promise( | 4704 std::unique_ptr<SwapPromise> swap_promise( |
4675 new TestSwapPromise(&swap_promise_result_)); | 4705 new TestSwapPromise(&swap_promise_result_)); |
4676 layer_tree_host()->QueueSwapPromise(std::move(swap_promise)); | 4706 layer_tree_host()->QueueSwapPromise(std::move(swap_promise)); |
4677 } | 4707 } |
4678 | 4708 |
4679 void ScheduledActionWillSendBeginMainFrame() override { | 4709 void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl, |
| 4710 const BeginFrameArgs& args) override { |
4680 if (output_surface_lost_triggered_) | 4711 if (output_surface_lost_triggered_) |
4681 return; | 4712 return; |
4682 output_surface_lost_triggered_ = true; | 4713 output_surface_lost_triggered_ = true; |
4683 | 4714 |
4684 MainThreadTaskRunner()->PostTask( | 4715 MainThreadTaskRunner()->PostTask( |
4685 FROM_HERE, | 4716 FROM_HERE, |
4686 base::Bind(&LayerTreeHostTestBreakSwapPromiseForContext | 4717 base::Bind(&LayerTreeHostTestBreakSwapPromiseForContext |
4687 ::LoseOutputSurfaceAndQueueSwapPromise, | 4718 ::LoseOutputSurfaceAndQueueSwapPromise, |
4688 base::Unretained(this))); | 4719 base::Unretained(this))); |
4689 } | 4720 } |
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5197 did_finish_impl_frame_count_++; | 5228 did_finish_impl_frame_count_++; |
5198 EXPECT_EQ(will_begin_impl_frame_count_, did_finish_impl_frame_count_); | 5229 EXPECT_EQ(will_begin_impl_frame_count_, did_finish_impl_frame_count_); |
5199 | 5230 |
5200 // Request a number of commits to cause multiple impl frames. We expect to | 5231 // Request a number of commits to cause multiple impl frames. We expect to |
5201 // get one more impl frames than the number of commits requested because | 5232 // get one more impl frames than the number of commits requested because |
5202 // after a commit it takes one frame to become idle. | 5233 // after a commit it takes one frame to become idle. |
5203 if (did_finish_impl_frame_count_ < kExpectedNumImplFrames - 1) | 5234 if (did_finish_impl_frame_count_ < kExpectedNumImplFrames - 1) |
5204 PostSetNeedsCommitToMainThread(); | 5235 PostSetNeedsCommitToMainThread(); |
5205 } | 5236 } |
5206 | 5237 |
5207 void SendBeginMainFrameNotExpectedSoon() override { EndTest(); } | 5238 void BeginMainFrameNotExpectedSoon() override { EndTest(); } |
5208 | 5239 |
5209 void AfterTest() override { | 5240 void AfterTest() override { |
5210 EXPECT_GT(will_begin_impl_frame_count_, 0); | 5241 EXPECT_GT(will_begin_impl_frame_count_, 0); |
5211 EXPECT_GT(did_finish_impl_frame_count_, 0); | 5242 EXPECT_GT(did_finish_impl_frame_count_, 0); |
5212 EXPECT_EQ(will_begin_impl_frame_count_, did_finish_impl_frame_count_); | 5243 EXPECT_EQ(will_begin_impl_frame_count_, did_finish_impl_frame_count_); |
5213 | 5244 |
5214 // TODO(mithro): Figure out why the multithread version of this test | 5245 // TODO(mithro): Figure out why the multithread version of this test |
5215 // sometimes has one more frame then expected. Possibly related to | 5246 // sometimes has one more frame then expected. Possibly related to |
5216 // http://crbug.com/443185 | 5247 // http://crbug.com/443185 |
5217 if (!HasImplThread()) { | 5248 if (!HasImplThread()) { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5270 if (will_begin_impl_frame_count_ < 10) | 5301 if (will_begin_impl_frame_count_ < 10) |
5271 PostSetNeedsCommitToMainThread(); | 5302 PostSetNeedsCommitToMainThread(); |
5272 } | 5303 } |
5273 | 5304 |
5274 void BeginMainFrame(const BeginFrameArgs& args) override { | 5305 void BeginMainFrame(const BeginFrameArgs& args) override { |
5275 ASSERT_GT(impl_frame_args_.size(), 0U) | 5306 ASSERT_GT(impl_frame_args_.size(), 0U) |
5276 << "BeginMainFrame called before BeginImplFrame called!"; | 5307 << "BeginMainFrame called before BeginImplFrame called!"; |
5277 EXPECT_PRED_FORMAT2(AssertFrameTimeContained, impl_frame_args_, args); | 5308 EXPECT_PRED_FORMAT2(AssertFrameTimeContained, impl_frame_args_, args); |
5278 } | 5309 } |
5279 | 5310 |
5280 void SendBeginMainFrameNotExpectedSoon() override { EndTest(); } | 5311 void BeginMainFrameNotExpectedSoon() override { EndTest(); } |
5281 | 5312 |
5282 void AfterTest() override { | 5313 void AfterTest() override { |
5283 EXPECT_GT(impl_frame_args_.size(), 0U); | 5314 EXPECT_GT(impl_frame_args_.size(), 0U); |
5284 EXPECT_GE(will_begin_impl_frame_count_, 10); | 5315 EXPECT_GE(will_begin_impl_frame_count_, 10); |
5285 } | 5316 } |
5286 | 5317 |
5287 private: | 5318 private: |
5288 std::vector<BeginFrameArgs> impl_frame_args_; | 5319 std::vector<BeginFrameArgs> impl_frame_args_; |
5289 int will_begin_impl_frame_count_; | 5320 int will_begin_impl_frame_count_; |
5290 }; | 5321 }; |
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5975 bool success) override { | 6006 bool success) override { |
5976 ASSERT_TRUE(success); | 6007 ASSERT_TRUE(success); |
5977 host_impl->tile_manager()->SetScheduledRasterTaskLimitForTesting(1); | 6008 host_impl->tile_manager()->SetScheduledRasterTaskLimitForTesting(1); |
5978 } | 6009 } |
5979 | 6010 |
5980 void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override { | 6011 void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override { |
5981 ++notify_ready_to_activate_count_; | 6012 ++notify_ready_to_activate_count_; |
5982 EndTestAfterDelayMs(100); | 6013 EndTestAfterDelayMs(100); |
5983 } | 6014 } |
5984 | 6015 |
5985 void ScheduledActionPrepareTiles() override { | 6016 void WillPrepareTilesOnThread(LayerTreeHostImpl* impl) override { |
5986 ++scheduled_prepare_tiles_count_; | 6017 ++scheduled_prepare_tiles_count_; |
5987 } | 6018 } |
5988 | 6019 |
5989 void AfterTest() override { | 6020 void AfterTest() override { |
5990 // Expect at most a notification for each scheduled prepare tiles, plus one | 6021 // Expect at most a notification for each scheduled prepare tiles, plus one |
5991 // for the initial commit (which doesn't go through scheduled actions). | 6022 // for the initial commit (which doesn't go through scheduled actions). |
5992 // The reason this is not an equality is because depending on timing, we | 6023 // The reason this is not an equality is because depending on timing, we |
5993 // might get a prepare tiles but not yet get a notification that we're | 6024 // might get a prepare tiles but not yet get a notification that we're |
5994 // ready to activate. The intent of a test is to ensure that we don't | 6025 // ready to activate. The intent of a test is to ensure that we don't |
5995 // get more than one notification per prepare tiles, so this is OK. | 6026 // get more than one notification per prepare tiles, so this is OK. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6030 | 6061 |
6031 // After activating, we either need to prepare tiles, or we've already | 6062 // After activating, we either need to prepare tiles, or we've already |
6032 // called a scheduled prepare tiles. This is done because activation might | 6063 // called a scheduled prepare tiles. This is done because activation might |
6033 // cause us to have to memory available (old active tree is gone), so we | 6064 // cause us to have to memory available (old active tree is gone), so we |
6034 // need to ensure we will get a PrepareTiles call. | 6065 // need to ensure we will get a PrepareTiles call. |
6035 if (!impl->prepare_tiles_needed()) | 6066 if (!impl->prepare_tiles_needed()) |
6036 EXPECT_GE(scheduled_prepare_tiles_count_, 1); | 6067 EXPECT_GE(scheduled_prepare_tiles_count_, 1); |
6037 EndTest(); | 6068 EndTest(); |
6038 } | 6069 } |
6039 | 6070 |
6040 void ScheduledActionPrepareTiles() override { | 6071 void WillPrepareTilesOnThread(LayerTreeHostImpl* impl) override { |
6041 ++scheduled_prepare_tiles_count_; | 6072 ++scheduled_prepare_tiles_count_; |
6042 } | 6073 } |
6043 | 6074 |
6044 void AfterTest() override {} | 6075 void AfterTest() override {} |
6045 | 6076 |
6046 protected: | 6077 protected: |
6047 FakeContentLayerClient client_; | 6078 FakeContentLayerClient client_; |
6048 int scheduled_prepare_tiles_count_; | 6079 int scheduled_prepare_tiles_count_; |
6049 }; | 6080 }; |
6050 | 6081 |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6685 } | 6716 } |
6686 | 6717 |
6687 void AfterTest() override {} | 6718 void AfterTest() override {} |
6688 | 6719 |
6689 std::vector<int> affected_by_page_scale_; | 6720 std::vector<int> affected_by_page_scale_; |
6690 std::vector<int> not_affected_by_page_scale_; | 6721 std::vector<int> not_affected_by_page_scale_; |
6691 }; | 6722 }; |
6692 | 6723 |
6693 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeTestPageScaleFlags); | 6724 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeTestPageScaleFlags); |
6694 | 6725 |
6695 class LayerTreeHostScrollingAndScalingUpdatesLayers : public LayerTreeHostTest { | |
6696 public: | |
6697 LayerTreeHostScrollingAndScalingUpdatesLayers() | |
6698 : requested_update_layers_(false), commit_count_(0) {} | |
6699 | |
6700 void SetupTree() override { | |
6701 LayerTreeHostTest::SetupTree(); | |
6702 Layer* root_layer = layer_tree_host()->root_layer(); | |
6703 scoped_refptr<Layer> scroll_layer = Layer::Create(); | |
6704 CreateVirtualViewportLayers(root_layer, scroll_layer, root_layer->bounds(), | |
6705 root_layer->bounds(), layer_tree_host()); | |
6706 } | |
6707 | |
6708 void BeginTest() override { | |
6709 LayerTreeHostCommon::ScrollUpdateInfo scroll; | |
6710 scroll.layer_id = layer_tree_host()->root_layer()->id(); | |
6711 scroll.scroll_delta = gfx::Vector2d(0, 33); | |
6712 scroll_info_.scrolls.push_back(scroll); | |
6713 | |
6714 scale_info_.page_scale_delta = 2.71f; | |
6715 | |
6716 PostSetNeedsCommitToMainThread(); | |
6717 } | |
6718 | |
6719 void BeginMainFrame(const BeginFrameArgs& args) override { | |
6720 switch (commit_count_) { | |
6721 case 0: | |
6722 requested_update_layers_ = false; | |
6723 layer_tree_host()->ApplyScrollAndScale(&no_op_info_); | |
6724 EXPECT_FALSE(requested_update_layers_); | |
6725 break; | |
6726 case 1: | |
6727 requested_update_layers_ = false; | |
6728 layer_tree_host()->ApplyScrollAndScale(&scale_info_); | |
6729 EXPECT_TRUE(requested_update_layers_); | |
6730 break; | |
6731 case 2: | |
6732 requested_update_layers_ = false; | |
6733 layer_tree_host()->ApplyScrollAndScale(&scroll_info_); | |
6734 EXPECT_TRUE(requested_update_layers_); | |
6735 EndTest(); | |
6736 break; | |
6737 default: | |
6738 NOTREACHED(); | |
6739 } | |
6740 } | |
6741 | |
6742 void DidSetNeedsUpdateLayers() override { requested_update_layers_ = true; } | |
6743 | |
6744 void DidCommit() override { | |
6745 if (++commit_count_ < 3) | |
6746 PostSetNeedsCommitToMainThread(); | |
6747 } | |
6748 | |
6749 void AfterTest() override {} | |
6750 | |
6751 ScrollAndScaleSet scroll_info_; | |
6752 ScrollAndScaleSet scale_info_; | |
6753 ScrollAndScaleSet no_op_info_; | |
6754 bool requested_update_layers_; | |
6755 int commit_count_; | |
6756 }; | |
6757 | |
6758 MULTI_THREAD_TEST_F(LayerTreeHostScrollingAndScalingUpdatesLayers); | |
6759 | |
6760 class LayerTreeHostTestDestroyWhileInitializingOutputSurface | 6726 class LayerTreeHostTestDestroyWhileInitializingOutputSurface |
6761 : public LayerTreeHostTest { | 6727 : public LayerTreeHostTest { |
6762 protected: | 6728 protected: |
6763 void BeginTest() override { | 6729 void BeginTest() override { |
6764 // By ending the test immediately we start initialization of an output | 6730 // By ending the test immediately we start initialization of an output |
6765 // surface but destroy the LTH before it completes. This test verifies | 6731 // surface but destroy the LTH before it completes. This test verifies |
6766 // that this works correctly and the output surface is destroyed on | 6732 // that this works correctly and the output surface is destroyed on |
6767 // the correct thread. | 6733 // the correct thread. |
6768 EndTest(); | 6734 EndTest(); |
6769 } | 6735 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6873 private: | 6839 private: |
6874 FakeContentLayerClient client_; | 6840 FakeContentLayerClient client_; |
6875 const gfx::Size viewport_size_; | 6841 const gfx::Size viewport_size_; |
6876 const gfx::Size large_image_size_; | 6842 const gfx::Size large_image_size_; |
6877 }; | 6843 }; |
6878 | 6844 |
6879 SINGLE_AND_MULTI_THREAD_TEST_F(GpuRasterizationSucceedsWithLargeImage); | 6845 SINGLE_AND_MULTI_THREAD_TEST_F(GpuRasterizationSucceedsWithLargeImage); |
6880 | 6846 |
6881 } // namespace | 6847 } // namespace |
6882 } // namespace cc | 6848 } // namespace cc |
OLD | NEW |