| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/layers/layer_position_constraint.h" | 5 #include "cc/layers/layer_position_constraint.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "cc/layers/layer.h" | 9 #include "cc/layers/layer.h" |
| 10 #include "cc/layers/layer_impl.h" | 10 #include "cc/layers/layer_impl.h" |
| 11 #include "cc/layers/layer_settings.h" | |
| 12 #include "cc/proto/layer_position_constraint.pb.h" | 11 #include "cc/proto/layer_position_constraint.pb.h" |
| 13 #include "cc/test/fake_layer_tree_host.h" | 12 #include "cc/test/fake_layer_tree_host.h" |
| 14 #include "cc/test/fake_proxy.h" | 13 #include "cc/test/fake_proxy.h" |
| 15 #include "cc/test/geometry_test_utils.h" | 14 #include "cc/test/geometry_test_utils.h" |
| 16 #include "cc/test/test_task_graph_runner.h" | 15 #include "cc/test/test_task_graph_runner.h" |
| 17 #include "cc/trees/layer_tree_host_common.h" | 16 #include "cc/trees/layer_tree_host_common.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 18 |
| 20 namespace cc { | 19 namespace cc { |
| 21 namespace { | 20 namespace { |
| 22 | 21 |
| 23 class LayerWithForcedDrawsContent : public Layer { | 22 class LayerWithForcedDrawsContent : public Layer { |
| 24 public: | 23 public: |
| 25 explicit LayerWithForcedDrawsContent(const LayerSettings& settings) | 24 LayerWithForcedDrawsContent() {} |
| 26 : Layer(settings) {} | |
| 27 | 25 |
| 28 bool DrawsContent() const override; | 26 bool DrawsContent() const override; |
| 29 | 27 |
| 30 private: | 28 private: |
| 31 ~LayerWithForcedDrawsContent() override {} | 29 ~LayerWithForcedDrawsContent() override {} |
| 32 }; | 30 }; |
| 33 | 31 |
| 34 bool LayerWithForcedDrawsContent::DrawsContent() const { | 32 bool LayerWithForcedDrawsContent::DrawsContent() const { |
| 35 return true; | 33 return true; |
| 36 } | 34 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 CreateTreeForTest(); | 79 CreateTreeForTest(); |
| 82 fixed_to_top_left_.set_is_fixed_position(true); | 80 fixed_to_top_left_.set_is_fixed_position(true); |
| 83 fixed_to_bottom_right_.set_is_fixed_position(true); | 81 fixed_to_bottom_right_.set_is_fixed_position(true); |
| 84 fixed_to_bottom_right_.set_is_fixed_to_right_edge(true); | 82 fixed_to_bottom_right_.set_is_fixed_to_right_edge(true); |
| 85 fixed_to_bottom_right_.set_is_fixed_to_bottom_edge(true); | 83 fixed_to_bottom_right_.set_is_fixed_to_bottom_edge(true); |
| 86 } | 84 } |
| 87 | 85 |
| 88 void CreateTreeForTest() { | 86 void CreateTreeForTest() { |
| 89 // scroll_layer_ is the inner viewport scroll layer and child_ is the outer | 87 // scroll_layer_ is the inner viewport scroll layer and child_ is the outer |
| 90 // viewport scroll layer. | 88 // viewport scroll layer. |
| 91 root_ = Layer::Create(layer_settings_); | 89 root_ = Layer::Create(); |
| 92 inner_viewport_container_layer_ = Layer::Create(layer_settings_); | 90 inner_viewport_container_layer_ = Layer::Create(); |
| 93 scroll_layer_ = Layer::Create(layer_settings_); | 91 scroll_layer_ = Layer::Create(); |
| 94 outer_viewport_container_layer_ = Layer::Create(layer_settings_); | 92 outer_viewport_container_layer_ = Layer::Create(); |
| 95 child_transform_layer_ = Layer::Create(layer_settings_); | 93 child_transform_layer_ = Layer::Create(); |
| 96 child_ = Layer::Create(layer_settings_); | 94 child_ = Layer::Create(); |
| 97 grand_child_ = | 95 grand_child_ = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
| 98 make_scoped_refptr(new LayerWithForcedDrawsContent(layer_settings_)); | 96 great_grand_child_ = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
| 99 great_grand_child_ = | |
| 100 make_scoped_refptr(new LayerWithForcedDrawsContent(layer_settings_)); | |
| 101 | 97 |
| 102 gfx::Transform IdentityMatrix; | 98 gfx::Transform IdentityMatrix; |
| 103 gfx::Point3F transform_origin; | 99 gfx::Point3F transform_origin; |
| 104 gfx::PointF position; | 100 gfx::PointF position; |
| 105 gfx::Size bounds(200, 200); | 101 gfx::Size bounds(200, 200); |
| 106 gfx::Size clip_bounds(100, 100); | 102 gfx::Size clip_bounds(100, 100); |
| 107 SetLayerPropertiesForTesting(inner_viewport_container_layer_.get(), | 103 SetLayerPropertiesForTesting(inner_viewport_container_layer_.get(), |
| 108 IdentityMatrix, transform_origin, position, | 104 IdentityMatrix, transform_origin, position, |
| 109 clip_bounds, true); | 105 clip_bounds, true); |
| 110 SetLayerPropertiesForTesting(scroll_layer_.get(), IdentityMatrix, | 106 SetLayerPropertiesForTesting(scroll_layer_.get(), IdentityMatrix, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 outer_viewport_container_layer_impl_->children()[0].get(); | 164 outer_viewport_container_layer_impl_->children()[0].get(); |
| 169 child_impl_ = child_transform_layer_impl_->children()[0].get(); | 165 child_impl_ = child_transform_layer_impl_->children()[0].get(); |
| 170 grand_child_impl_ = child_impl_->children()[0].get(); | 166 grand_child_impl_ = child_impl_->children()[0].get(); |
| 171 great_grand_child_impl_ = grand_child_impl_->children()[0].get(); | 167 great_grand_child_impl_ = grand_child_impl_->children()[0].get(); |
| 172 } | 168 } |
| 173 | 169 |
| 174 protected: | 170 protected: |
| 175 FakeLayerTreeHostClient fake_client_; | 171 FakeLayerTreeHostClient fake_client_; |
| 176 TestTaskGraphRunner task_graph_runner_; | 172 TestTaskGraphRunner task_graph_runner_; |
| 177 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; | 173 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; |
| 178 LayerSettings layer_settings_; | |
| 179 scoped_refptr<Layer> root_; | 174 scoped_refptr<Layer> root_; |
| 180 scoped_refptr<Layer> inner_viewport_container_layer_; | 175 scoped_refptr<Layer> inner_viewport_container_layer_; |
| 181 scoped_refptr<Layer> scroll_layer_; | 176 scoped_refptr<Layer> scroll_layer_; |
| 182 scoped_refptr<Layer> outer_viewport_container_layer_; | 177 scoped_refptr<Layer> outer_viewport_container_layer_; |
| 183 scoped_refptr<Layer> child_transform_layer_; | 178 scoped_refptr<Layer> child_transform_layer_; |
| 184 scoped_refptr<Layer> child_; | 179 scoped_refptr<Layer> child_; |
| 185 scoped_refptr<Layer> grand_child_; | 180 scoped_refptr<Layer> grand_child_; |
| 186 scoped_refptr<Layer> great_grand_child_; | 181 scoped_refptr<Layer> great_grand_child_; |
| 187 LayerImpl* root_impl_; | 182 LayerImpl* root_impl_; |
| 188 LayerImpl* inner_viewport_container_layer_impl_; | 183 LayerImpl* inner_viewport_container_layer_impl_; |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 TEST_F(LayerPositionConstraintTest, | 542 TEST_F(LayerPositionConstraintTest, |
| 548 ScrollCompensationForFixedPositionLayerWithMultipleIntermediateSurfaces) { | 543 ScrollCompensationForFixedPositionLayerWithMultipleIntermediateSurfaces) { |
| 549 // This test checks for correct scroll compensation when the fixed-position | 544 // This test checks for correct scroll compensation when the fixed-position |
| 550 // container contributes to a different render surface than the fixed-position | 545 // container contributes to a different render surface than the fixed-position |
| 551 // layer, with additional render surfaces in-between. This checks that the | 546 // layer, with additional render surfaces in-between. This checks that the |
| 552 // conversion to ancestor surfaces is accumulated properly in the final matrix | 547 // conversion to ancestor surfaces is accumulated properly in the final matrix |
| 553 // transform. | 548 // transform. |
| 554 | 549 |
| 555 // Add one more layer to the test tree for this scenario. | 550 // Add one more layer to the test tree for this scenario. |
| 556 scoped_refptr<Layer> fixed_position_child = | 551 scoped_refptr<Layer> fixed_position_child = |
| 557 make_scoped_refptr(new LayerWithForcedDrawsContent(layer_settings_)); | 552 make_scoped_refptr(new LayerWithForcedDrawsContent()); |
| 558 SetLayerPropertiesForTesting(fixed_position_child.get(), gfx::Transform(), | 553 SetLayerPropertiesForTesting(fixed_position_child.get(), gfx::Transform(), |
| 559 gfx::Point3F(), gfx::PointF(), | 554 gfx::Point3F(), gfx::PointF(), |
| 560 gfx::Size(100, 100), true); | 555 gfx::Size(100, 100), true); |
| 561 great_grand_child_->AddChild(fixed_position_child); | 556 great_grand_child_->AddChild(fixed_position_child); |
| 562 | 557 |
| 563 // Actually set up the scenario here. | 558 // Actually set up the scenario here. |
| 564 child_->SetIsContainerForFixedPositionLayers(true); | 559 child_->SetIsContainerForFixedPositionLayers(true); |
| 565 grand_child_->SetPosition(gfx::PointF(8.f, 6.f)); | 560 grand_child_->SetPosition(gfx::PointF(8.f, 6.f)); |
| 566 grand_child_->SetForceRenderSurface(true); | 561 grand_child_->SetForceRenderSurface(true); |
| 567 great_grand_child_->SetPosition(gfx::PointF(40.f, 60.f)); | 562 great_grand_child_->SetPosition(gfx::PointF(40.f, 60.f)); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 LayerPositionConstraintTest, | 699 LayerPositionConstraintTest, |
| 705 ScrollCompensationForFixedPositionLayerWithMultipleSurfacesAndTransforms) { | 700 ScrollCompensationForFixedPositionLayerWithMultipleSurfacesAndTransforms) { |
| 706 // This test checks for correct scroll compensation when the fixed-position | 701 // This test checks for correct scroll compensation when the fixed-position |
| 707 // container contributes to a different render surface than the fixed-position | 702 // container contributes to a different render surface than the fixed-position |
| 708 // layer, with additional render surfaces in-between, and the fixed-position | 703 // layer, with additional render surfaces in-between, and the fixed-position |
| 709 // container is transformed. This checks that the conversion to ancestor | 704 // container is transformed. This checks that the conversion to ancestor |
| 710 // surfaces is accumulated properly in the final matrix transform. | 705 // surfaces is accumulated properly in the final matrix transform. |
| 711 | 706 |
| 712 // Add one more layer to the test tree for this scenario. | 707 // Add one more layer to the test tree for this scenario. |
| 713 scoped_refptr<Layer> fixed_position_child = | 708 scoped_refptr<Layer> fixed_position_child = |
| 714 make_scoped_refptr(new LayerWithForcedDrawsContent(layer_settings_)); | 709 make_scoped_refptr(new LayerWithForcedDrawsContent()); |
| 715 SetLayerPropertiesForTesting(fixed_position_child.get(), gfx::Transform(), | 710 SetLayerPropertiesForTesting(fixed_position_child.get(), gfx::Transform(), |
| 716 gfx::Point3F(), gfx::PointF(), | 711 gfx::Point3F(), gfx::PointF(), |
| 717 gfx::Size(100, 100), true); | 712 gfx::Size(100, 100), true); |
| 718 great_grand_child_->AddChild(fixed_position_child); | 713 great_grand_child_->AddChild(fixed_position_child); |
| 719 | 714 |
| 720 // Actually set up the scenario here. | 715 // Actually set up the scenario here. |
| 721 child_transform_layer_->SetIsContainerForFixedPositionLayers(true); | 716 child_transform_layer_->SetIsContainerForFixedPositionLayers(true); |
| 722 grand_child_->SetPosition(gfx::PointF(8.f, 6.f)); | 717 grand_child_->SetPosition(gfx::PointF(8.f, 6.f)); |
| 723 grand_child_->SetForceRenderSurface(true); | 718 grand_child_->SetForceRenderSurface(true); |
| 724 great_grand_child_->SetPosition(gfx::PointF(40.f, 60.f)); | 719 great_grand_child_->SetPosition(gfx::PointF(40.f, 60.f)); |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 | 1031 |
| 1037 TEST_F(LayerPositionConstraintTest, | 1032 TEST_F(LayerPositionConstraintTest, |
| 1038 ScrollCompensationForFixedWithinFixedWithInterveningContainer) { | 1033 ScrollCompensationForFixedWithinFixedWithInterveningContainer) { |
| 1039 // This test checks scroll compensation for a fixed-position layer that is | 1034 // This test checks scroll compensation for a fixed-position layer that is |
| 1040 // inside of another fixed-position layer, but they have different fixed | 1035 // inside of another fixed-position layer, but they have different fixed |
| 1041 // position containers. In this situation, the child fixed-position element | 1036 // position containers. In this situation, the child fixed-position element |
| 1042 // would still have to compensate with respect to its container. | 1037 // would still have to compensate with respect to its container. |
| 1043 | 1038 |
| 1044 // Add one more layer to the hierarchy for this test. | 1039 // Add one more layer to the hierarchy for this test. |
| 1045 scoped_refptr<Layer> great_great_grand_child = | 1040 scoped_refptr<Layer> great_great_grand_child = |
| 1046 make_scoped_refptr(new LayerWithForcedDrawsContent(layer_settings_)); | 1041 make_scoped_refptr(new LayerWithForcedDrawsContent()); |
| 1047 great_grand_child_->AddChild(great_great_grand_child); | 1042 great_grand_child_->AddChild(great_great_grand_child); |
| 1048 | 1043 |
| 1049 child_->SetIsContainerForFixedPositionLayers(true); | 1044 child_->SetIsContainerForFixedPositionLayers(true); |
| 1050 grand_child_->SetPositionConstraint(fixed_to_top_left_); | 1045 grand_child_->SetPositionConstraint(fixed_to_top_left_); |
| 1051 great_grand_child_->SetIsContainerForFixedPositionLayers(true); | 1046 great_grand_child_->SetIsContainerForFixedPositionLayers(true); |
| 1052 great_grand_child_->SetScrollClipLayerId(root_->id()); | 1047 great_grand_child_->SetScrollClipLayerId(root_->id()); |
| 1053 great_great_grand_child->SetPositionConstraint(fixed_to_top_left_); | 1048 great_great_grand_child->SetPositionConstraint(fixed_to_top_left_); |
| 1054 | 1049 |
| 1055 CommitAndUpdateImplPointers(); | 1050 CommitAndUpdateImplPointers(); |
| 1056 | 1051 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1089 | 1084 |
| 1090 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_fixed_to_container2_transform, | 1085 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_fixed_to_container2_transform, |
| 1091 fixed_to_container2->DrawTransform()); | 1086 fixed_to_container2->DrawTransform()); |
| 1092 } | 1087 } |
| 1093 | 1088 |
| 1094 TEST_F(LayerPositionConstraintTest, | 1089 TEST_F(LayerPositionConstraintTest, |
| 1095 ScrollCompensationForInnerViewportBoundsDelta) { | 1090 ScrollCompensationForInnerViewportBoundsDelta) { |
| 1096 // This test checks for correct scroll compensation when the fixed-position | 1091 // This test checks for correct scroll compensation when the fixed-position |
| 1097 // container is the inner viewport scroll layer and has non-zero bounds delta. | 1092 // container is the inner viewport scroll layer and has non-zero bounds delta. |
| 1098 scoped_refptr<Layer> fixed_child = | 1093 scoped_refptr<Layer> fixed_child = |
| 1099 make_scoped_refptr(new LayerWithForcedDrawsContent(layer_settings_)); | 1094 make_scoped_refptr(new LayerWithForcedDrawsContent()); |
| 1100 fixed_child->SetBounds(gfx::Size(300, 300)); | 1095 fixed_child->SetBounds(gfx::Size(300, 300)); |
| 1101 scroll_layer_->AddChild(fixed_child); | 1096 scroll_layer_->AddChild(fixed_child); |
| 1102 fixed_child->SetPositionConstraint(fixed_to_top_left_); | 1097 fixed_child->SetPositionConstraint(fixed_to_top_left_); |
| 1103 | 1098 |
| 1104 CommitAndUpdateImplPointers(); | 1099 CommitAndUpdateImplPointers(); |
| 1105 | 1100 |
| 1106 LayerImpl* fixed_child_impl = | 1101 LayerImpl* fixed_child_impl = |
| 1107 root_impl_->layer_tree_impl()->FindActiveTreeLayerById(fixed_child->id()); | 1102 root_impl_->layer_tree_impl()->FindActiveTreeLayerById(fixed_child->id()); |
| 1108 | 1103 |
| 1109 // Case 1: fixed-container size delta of 20, 20 | 1104 // Case 1: fixed-container size delta of 20, 20 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1164 VerifySerializeAndDeserializeProto(true, false, true); | 1159 VerifySerializeAndDeserializeProto(true, false, true); |
| 1165 VerifySerializeAndDeserializeProto(true, false, false); | 1160 VerifySerializeAndDeserializeProto(true, false, false); |
| 1166 VerifySerializeAndDeserializeProto(false, true, true); | 1161 VerifySerializeAndDeserializeProto(false, true, true); |
| 1167 VerifySerializeAndDeserializeProto(false, true, false); | 1162 VerifySerializeAndDeserializeProto(false, true, false); |
| 1168 VerifySerializeAndDeserializeProto(false, false, true); | 1163 VerifySerializeAndDeserializeProto(false, false, true); |
| 1169 VerifySerializeAndDeserializeProto(false, false, false); | 1164 VerifySerializeAndDeserializeProto(false, false, false); |
| 1170 } | 1165 } |
| 1171 | 1166 |
| 1172 } // namespace | 1167 } // namespace |
| 1173 } // namespace cc | 1168 } // namespace cc |
| OLD | NEW |