| 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_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 8981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8992 animated->element_id(), timeline_impl(), 10.0, 0.f, 1.f, false); | 8992 animated->element_id(), timeline_impl(), 10.0, 0.f, 1.f, false); |
| 8993 animated->test_properties()->opacity_can_animate = true; | 8993 animated->test_properties()->opacity_can_animate = true; |
| 8994 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 8994 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
| 8995 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root); | 8995 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root); |
| 8996 | 8996 |
| 8997 EXPECT_FALSE(animated->visible_layer_rect().IsEmpty()); | 8997 EXPECT_FALSE(animated->visible_layer_rect().IsEmpty()); |
| 8998 } | 8998 } |
| 8999 | 8999 |
| 9000 TEST_F(LayerTreeHostCommonTest, | 9000 TEST_F(LayerTreeHostCommonTest, |
| 9001 VisibleContentRectForAnimatedLayerWithSingularTransform) { | 9001 VisibleContentRectForAnimatedLayerWithSingularTransform) { |
| 9002 LayerImpl* root = root_layer_for_testing(); | 9002 host_impl()->CreatePendingTree(); |
| 9003 LayerImpl* clip = AddChild<LayerImpl>(root); | 9003 std::unique_ptr<LayerImpl> root_ptr = |
| 9004 LayerImpl* animated = AddChild<LayerImpl>(clip); | 9004 LayerImpl::Create(host_impl()->pending_tree(), 1); |
| 9005 LayerImpl* surface = AddChild<LayerImpl>(animated); | 9005 LayerImpl* root = root_ptr.get(); |
| 9006 LayerImpl* descendant_of_animation = AddChild<LayerImpl>(surface); | 9006 host_impl()->pending_tree()->SetRootLayerForTesting(std::move(root_ptr)); |
| 9007 std::unique_ptr<LayerImpl> clip_ptr = |
| 9008 LayerImpl::Create(host_impl()->pending_tree(), 2); |
| 9009 LayerImpl* clip = clip_ptr.get(); |
| 9010 root->test_properties()->AddChild(std::move(clip_ptr)); |
| 9011 std::unique_ptr<LayerImpl> animated_ptr = |
| 9012 LayerImpl::Create(host_impl()->pending_tree(), 3); |
| 9013 LayerImpl* animated = animated_ptr.get(); |
| 9014 clip->test_properties()->AddChild(std::move(animated_ptr)); |
| 9015 std::unique_ptr<LayerImpl> surface_ptr = |
| 9016 LayerImpl::Create(host_impl()->pending_tree(), 4); |
| 9017 LayerImpl* surface = surface_ptr.get(); |
| 9018 animated->test_properties()->AddChild(std::move(surface_ptr)); |
| 9019 std::unique_ptr<LayerImpl> descendant_of_animation_ptr = |
| 9020 LayerImpl::Create(host_impl()->pending_tree(), 5); |
| 9021 LayerImpl* descendant_of_animation = descendant_of_animation_ptr.get(); |
| 9022 surface->test_properties()->AddChild(std::move(descendant_of_animation_ptr)); |
| 9007 | 9023 |
| 9008 SetElementIdsForTesting(); | 9024 host_impl()->pending_tree()->SetElementIdsForTesting(); |
| 9009 | 9025 |
| 9026 root->SetDrawsContent(true); |
| 9010 animated->SetDrawsContent(true); | 9027 animated->SetDrawsContent(true); |
| 9011 surface->SetDrawsContent(true); | 9028 surface->SetDrawsContent(true); |
| 9012 descendant_of_animation->SetDrawsContent(true); | 9029 descendant_of_animation->SetDrawsContent(true); |
| 9013 | 9030 |
| 9014 gfx::Transform uninvertible_matrix; | 9031 gfx::Transform uninvertible_matrix; |
| 9015 uninvertible_matrix.Scale3d(6.f, 6.f, 0.f); | 9032 uninvertible_matrix.Scale3d(6.f, 6.f, 0.f); |
| 9016 | 9033 |
| 9017 root->SetBounds(gfx::Size(100, 100)); | 9034 root->SetBounds(gfx::Size(100, 100)); |
| 9018 clip->SetBounds(gfx::Size(10, 10)); | 9035 clip->SetBounds(gfx::Size(10, 10)); |
| 9019 clip->SetMasksToBounds(true); | 9036 clip->SetMasksToBounds(true); |
| 9020 animated->test_properties()->transform = uninvertible_matrix; | 9037 animated->test_properties()->transform = uninvertible_matrix; |
| 9021 animated->SetBounds(gfx::Size(120, 120)); | 9038 animated->SetBounds(gfx::Size(120, 120)); |
| 9022 surface->SetBounds(gfx::Size(100, 100)); | 9039 surface->SetBounds(gfx::Size(100, 100)); |
| 9023 surface->test_properties()->force_render_surface = true; | 9040 surface->test_properties()->force_render_surface = true; |
| 9024 descendant_of_animation->SetBounds(gfx::Size(200, 200)); | 9041 descendant_of_animation->SetBounds(gfx::Size(200, 200)); |
| 9025 | 9042 |
| 9026 TransformOperations start_transform_operations; | 9043 TransformOperations start_transform_operations; |
| 9027 start_transform_operations.AppendMatrix(uninvertible_matrix); | 9044 start_transform_operations.AppendMatrix(uninvertible_matrix); |
| 9028 TransformOperations end_transform_operations; | 9045 TransformOperations end_transform_operations; |
| 9029 | 9046 |
| 9030 AddAnimatedTransformToElementWithPlayer( | 9047 AddAnimatedTransformToElementWithPlayer( |
| 9031 animated->element_id(), timeline_impl(), 10.0, start_transform_operations, | 9048 animated->element_id(), timeline_impl(), 10.0, start_transform_operations, |
| 9032 end_transform_operations); | 9049 end_transform_operations); |
| 9033 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root); | 9050 ExecuteCalculateDrawProperties(root); |
| 9051 // Since animated has singular transform, it is not be part of render |
| 9052 // surface layer list but should be rastered. |
| 9053 EXPECT_FALSE(animated->is_drawn_render_surface_layer_list_member()); |
| 9054 EXPECT_TRUE(animated->raster_even_if_not_in_rsll()); |
| 9034 | 9055 |
| 9035 // The animated layer has a singular transform and maps to a non-empty rect in | 9056 // The animated layer has a singular transform and maps to a non-empty rect in |
| 9036 // clipped target space, so is treated as fully visible. | 9057 // clipped target space, so is treated as fully visible. |
| 9037 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect()); | 9058 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect()); |
| 9038 | 9059 |
| 9039 // The singular transform on |animated| is flattened when inherited by | 9060 // The singular transform on |animated| is flattened when inherited by |
| 9040 // |surface|, and this happens to make it invertible. | 9061 // |surface|, and this happens to make it invertible. |
| 9041 EXPECT_EQ(gfx::Rect(2, 2), surface->visible_layer_rect()); | 9062 EXPECT_EQ(gfx::Rect(2, 2), surface->visible_layer_rect()); |
| 9042 EXPECT_EQ(gfx::Rect(2, 2), descendant_of_animation->visible_layer_rect()); | 9063 EXPECT_EQ(gfx::Rect(2, 2), descendant_of_animation->visible_layer_rect()); |
| 9043 | 9064 |
| 9044 gfx::Transform zero_matrix; | 9065 gfx::Transform zero_matrix; |
| 9045 zero_matrix.Scale3d(0.f, 0.f, 0.f); | 9066 zero_matrix.Scale3d(0.f, 0.f, 0.f); |
| 9046 root->layer_tree_impl()->SetTransformMutated(animated->element_id(), | 9067 root->layer_tree_impl()->SetTransformMutated(animated->element_id(), |
| 9047 zero_matrix); | 9068 zero_matrix); |
| 9048 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root); | 9069 ExecuteCalculateDrawProperties(root); |
| 9049 | 9070 |
| 9050 // The animated layer will be treated as fully visible when we combine clips | 9071 // The animated layer will be treated as fully visible when we combine clips |
| 9051 // in screen space. | 9072 // in screen space. |
| 9052 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect()); | 9073 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect()); |
| 9053 | 9074 |
| 9054 // This time, flattening does not make |animated|'s transform invertible. This | 9075 // This time, flattening does not make |animated|'s transform invertible. This |
| 9055 // means the clip cannot be projected into |surface|'s space, so we treat | 9076 // means the clip cannot be projected into |surface|'s space, so we treat |
| 9056 // |surface| and layers that draw into it as having empty visible rect. | 9077 // |surface| and layers that draw into it as having empty visible rect. |
| 9057 EXPECT_EQ(gfx::Rect(100, 100), surface->visible_layer_rect()); | 9078 EXPECT_EQ(gfx::Rect(100, 100), surface->visible_layer_rect()); |
| 9058 EXPECT_EQ(gfx::Rect(200, 200), descendant_of_animation->visible_layer_rect()); | 9079 EXPECT_EQ(gfx::Rect(200, 200), descendant_of_animation->visible_layer_rect()); |
| 9080 |
| 9081 host_impl()->ActivateSyncTree(); |
| 9082 LayerImpl* active_root = host_impl()->active_tree()->LayerById(root->id()); |
| 9083 ExecuteCalculateDrawProperties(active_root); |
| 9084 |
| 9085 // Since the animated has singular transform, it is not be part of render |
| 9086 // surface layer list. |
| 9087 LayerImpl* active_animated = |
| 9088 host_impl()->active_tree()->LayerById(animated->id()); |
| 9089 EXPECT_TRUE(active_root->is_drawn_render_surface_layer_list_member()); |
| 9090 EXPECT_FALSE(active_animated->is_drawn_render_surface_layer_list_member()); |
| 9091 |
| 9092 // Since animated has singular transform, it is not be part of render |
| 9093 // surface layer list but should be rastered. |
| 9094 EXPECT_TRUE(animated->raster_even_if_not_in_rsll()); |
| 9095 EXPECT_EQ(gfx::Rect(120, 120), active_animated->visible_layer_rect()); |
| 9059 } | 9096 } |
| 9060 | 9097 |
| 9061 // Verify that having animated opacity but current opacity 1 still creates | 9098 // Verify that having animated opacity but current opacity 1 still creates |
| 9062 // a render surface. | 9099 // a render surface. |
| 9063 TEST_F(LayerTreeHostCommonTest, AnimatedOpacityCreatesRenderSurface) { | 9100 TEST_F(LayerTreeHostCommonTest, AnimatedOpacityCreatesRenderSurface) { |
| 9064 LayerImpl* root = root_layer_for_testing(); | 9101 LayerImpl* root = root_layer_for_testing(); |
| 9065 LayerImpl* child = AddChild<LayerImpl>(root); | 9102 LayerImpl* child = AddChild<LayerImpl>(root); |
| 9066 LayerImpl* grandchild = AddChild<LayerImpl>(child); | 9103 LayerImpl* grandchild = AddChild<LayerImpl>(child); |
| 9067 | 9104 |
| 9068 root->SetBounds(gfx::Size(50, 50)); | 9105 root->SetBounds(gfx::Size(50, 50)); |
| (...skipping 1796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10865 | 10902 |
| 10866 // Check child layer draw properties. | 10903 // Check child layer draw properties. |
| 10867 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); | 10904 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); |
| 10868 EXPECT_EQ(gfx::Transform(), child->DrawTransform()); | 10905 EXPECT_EQ(gfx::Transform(), child->DrawTransform()); |
| 10869 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect()); | 10906 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect()); |
| 10870 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect()); | 10907 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect()); |
| 10871 } | 10908 } |
| 10872 | 10909 |
| 10873 } // namespace | 10910 } // namespace |
| 10874 } // namespace cc | 10911 } // namespace cc |
| OLD | NEW |