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_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <cmath> | 10 #include <cmath> |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 #include "cc/test/fake_raster_source.h" | 55 #include "cc/test/fake_raster_source.h" |
56 #include "cc/test/fake_video_frame_provider.h" | 56 #include "cc/test/fake_video_frame_provider.h" |
57 #include "cc/test/geometry_test_utils.h" | 57 #include "cc/test/geometry_test_utils.h" |
58 #include "cc/test/gpu_rasterization_enabled_settings.h" | 58 #include "cc/test/gpu_rasterization_enabled_settings.h" |
59 #include "cc/test/layer_test_common.h" | 59 #include "cc/test/layer_test_common.h" |
60 #include "cc/test/layer_tree_test.h" | 60 #include "cc/test/layer_tree_test.h" |
61 #include "cc/test/test_gpu_memory_buffer_manager.h" | 61 #include "cc/test/test_gpu_memory_buffer_manager.h" |
62 #include "cc/test/test_shared_bitmap_manager.h" | 62 #include "cc/test/test_shared_bitmap_manager.h" |
63 #include "cc/test/test_task_graph_runner.h" | 63 #include "cc/test/test_task_graph_runner.h" |
64 #include "cc/test/test_web_graphics_context_3d.h" | 64 #include "cc/test/test_web_graphics_context_3d.h" |
| 65 #include "cc/trees/effect_node.h" |
65 #include "cc/trees/layer_tree_impl.h" | 66 #include "cc/trees/layer_tree_impl.h" |
66 #include "cc/trees/single_thread_proxy.h" | 67 #include "cc/trees/single_thread_proxy.h" |
| 68 #include "cc/trees/transform_node.h" |
67 #include "media/base/media.h" | 69 #include "media/base/media.h" |
68 #include "testing/gmock/include/gmock/gmock.h" | 70 #include "testing/gmock/include/gmock/gmock.h" |
69 #include "testing/gtest/include/gtest/gtest.h" | 71 #include "testing/gtest/include/gtest/gtest.h" |
70 #include "third_party/skia/include/core/SkMallocPixelRef.h" | 72 #include "third_party/skia/include/core/SkMallocPixelRef.h" |
71 #include "ui/gfx/geometry/rect_conversions.h" | 73 #include "ui/gfx/geometry/rect_conversions.h" |
72 #include "ui/gfx/geometry/size_conversions.h" | 74 #include "ui/gfx/geometry/size_conversions.h" |
73 #include "ui/gfx/geometry/vector2d_conversions.h" | 75 #include "ui/gfx/geometry/vector2d_conversions.h" |
74 | 76 |
75 #define EXPECT_SCOPED(statements) \ | 77 #define EXPECT_SCOPED(statements) \ |
76 { \ | 78 { \ |
(...skipping 2846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2923 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); | 2925 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); |
2924 host_impl_->ActivateSyncTree(); | 2926 host_impl_->ActivateSyncTree(); |
2925 | 2927 |
2926 LayerImpl* active_scrollbar_layer = | 2928 LayerImpl* active_scrollbar_layer = |
2927 host_impl_->active_tree()->LayerById(400); | 2929 host_impl_->active_tree()->LayerById(400); |
2928 | 2930 |
2929 EffectNode* active_tree_node = | 2931 EffectNode* active_tree_node = |
2930 host_impl_->active_tree()->property_trees()->effect_tree.Node( | 2932 host_impl_->active_tree()->property_trees()->effect_tree.Node( |
2931 active_scrollbar_layer->effect_tree_index()); | 2933 active_scrollbar_layer->effect_tree_index()); |
2932 EXPECT_FLOAT_EQ(active_scrollbar_layer->Opacity(), | 2934 EXPECT_FLOAT_EQ(active_scrollbar_layer->Opacity(), |
2933 active_tree_node->data.opacity); | 2935 active_tree_node->opacity); |
2934 | 2936 |
2935 host_impl_->ScrollbarAnimationControllerForId(scroll->id()) | 2937 host_impl_->ScrollbarAnimationControllerForId(scroll->id()) |
2936 ->DidMouseMoveNear(0); | 2938 ->DidMouseMoveNear(0); |
2937 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), | 2939 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), |
2938 InputHandler::WHEEL); | 2940 InputHandler::WHEEL); |
2939 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2dF(0, 5)).get()); | 2941 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2dF(0, 5)).get()); |
2940 host_impl_->ScrollEnd(EndState().get()); | 2942 host_impl_->ScrollEnd(EndState().get()); |
2941 host_impl_->CreatePendingTree(); | 2943 host_impl_->CreatePendingTree(); |
2942 // To test the case where the effect tree index of scrollbar layer changes, | 2944 // To test the case where the effect tree index of scrollbar layer changes, |
2943 // we force the container layer to create a render surface. | 2945 // we force the container layer to create a render surface. |
2944 container = host_impl_->pending_tree()->InnerViewportContainerLayer(); | 2946 container = host_impl_->pending_tree()->InnerViewportContainerLayer(); |
2945 container->test_properties()->force_render_surface = true; | 2947 container->test_properties()->force_render_surface = true; |
2946 container->SetBounds(gfx::Size(10, 10)); | 2948 container->SetBounds(gfx::Size(10, 10)); |
2947 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); | 2949 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); |
2948 | 2950 |
2949 LayerImpl* pending_scrollbar_layer = | 2951 LayerImpl* pending_scrollbar_layer = |
2950 host_impl_->pending_tree()->LayerById(400); | 2952 host_impl_->pending_tree()->LayerById(400); |
2951 EffectNode* pending_tree_node = | 2953 EffectNode* pending_tree_node = |
2952 host_impl_->pending_tree()->property_trees()->effect_tree.Node( | 2954 host_impl_->pending_tree()->property_trees()->effect_tree.Node( |
2953 pending_scrollbar_layer->effect_tree_index()); | 2955 pending_scrollbar_layer->effect_tree_index()); |
2954 host_impl_->pending_tree() | 2956 host_impl_->pending_tree() |
2955 ->property_trees() | 2957 ->property_trees() |
2956 ->always_use_active_tree_opacity_effect_ids.push_back(400); | 2958 ->always_use_active_tree_opacity_effect_ids.push_back(400); |
2957 EXPECT_FLOAT_EQ(1.f, active_tree_node->data.opacity); | 2959 EXPECT_FLOAT_EQ(1.f, active_tree_node->opacity); |
2958 EXPECT_FLOAT_EQ(1.f, active_scrollbar_layer->Opacity()); | 2960 EXPECT_FLOAT_EQ(1.f, active_scrollbar_layer->Opacity()); |
2959 EXPECT_FLOAT_EQ(0.f, pending_tree_node->data.opacity); | 2961 EXPECT_FLOAT_EQ(0.f, pending_tree_node->opacity); |
2960 host_impl_->ActivateSyncTree(); | 2962 host_impl_->ActivateSyncTree(); |
2961 active_tree_node = | 2963 active_tree_node = |
2962 host_impl_->active_tree()->property_trees()->effect_tree.Node( | 2964 host_impl_->active_tree()->property_trees()->effect_tree.Node( |
2963 active_scrollbar_layer->effect_tree_index()); | 2965 active_scrollbar_layer->effect_tree_index()); |
2964 EXPECT_FLOAT_EQ(1.f, active_tree_node->data.opacity); | 2966 EXPECT_FLOAT_EQ(1.f, active_tree_node->opacity); |
2965 EXPECT_FLOAT_EQ(1.f, active_scrollbar_layer->Opacity()); | 2967 EXPECT_FLOAT_EQ(1.f, active_scrollbar_layer->Opacity()); |
2966 } | 2968 } |
2967 }; | 2969 }; |
2968 | 2970 |
2969 TEST_F(LayerTreeHostImplTestScrollbarOpacity, LinearFade) { | 2971 TEST_F(LayerTreeHostImplTestScrollbarOpacity, LinearFade) { |
2970 RunTest(LayerTreeSettings::LINEAR_FADE); | 2972 RunTest(LayerTreeSettings::LINEAR_FADE); |
2971 } | 2973 } |
2972 | 2974 |
2973 TEST_F(LayerTreeHostImplTestScrollbarOpacity, Thinning) { | 2975 TEST_F(LayerTreeHostImplTestScrollbarOpacity, Thinning) { |
2974 RunTest(LayerTreeSettings::THINNING); | 2976 RunTest(LayerTreeSettings::THINNING); |
(...skipping 6782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9757 test_layer->SetTransform(perspective_transform); | 9759 test_layer->SetTransform(perspective_transform); |
9758 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 9760 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
9759 | 9761 |
9760 bool update_lcd_text = false; | 9762 bool update_lcd_text = false; |
9761 | 9763 |
9762 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 9764 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
9763 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 9765 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); |
9764 TransformNode* node = | 9766 TransformNode* node = |
9765 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 9767 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
9766 test_layer->transform_tree_index()); | 9768 test_layer->transform_tree_index()); |
9767 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 9769 EXPECT_EQ(node->sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
9768 | 9770 |
9769 gfx::Transform external_transform; | 9771 gfx::Transform external_transform; |
9770 external_transform.Translate(10, 10); | 9772 external_transform.Translate(10, 10); |
9771 external_transform.Scale(2, 2); | 9773 external_transform.Scale(2, 2); |
9772 gfx::Rect external_viewport; | 9774 gfx::Rect external_viewport; |
9773 gfx::Rect external_clip(layer_size); | 9775 gfx::Rect external_clip(layer_size); |
9774 bool resourceless_software_draw = false; | 9776 bool resourceless_software_draw = false; |
9775 host_impl_->SetExternalTilePriorityConstraints(external_viewport, | 9777 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
9776 external_transform); | 9778 external_transform); |
9777 | 9779 |
9778 // Transform node's sublayer scale should include the device transform scale. | 9780 // Transform node's sublayer scale should include the device transform scale. |
9779 host_impl_->OnDraw(external_transform, external_viewport, external_clip, | 9781 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
9780 resourceless_software_draw); | 9782 resourceless_software_draw); |
9781 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 9783 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
9782 test_layer->transform_tree_index()); | 9784 test_layer->transform_tree_index()); |
9783 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); | 9785 EXPECT_EQ(node->sublayer_scale, gfx::Vector2dF(2.f, 2.f)); |
9784 | 9786 |
9785 // Clear the external transform. | 9787 // Clear the external transform. |
9786 external_transform = gfx::Transform(); | 9788 external_transform = gfx::Transform(); |
9787 host_impl_->SetExternalTilePriorityConstraints(external_viewport, | 9789 host_impl_->SetExternalTilePriorityConstraints(external_viewport, |
9788 external_transform); | 9790 external_transform); |
9789 | 9791 |
9790 host_impl_->OnDraw(external_transform, external_viewport, external_clip, | 9792 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
9791 resourceless_software_draw); | 9793 resourceless_software_draw); |
9792 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 9794 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
9793 test_layer->transform_tree_index()); | 9795 test_layer->transform_tree_index()); |
9794 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 9796 EXPECT_EQ(node->sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
9795 } | 9797 } |
9796 | 9798 |
9797 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { | 9799 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { |
9798 const gfx::Size content_size(1000, 1000); | 9800 const gfx::Size content_size(1000, 1000); |
9799 const gfx::Size viewport_size(50, 100); | 9801 const gfx::Size viewport_size(50, 100); |
9800 CreateBasicVirtualViewportLayers(viewport_size, content_size); | 9802 CreateBasicVirtualViewportLayers(viewport_size, content_size); |
9801 | 9803 |
9802 DrawFrame(); | 9804 DrawFrame(); |
9803 | 9805 |
9804 base::TimeTicks start_time = | 9806 base::TimeTicks start_time = |
(...skipping 996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10801 DrawFrame(); | 10803 DrawFrame(); |
10802 | 10804 |
10803 host_impl_->CreatePendingTree(); | 10805 host_impl_->CreatePendingTree(); |
10804 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); | 10806 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); |
10805 LayerImpl* page_scale_layer = host_impl_->active_tree()->PageScaleLayer(); | 10807 LayerImpl* page_scale_layer = host_impl_->active_tree()->PageScaleLayer(); |
10806 | 10808 |
10807 TransformNode* active_tree_node = | 10809 TransformNode* active_tree_node = |
10808 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 10810 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
10809 page_scale_layer->transform_tree_index()); | 10811 page_scale_layer->transform_tree_index()); |
10810 // SetPageScaleOnActiveTree also updates the factors in property trees. | 10812 // SetPageScaleOnActiveTree also updates the factors in property trees. |
10811 EXPECT_EQ(active_tree_node->data.post_local_scale_factor, 2.f); | 10813 EXPECT_EQ(active_tree_node->post_local_scale_factor, 2.f); |
10812 EXPECT_EQ(host_impl_->active_tree()->current_page_scale_factor(), 2.f); | 10814 EXPECT_EQ(host_impl_->active_tree()->current_page_scale_factor(), 2.f); |
10813 | 10815 |
10814 TransformNode* pending_tree_node = | 10816 TransformNode* pending_tree_node = |
10815 host_impl_->pending_tree()->property_trees()->transform_tree.Node( | 10817 host_impl_->pending_tree()->property_trees()->transform_tree.Node( |
10816 page_scale_layer->transform_tree_index()); | 10818 page_scale_layer->transform_tree_index()); |
10817 EXPECT_EQ(pending_tree_node->data.post_local_scale_factor, 1.f); | 10819 EXPECT_EQ(pending_tree_node->post_local_scale_factor, 1.f); |
10818 EXPECT_EQ(host_impl_->pending_tree()->current_page_scale_factor(), 2.f); | 10820 EXPECT_EQ(host_impl_->pending_tree()->current_page_scale_factor(), 2.f); |
10819 | 10821 |
10820 host_impl_->pending_tree()->UpdateDrawProperties(false); | 10822 host_impl_->pending_tree()->UpdateDrawProperties(false); |
10821 pending_tree_node = | 10823 pending_tree_node = |
10822 host_impl_->pending_tree()->property_trees()->transform_tree.Node( | 10824 host_impl_->pending_tree()->property_trees()->transform_tree.Node( |
10823 page_scale_layer->transform_tree_index()); | 10825 page_scale_layer->transform_tree_index()); |
10824 EXPECT_EQ(pending_tree_node->data.post_local_scale_factor, 2.f); | 10826 EXPECT_EQ(pending_tree_node->post_local_scale_factor, 2.f); |
10825 | 10827 |
10826 host_impl_->ActivateSyncTree(); | 10828 host_impl_->ActivateSyncTree(); |
10827 host_impl_->active_tree()->UpdateDrawProperties(false); | 10829 host_impl_->active_tree()->UpdateDrawProperties(false); |
10828 active_tree_node = | 10830 active_tree_node = |
10829 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 10831 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
10830 page_scale_layer->transform_tree_index()); | 10832 page_scale_layer->transform_tree_index()); |
10831 EXPECT_EQ(active_tree_node->data.post_local_scale_factor, 2.f); | 10833 EXPECT_EQ(active_tree_node->post_local_scale_factor, 2.f); |
10832 } | 10834 } |
10833 | 10835 |
10834 TEST_F(LayerTreeHostImplTest, SubLayerScaleForNodeInSubtreeOfPageScaleLayer) { | 10836 TEST_F(LayerTreeHostImplTest, SubLayerScaleForNodeInSubtreeOfPageScaleLayer) { |
10835 // Checks that the sublayer scale of a transform node in the subtree of the | 10837 // Checks that the sublayer scale of a transform node in the subtree of the |
10836 // page scale layer is updated without a property tree rebuild. | 10838 // page scale layer is updated without a property tree rebuild. |
10837 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 3.f); | 10839 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 3.f); |
10838 CreateScrollAndContentsLayers(host_impl_->active_tree(), gfx::Size(100, 100)); | 10840 CreateScrollAndContentsLayers(host_impl_->active_tree(), gfx::Size(100, 100)); |
10839 LayerImpl* page_scale_layer = host_impl_->active_tree()->PageScaleLayer(); | 10841 LayerImpl* page_scale_layer = host_impl_->active_tree()->PageScaleLayer(); |
10840 page_scale_layer->test_properties()->AddChild( | 10842 page_scale_layer->test_properties()->AddChild( |
10841 LayerImpl::Create(host_impl_->active_tree(), 100)); | 10843 LayerImpl::Create(host_impl_->active_tree(), 100)); |
10842 | 10844 |
10843 LayerImpl* in_subtree_of_page_scale_layer = | 10845 LayerImpl* in_subtree_of_page_scale_layer = |
10844 host_impl_->active_tree()->LayerById(100); | 10846 host_impl_->active_tree()->LayerById(100); |
10845 in_subtree_of_page_scale_layer->test_properties()->force_render_surface = | 10847 in_subtree_of_page_scale_layer->test_properties()->force_render_surface = |
10846 true; | 10848 true; |
10847 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 10849 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
10848 | 10850 |
10849 DrawFrame(); | 10851 DrawFrame(); |
10850 | 10852 |
10851 TransformNode* node = | 10853 TransformNode* node = |
10852 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 10854 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
10853 in_subtree_of_page_scale_layer->transform_tree_index()); | 10855 in_subtree_of_page_scale_layer->transform_tree_index()); |
10854 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 10856 EXPECT_EQ(node->sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
10855 | 10857 |
10856 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); | 10858 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); |
10857 | 10859 |
10858 DrawFrame(); | 10860 DrawFrame(); |
10859 | 10861 |
10860 in_subtree_of_page_scale_layer = host_impl_->active_tree()->LayerById(100); | 10862 in_subtree_of_page_scale_layer = host_impl_->active_tree()->LayerById(100); |
10861 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 10863 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
10862 in_subtree_of_page_scale_layer->transform_tree_index()); | 10864 in_subtree_of_page_scale_layer->transform_tree_index()); |
10863 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); | 10865 EXPECT_EQ(node->sublayer_scale, gfx::Vector2dF(2.f, 2.f)); |
10864 } | 10866 } |
10865 | 10867 |
10866 TEST_F(LayerTreeHostImplTest, JitterTest) { | 10868 TEST_F(LayerTreeHostImplTest, JitterTest) { |
10867 host_impl_->SetViewportSize(gfx::Size(100, 100)); | 10869 host_impl_->SetViewportSize(gfx::Size(100, 100)); |
10868 | 10870 |
10869 host_impl_->CreatePendingTree(); | 10871 host_impl_->CreatePendingTree(); |
10870 CreateScrollAndContentsLayers(host_impl_->pending_tree(), | 10872 CreateScrollAndContentsLayers(host_impl_->pending_tree(), |
10871 gfx::Size(100, 100)); | 10873 gfx::Size(100, 100)); |
10872 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); | 10874 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); |
10873 | 10875 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10952 | 10954 |
10953 // Re-initialize with a software output surface. | 10955 // Re-initialize with a software output surface. |
10954 output_surface_ = FakeOutputSurface::CreateSoftware( | 10956 output_surface_ = FakeOutputSurface::CreateSoftware( |
10955 base::WrapUnique(new SoftwareOutputDevice)); | 10957 base::WrapUnique(new SoftwareOutputDevice)); |
10956 host_impl_->InitializeRenderer(output_surface_.get()); | 10958 host_impl_->InitializeRenderer(output_surface_.get()); |
10957 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); | 10959 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); |
10958 } | 10960 } |
10959 | 10961 |
10960 } // namespace | 10962 } // namespace |
10961 } // namespace cc | 10963 } // namespace cc |
OLD | NEW |