| 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "CCLayerTreeHostCommon.h" | 7 #include "CCLayerTreeHostCommon.h" |
| 8 | 8 |
| 9 #include "CCAnimationTestCommon.h" | 9 #include "CCAnimationTestCommon.h" |
| 10 #include "CCGeometryTestUtils.h" | 10 #include "CCGeometryTestUtils.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 ret.setM13(0); | 83 ret.setM13(0); |
| 84 ret.setM23(0); | 84 ret.setM23(0); |
| 85 ret.setM31(0); | 85 ret.setM31(0); |
| 86 ret.setM32(0); | 86 ret.setM32(0); |
| 87 ret.setM33(1); | 87 ret.setM33(1); |
| 88 ret.setM34(0); | 88 ret.setM34(0); |
| 89 ret.setM43(0); | 89 ret.setM43(0); |
| 90 return ret; | 90 return ret; |
| 91 } | 91 } |
| 92 | 92 |
| 93 PassOwnPtr<CCLayerImpl> createTreeForFixedPositionTests() | 93 scoped_ptr<CCLayerImpl> createTreeForFixedPositionTests() |
| 94 { | 94 { |
| 95 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 95 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 96 OwnPtr<CCLayerImpl> child = CCLayerImpl::create(2); | 96 scoped_ptr<CCLayerImpl> child = CCLayerImpl::create(2); |
| 97 OwnPtr<CCLayerImpl> grandChild = CCLayerImpl::create(3); | 97 scoped_ptr<CCLayerImpl> grandChild = CCLayerImpl::create(3); |
| 98 OwnPtr<CCLayerImpl> greatGrandChild = CCLayerImpl::create(4); | 98 scoped_ptr<CCLayerImpl> greatGrandChild = CCLayerImpl::create(4); |
| 99 | 99 |
| 100 WebTransformationMatrix IdentityMatrix; | 100 WebTransformationMatrix IdentityMatrix; |
| 101 FloatPoint anchor(0, 0); | 101 FloatPoint anchor(0, 0); |
| 102 FloatPoint position(0, 0); | 102 FloatPoint position(0, 0); |
| 103 IntSize bounds(100, 100); | 103 IntSize bounds(100, 100); |
| 104 setLayerPropertiesForTesting(root.get(), IdentityMatrix, IdentityMatrix, anc
hor, position, bounds, false); | 104 setLayerPropertiesForTesting(root.get(), IdentityMatrix, IdentityMatrix, anc
hor, position, bounds, false); |
| 105 setLayerPropertiesForTesting(child.get(), IdentityMatrix, IdentityMatrix, an
chor, position, bounds, false); | 105 setLayerPropertiesForTesting(child.get(), IdentityMatrix, IdentityMatrix, an
chor, position, bounds, false); |
| 106 setLayerPropertiesForTesting(grandChild.get(), IdentityMatrix, IdentityMatri
x, anchor, position, bounds, false); | 106 setLayerPropertiesForTesting(grandChild.get(), IdentityMatrix, IdentityMatri
x, anchor, position, bounds, false); |
| 107 setLayerPropertiesForTesting(greatGrandChild.get(), IdentityMatrix, Identity
Matrix, anchor, position, bounds, false); | 107 setLayerPropertiesForTesting(greatGrandChild.get(), IdentityMatrix, Identity
Matrix, anchor, position, bounds, false); |
| 108 | 108 |
| 109 grandChild->addChild(greatGrandChild.release()); | 109 grandChild->addChild(greatGrandChild.Pass()); |
| 110 child->addChild(grandChild.release()); | 110 child->addChild(grandChild.Pass()); |
| 111 root->addChild(child.release()); | 111 root->addChild(child.Pass()); |
| 112 | 112 |
| 113 return root.release(); | 113 return root.Pass(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 class LayerChromiumWithForcedDrawsContent : public LayerChromium { | 116 class LayerChromiumWithForcedDrawsContent : public LayerChromium { |
| 117 public: | 117 public: |
| 118 LayerChromiumWithForcedDrawsContent() | 118 LayerChromiumWithForcedDrawsContent() |
| 119 : LayerChromium() | 119 : LayerChromium() |
| 120 { | 120 { |
| 121 } | 121 } |
| 122 | 122 |
| 123 virtual bool drawsContent() const OVERRIDE { return true; } | 123 virtual bool drawsContent() const OVERRIDE { return true; } |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 EXPECT_FALSE(renderSurface1->renderSurface()); | 756 EXPECT_FALSE(renderSurface1->renderSurface()); |
| 757 EXPECT_EQ(1U, renderSurfaceLayerList.size()); | 757 EXPECT_EQ(1U, renderSurfaceLayerList.size()); |
| 758 } | 758 } |
| 759 | 759 |
| 760 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hDirectContainer) | 760 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hDirectContainer) |
| 761 { | 761 { |
| 762 // This test checks for correct scroll compensation when the fixed-position
container | 762 // This test checks for correct scroll compensation when the fixed-position
container |
| 763 // is the direct parent of the fixed-position layer. | 763 // is the direct parent of the fixed-position layer. |
| 764 | 764 |
| 765 DebugScopedSetImplThread scopedImplThread; | 765 DebugScopedSetImplThread scopedImplThread; |
| 766 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 766 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 767 CCLayerImpl* child = root->children()[0]; | 767 CCLayerImpl* child = root->children()[0]; |
| 768 CCLayerImpl* grandChild = child->children()[0]; | 768 CCLayerImpl* grandChild = child->children()[0]; |
| 769 | 769 |
| 770 child->setIsContainerForFixedPositionLayers(true); | 770 child->setIsContainerForFixedPositionLayers(true); |
| 771 grandChild->setFixedToContainerLayer(true); | 771 grandChild->setFixedToContainerLayer(true); |
| 772 | 772 |
| 773 // Case 1: scrollDelta of 0, 0 | 773 // Case 1: scrollDelta of 0, 0 |
| 774 child->setScrollDelta(IntSize(0, 0)); | 774 child->setScrollDelta(IntSize(0, 0)); |
| 775 executeCalculateDrawTransformsAndVisibility(root.get()); | 775 executeCalculateDrawTransformsAndVisibility(root.get()); |
| 776 | 776 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 797 // This test checks for correct scroll compensation when the fixed-position
container | 797 // This test checks for correct scroll compensation when the fixed-position
container |
| 798 // is the direct parent of the fixed-position layer, but that container is t
ransformed. | 798 // is the direct parent of the fixed-position layer, but that container is t
ransformed. |
| 799 // In this case, the fixed position element inherits the container's transfo
rm, | 799 // In this case, the fixed position element inherits the container's transfo
rm, |
| 800 // but the scrollDelta that has to be undone should not be affected by that
transform. | 800 // but the scrollDelta that has to be undone should not be affected by that
transform. |
| 801 // | 801 // |
| 802 // Transforms are in general non-commutative; using something like a non-uni
form scale | 802 // Transforms are in general non-commutative; using something like a non-uni
form scale |
| 803 // helps to verify that translations and non-uniform scales are applied in t
he correct | 803 // helps to verify that translations and non-uniform scales are applied in t
he correct |
| 804 // order. | 804 // order. |
| 805 | 805 |
| 806 DebugScopedSetImplThread scopedImplThread; | 806 DebugScopedSetImplThread scopedImplThread; |
| 807 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 807 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 808 CCLayerImpl* child = root->children()[0]; | 808 CCLayerImpl* child = root->children()[0]; |
| 809 CCLayerImpl* grandChild = child->children()[0]; | 809 CCLayerImpl* grandChild = child->children()[0]; |
| 810 | 810 |
| 811 // This scale will cause child and grandChild to be effectively 200 x 800 wi
th respect to the renderTarget. | 811 // This scale will cause child and grandChild to be effectively 200 x 800 wi
th respect to the renderTarget. |
| 812 WebTransformationMatrix nonUniformScale; | 812 WebTransformationMatrix nonUniformScale; |
| 813 nonUniformScale.scaleNonUniform(2, 8); | 813 nonUniformScale.scaleNonUniform(2, 8); |
| 814 child->setTransform(nonUniformScale); | 814 child->setTransform(nonUniformScale); |
| 815 | 815 |
| 816 child->setIsContainerForFixedPositionLayers(true); | 816 child->setIsContainerForFixedPositionLayers(true); |
| 817 grandChild->setFixedToContainerLayer(true); | 817 grandChild->setFixedToContainerLayer(true); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 840 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 840 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
| 841 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 841 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
| 842 } | 842 } |
| 843 | 843 |
| 844 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hDistantContainer) | 844 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hDistantContainer) |
| 845 { | 845 { |
| 846 // This test checks for correct scroll compensation when the fixed-position
container | 846 // This test checks for correct scroll compensation when the fixed-position
container |
| 847 // is NOT the direct parent of the fixed-position layer. | 847 // is NOT the direct parent of the fixed-position layer. |
| 848 DebugScopedSetImplThread scopedImplThread; | 848 DebugScopedSetImplThread scopedImplThread; |
| 849 | 849 |
| 850 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 850 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 851 CCLayerImpl* child = root->children()[0]; | 851 CCLayerImpl* child = root->children()[0]; |
| 852 CCLayerImpl* grandChild = child->children()[0]; | 852 CCLayerImpl* grandChild = child->children()[0]; |
| 853 CCLayerImpl* greatGrandChild = grandChild->children()[0]; | 853 CCLayerImpl* greatGrandChild = grandChild->children()[0]; |
| 854 | 854 |
| 855 child->setIsContainerForFixedPositionLayers(true); | 855 child->setIsContainerForFixedPositionLayers(true); |
| 856 grandChild->setPosition(FloatPoint(8, 6)); | 856 grandChild->setPosition(FloatPoint(8, 6)); |
| 857 greatGrandChild->setFixedToContainerLayer(true); | 857 greatGrandChild->setFixedToContainerLayer(true); |
| 858 | 858 |
| 859 // Case 1: scrollDelta of 0, 0 | 859 // Case 1: scrollDelta of 0, 0 |
| 860 child->setScrollDelta(IntSize(0, 0)); | 860 child->setScrollDelta(IntSize(0, 0)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 884 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 884 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
| 885 } | 885 } |
| 886 | 886 |
| 887 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hDistantContainerAndTransforms) | 887 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hDistantContainerAndTransforms) |
| 888 { | 888 { |
| 889 // This test checks for correct scroll compensation when the fixed-position
container | 889 // This test checks for correct scroll compensation when the fixed-position
container |
| 890 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various | 890 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various |
| 891 // transforms that have to be processed in the correct order. | 891 // transforms that have to be processed in the correct order. |
| 892 DebugScopedSetImplThread scopedImplThread; | 892 DebugScopedSetImplThread scopedImplThread; |
| 893 | 893 |
| 894 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 894 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 895 CCLayerImpl* child = root->children()[0]; | 895 CCLayerImpl* child = root->children()[0]; |
| 896 CCLayerImpl* grandChild = child->children()[0]; | 896 CCLayerImpl* grandChild = child->children()[0]; |
| 897 CCLayerImpl* greatGrandChild = grandChild->children()[0]; | 897 CCLayerImpl* greatGrandChild = grandChild->children()[0]; |
| 898 | 898 |
| 899 WebTransformationMatrix rotationAboutZ; | 899 WebTransformationMatrix rotationAboutZ; |
| 900 rotationAboutZ.rotate3d(0, 0, 90); | 900 rotationAboutZ.rotate3d(0, 0, 90); |
| 901 | 901 |
| 902 child->setIsContainerForFixedPositionLayers(true); | 902 child->setIsContainerForFixedPositionLayers(true); |
| 903 child->setTransform(rotationAboutZ); | 903 child->setTransform(rotationAboutZ); |
| 904 grandChild->setPosition(FloatPoint(8, 6)); | 904 grandChild->setPosition(FloatPoint(8, 6)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hMultipleScrollDeltas) | 946 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hMultipleScrollDeltas) |
| 947 { | 947 { |
| 948 // This test checks for correct scroll compensation when the fixed-position
container | 948 // This test checks for correct scroll compensation when the fixed-position
container |
| 949 // has multiple ancestors that have nonzero scrollDelta before reaching the
space where the layer is fixed. | 949 // has multiple ancestors that have nonzero scrollDelta before reaching the
space where the layer is fixed. |
| 950 // In this test, each scrollDelta occurs in a different space because of eac
h layer's local transform. | 950 // In this test, each scrollDelta occurs in a different space because of eac
h layer's local transform. |
| 951 // This test checks for correct scroll compensation when the fixed-position
container | 951 // This test checks for correct scroll compensation when the fixed-position
container |
| 952 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various | 952 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various |
| 953 // transforms that have to be processed in the correct order. | 953 // transforms that have to be processed in the correct order. |
| 954 DebugScopedSetImplThread scopedImplThread; | 954 DebugScopedSetImplThread scopedImplThread; |
| 955 | 955 |
| 956 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 956 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 957 CCLayerImpl* child = root->children()[0]; | 957 CCLayerImpl* child = root->children()[0]; |
| 958 CCLayerImpl* grandChild = child->children()[0]; | 958 CCLayerImpl* grandChild = child->children()[0]; |
| 959 CCLayerImpl* greatGrandChild = grandChild->children()[0]; | 959 CCLayerImpl* greatGrandChild = grandChild->children()[0]; |
| 960 | 960 |
| 961 WebTransformationMatrix rotationAboutZ; | 961 WebTransformationMatrix rotationAboutZ; |
| 962 rotationAboutZ.rotate3d(0, 0, 90); | 962 rotationAboutZ.rotate3d(0, 0, 90); |
| 963 | 963 |
| 964 child->setIsContainerForFixedPositionLayers(true); | 964 child->setIsContainerForFixedPositionLayers(true); |
| 965 child->setTransform(rotationAboutZ); | 965 child->setTransform(rotationAboutZ); |
| 966 grandChild->setPosition(FloatPoint(8, 6)); | 966 grandChild->setPosition(FloatPoint(8, 6)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 } | 1008 } |
| 1009 | 1009 |
| 1010 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hIntermediateSurfaceAndTransforms) | 1010 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hIntermediateSurfaceAndTransforms) |
| 1011 { | 1011 { |
| 1012 // This test checks for correct scroll compensation when the fixed-position
container | 1012 // This test checks for correct scroll compensation when the fixed-position
container |
| 1013 // contributes to a different renderSurface than the fixed-position layer. I
n this | 1013 // contributes to a different renderSurface than the fixed-position layer. I
n this |
| 1014 // case, the surface drawTransforms also have to be accounted for when check
ing the | 1014 // case, the surface drawTransforms also have to be accounted for when check
ing the |
| 1015 // scrollDelta. | 1015 // scrollDelta. |
| 1016 DebugScopedSetImplThread scopedImplThread; | 1016 DebugScopedSetImplThread scopedImplThread; |
| 1017 | 1017 |
| 1018 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 1018 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 1019 CCLayerImpl* child = root->children()[0]; | 1019 CCLayerImpl* child = root->children()[0]; |
| 1020 CCLayerImpl* grandChild = child->children()[0]; | 1020 CCLayerImpl* grandChild = child->children()[0]; |
| 1021 CCLayerImpl* greatGrandChild = grandChild->children()[0]; | 1021 CCLayerImpl* greatGrandChild = grandChild->children()[0]; |
| 1022 | 1022 |
| 1023 child->setIsContainerForFixedPositionLayers(true); | 1023 child->setIsContainerForFixedPositionLayers(true); |
| 1024 grandChild->setPosition(FloatPoint(8, 6)); | 1024 grandChild->setPosition(FloatPoint(8, 6)); |
| 1025 grandChild->setForceRenderSurface(true); | 1025 grandChild->setForceRenderSurface(true); |
| 1026 greatGrandChild->setFixedToContainerLayer(true); | 1026 greatGrandChild->setFixedToContainerLayer(true); |
| 1027 greatGrandChild->setDrawsContent(true); | 1027 greatGrandChild->setDrawsContent(true); |
| 1028 | 1028 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1081 } | 1081 } |
| 1082 | 1082 |
| 1083 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hMultipleIntermediateSurfaces) | 1083 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hMultipleIntermediateSurfaces) |
| 1084 { | 1084 { |
| 1085 // This test checks for correct scroll compensation when the fixed-position
container | 1085 // This test checks for correct scroll compensation when the fixed-position
container |
| 1086 // contributes to a different renderSurface than the fixed-position layer, w
ith | 1086 // contributes to a different renderSurface than the fixed-position layer, w
ith |
| 1087 // additional renderSurfaces in-between. This checks that the conversion to
ancestor | 1087 // additional renderSurfaces in-between. This checks that the conversion to
ancestor |
| 1088 // surfaces is accumulated properly in the final matrix transform. | 1088 // surfaces is accumulated properly in the final matrix transform. |
| 1089 DebugScopedSetImplThread scopedImplThread; | 1089 DebugScopedSetImplThread scopedImplThread; |
| 1090 | 1090 |
| 1091 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 1091 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 1092 CCLayerImpl* child = root->children()[0]; | 1092 CCLayerImpl* child = root->children()[0]; |
| 1093 CCLayerImpl* grandChild = child->children()[0]; | 1093 CCLayerImpl* grandChild = child->children()[0]; |
| 1094 CCLayerImpl* greatGrandChild = grandChild->children()[0]; | 1094 CCLayerImpl* greatGrandChild = grandChild->children()[0]; |
| 1095 | 1095 |
| 1096 // Add one more layer to the test tree for this scenario. | 1096 // Add one more layer to the test tree for this scenario. |
| 1097 { | 1097 { |
| 1098 WebTransformationMatrix identity; | 1098 WebTransformationMatrix identity; |
| 1099 OwnPtr<CCLayerImpl> fixedPositionChild = CCLayerImpl::create(5); | 1099 scoped_ptr<CCLayerImpl> fixedPositionChild = CCLayerImpl::create(5); |
| 1100 setLayerPropertiesForTesting(fixedPositionChild.get(), identity, identit
y, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(100, 100), false); | 1100 setLayerPropertiesForTesting(fixedPositionChild.get(), identity, identit
y, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(100, 100), false); |
| 1101 greatGrandChild->addChild(fixedPositionChild.release()); | 1101 greatGrandChild->addChild(fixedPositionChild.Pass()); |
| 1102 } | 1102 } |
| 1103 CCLayerImpl* fixedPositionChild = greatGrandChild->children()[0]; | 1103 CCLayerImpl* fixedPositionChild = greatGrandChild->children()[0]; |
| 1104 | 1104 |
| 1105 // Actually set up the scenario here. | 1105 // Actually set up the scenario here. |
| 1106 child->setIsContainerForFixedPositionLayers(true); | 1106 child->setIsContainerForFixedPositionLayers(true); |
| 1107 grandChild->setPosition(FloatPoint(8, 6)); | 1107 grandChild->setPosition(FloatPoint(8, 6)); |
| 1108 grandChild->setForceRenderSurface(true); | 1108 grandChild->setForceRenderSurface(true); |
| 1109 greatGrandChild->setPosition(FloatPoint(40, 60)); | 1109 greatGrandChild->setPosition(FloatPoint(40, 60)); |
| 1110 greatGrandChild->setForceRenderSurface(true); | 1110 greatGrandChild->setForceRenderSurface(true); |
| 1111 fixedPositionChild->setFixedToContainerLayer(true); | 1111 fixedPositionChild->setFixedToContainerLayer(true); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 } | 1192 } |
| 1193 | 1193 |
| 1194 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hContainerLayerThatHasSurface) | 1194 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWit
hContainerLayerThatHasSurface) |
| 1195 { | 1195 { |
| 1196 // This test checks for correct scroll compensation when the fixed-position
container | 1196 // This test checks for correct scroll compensation when the fixed-position
container |
| 1197 // itself has a renderSurface. In this case, the container layer should be t
reated | 1197 // itself has a renderSurface. In this case, the container layer should be t
reated |
| 1198 // like a layer that contributes to a renderTarget, and that renderTarget | 1198 // like a layer that contributes to a renderTarget, and that renderTarget |
| 1199 // is completely irrelevant; it should not affect the scroll compensation. | 1199 // is completely irrelevant; it should not affect the scroll compensation. |
| 1200 DebugScopedSetImplThread scopedImplThread; | 1200 DebugScopedSetImplThread scopedImplThread; |
| 1201 | 1201 |
| 1202 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 1202 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 1203 CCLayerImpl* child = root->children()[0]; | 1203 CCLayerImpl* child = root->children()[0]; |
| 1204 CCLayerImpl* grandChild = child->children()[0]; | 1204 CCLayerImpl* grandChild = child->children()[0]; |
| 1205 | 1205 |
| 1206 child->setIsContainerForFixedPositionLayers(true); | 1206 child->setIsContainerForFixedPositionLayers(true); |
| 1207 child->setForceRenderSurface(true); | 1207 child->setForceRenderSurface(true); |
| 1208 grandChild->setFixedToContainerLayer(true); | 1208 grandChild->setFixedToContainerLayer(true); |
| 1209 grandChild->setDrawsContent(true); | 1209 grandChild->setDrawsContent(true); |
| 1210 | 1210 |
| 1211 // Case 1: scrollDelta of 0, 0 | 1211 // Case 1: scrollDelta of 0, 0 |
| 1212 child->setScrollDelta(IntSize(0, 0)); | 1212 child->setScrollDelta(IntSize(0, 0)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1239 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1239 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
| 1240 } | 1240 } |
| 1241 | 1241 |
| 1242 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerTha
tIsAlsoFixedPositionContainer) | 1242 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerTha
tIsAlsoFixedPositionContainer) |
| 1243 { | 1243 { |
| 1244 // This test checks the scenario where a fixed-position layer also happens t
o be a | 1244 // This test checks the scenario where a fixed-position layer also happens t
o be a |
| 1245 // container itself for a descendant fixed position layer. In particular, th
e layer | 1245 // container itself for a descendant fixed position layer. In particular, th
e layer |
| 1246 // should not accidentally be fixed to itself. | 1246 // should not accidentally be fixed to itself. |
| 1247 DebugScopedSetImplThread scopedImplThread; | 1247 DebugScopedSetImplThread scopedImplThread; |
| 1248 | 1248 |
| 1249 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 1249 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 1250 CCLayerImpl* child = root->children()[0]; | 1250 CCLayerImpl* child = root->children()[0]; |
| 1251 CCLayerImpl* grandChild = child->children()[0]; | 1251 CCLayerImpl* grandChild = child->children()[0]; |
| 1252 | 1252 |
| 1253 child->setIsContainerForFixedPositionLayers(true); | 1253 child->setIsContainerForFixedPositionLayers(true); |
| 1254 grandChild->setFixedToContainerLayer(true); | 1254 grandChild->setFixedToContainerLayer(true); |
| 1255 | 1255 |
| 1256 // This should not confuse the grandChild. If correct, the grandChild would
still be considered fixed to its container (i.e. "child"). | 1256 // This should not confuse the grandChild. If correct, the grandChild would
still be considered fixed to its container (i.e. "child"). |
| 1257 grandChild->setIsContainerForFixedPositionLayers(true); | 1257 grandChild->setIsContainerForFixedPositionLayers(true); |
| 1258 | 1258 |
| 1259 // Case 1: scrollDelta of 0, 0 | 1259 // Case 1: scrollDelta of 0, 0 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1276 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1276 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
| 1277 } | 1277 } |
| 1278 | 1278 |
| 1279 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerTha
tHasNoContainer) | 1279 TEST(CCLayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerTha
tHasNoContainer) |
| 1280 { | 1280 { |
| 1281 // This test checks scroll compensation when a fixed-position layer does not
find any | 1281 // This test checks scroll compensation when a fixed-position layer does not
find any |
| 1282 // ancestor that is a "containerForFixedPositionLayers". In this situation,
the layer should | 1282 // ancestor that is a "containerForFixedPositionLayers". In this situation,
the layer should |
| 1283 // be fixed to the viewport -- not the rootLayer, which may have transforms
of its own. | 1283 // be fixed to the viewport -- not the rootLayer, which may have transforms
of its own. |
| 1284 DebugScopedSetImplThread scopedImplThread; | 1284 DebugScopedSetImplThread scopedImplThread; |
| 1285 | 1285 |
| 1286 OwnPtr<CCLayerImpl> root = createTreeForFixedPositionTests(); | 1286 scoped_ptr<CCLayerImpl> root = createTreeForFixedPositionTests(); |
| 1287 CCLayerImpl* child = root->children()[0]; | 1287 CCLayerImpl* child = root->children()[0]; |
| 1288 CCLayerImpl* grandChild = child->children()[0]; | 1288 CCLayerImpl* grandChild = child->children()[0]; |
| 1289 | 1289 |
| 1290 WebTransformationMatrix rotationByZ; | 1290 WebTransformationMatrix rotationByZ; |
| 1291 rotationByZ.rotate3d(0, 0, 90); | 1291 rotationByZ.rotate3d(0, 0, 90); |
| 1292 | 1292 |
| 1293 root->setTransform(rotationByZ); | 1293 root->setTransform(rotationByZ); |
| 1294 grandChild->setFixedToContainerLayer(true); | 1294 grandChild->setFixedToContainerLayer(true); |
| 1295 | 1295 |
| 1296 // Case 1: root scrollDelta of 0, 0 | 1296 // Case 1: root scrollDelta of 0, 0 |
| (...skipping 1367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2664 | 2664 |
| 2665 testPoint = IntPoint(10, 20); | 2665 testPoint = IntPoint(10, 20); |
| 2666 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); | 2666 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); |
| 2667 EXPECT_FALSE(resultLayer); | 2667 EXPECT_FALSE(resultLayer); |
| 2668 } | 2668 } |
| 2669 | 2669 |
| 2670 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleLayer) | 2670 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleLayer) |
| 2671 { | 2671 { |
| 2672 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2672 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2673 | 2673 |
| 2674 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(12345); | 2674 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(12345); |
| 2675 | 2675 |
| 2676 WebTransformationMatrix identityMatrix; | 2676 WebTransformationMatrix identityMatrix; |
| 2677 FloatPoint anchor(0, 0); | 2677 FloatPoint anchor(0, 0); |
| 2678 FloatPoint position(0, 0); | 2678 FloatPoint position(0, 0); |
| 2679 IntSize bounds(100, 100); | 2679 IntSize bounds(100, 100); |
| 2680 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 2680 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 2681 root->setDrawsContent(true); | 2681 root->setDrawsContent(true); |
| 2682 | 2682 |
| 2683 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 2683 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 2684 int dummyMaxTextureSize = 512; | 2684 int dummyMaxTextureSize = 512; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2706 testPoint = IntPoint(99, 99); | 2706 testPoint = IntPoint(99, 99); |
| 2707 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); | 2707 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); |
| 2708 ASSERT_TRUE(resultLayer); | 2708 ASSERT_TRUE(resultLayer); |
| 2709 EXPECT_EQ(12345, resultLayer->id()); | 2709 EXPECT_EQ(12345, resultLayer->id()); |
| 2710 } | 2710 } |
| 2711 | 2711 |
| 2712 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) | 2712 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) |
| 2713 { | 2713 { |
| 2714 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2714 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2715 | 2715 |
| 2716 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(12345); | 2716 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(12345); |
| 2717 | 2717 |
| 2718 WebTransformationMatrix uninvertibleTransform; | 2718 WebTransformationMatrix uninvertibleTransform; |
| 2719 uninvertibleTransform.setM11(0); | 2719 uninvertibleTransform.setM11(0); |
| 2720 uninvertibleTransform.setM22(0); | 2720 uninvertibleTransform.setM22(0); |
| 2721 uninvertibleTransform.setM33(0); | 2721 uninvertibleTransform.setM33(0); |
| 2722 uninvertibleTransform.setM44(0); | 2722 uninvertibleTransform.setM44(0); |
| 2723 ASSERT_FALSE(uninvertibleTransform.isInvertible()); | 2723 ASSERT_FALSE(uninvertibleTransform.isInvertible()); |
| 2724 | 2724 |
| 2725 WebTransformationMatrix identityMatrix; | 2725 WebTransformationMatrix identityMatrix; |
| 2726 FloatPoint anchor(0, 0); | 2726 FloatPoint anchor(0, 0); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2767 | 2767 |
| 2768 testPoint = IntPoint(-1, -1); | 2768 testPoint = IntPoint(-1, -1); |
| 2769 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); | 2769 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); |
| 2770 EXPECT_FALSE(resultLayer); | 2770 EXPECT_FALSE(resultLayer); |
| 2771 } | 2771 } |
| 2772 | 2772 |
| 2773 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) | 2773 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) |
| 2774 { | 2774 { |
| 2775 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2775 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2776 | 2776 |
| 2777 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(12345); | 2777 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(12345); |
| 2778 | 2778 |
| 2779 WebTransformationMatrix identityMatrix; | 2779 WebTransformationMatrix identityMatrix; |
| 2780 FloatPoint anchor(0, 0); | 2780 FloatPoint anchor(0, 0); |
| 2781 FloatPoint position(50, 50); // this layer is positioned, and hit testing sh
ould correctly know where the layer is located. | 2781 FloatPoint position(50, 50); // this layer is positioned, and hit testing sh
ould correctly know where the layer is located. |
| 2782 IntSize bounds(100, 100); | 2782 IntSize bounds(100, 100); |
| 2783 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 2783 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 2784 root->setDrawsContent(true); | 2784 root->setDrawsContent(true); |
| 2785 | 2785 |
| 2786 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 2786 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 2787 int dummyMaxTextureSize = 512; | 2787 int dummyMaxTextureSize = 512; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2810 testPoint = IntPoint(99, 99); | 2810 testPoint = IntPoint(99, 99); |
| 2811 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); | 2811 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); |
| 2812 ASSERT_TRUE(resultLayer); | 2812 ASSERT_TRUE(resultLayer); |
| 2813 EXPECT_EQ(12345, resultLayer->id()); | 2813 EXPECT_EQ(12345, resultLayer->id()); |
| 2814 } | 2814 } |
| 2815 | 2815 |
| 2816 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) | 2816 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) |
| 2817 { | 2817 { |
| 2818 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2818 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2819 | 2819 |
| 2820 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(12345); | 2820 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(12345); |
| 2821 | 2821 |
| 2822 WebTransformationMatrix identityMatrix; | 2822 WebTransformationMatrix identityMatrix; |
| 2823 WebTransformationMatrix rotation45DegreesAboutCenter; | 2823 WebTransformationMatrix rotation45DegreesAboutCenter; |
| 2824 rotation45DegreesAboutCenter.translate(50, 50); | 2824 rotation45DegreesAboutCenter.translate(50, 50); |
| 2825 rotation45DegreesAboutCenter.rotate3d(0, 0, 45); | 2825 rotation45DegreesAboutCenter.rotate3d(0, 0, 45); |
| 2826 rotation45DegreesAboutCenter.translate(-50, -50); | 2826 rotation45DegreesAboutCenter.translate(-50, -50); |
| 2827 FloatPoint anchor(0, 0); | 2827 FloatPoint anchor(0, 0); |
| 2828 FloatPoint position(0, 0); | 2828 FloatPoint position(0, 0); |
| 2829 IntSize bounds(100, 100); | 2829 IntSize bounds(100, 100); |
| 2830 setLayerPropertiesForTesting(root.get(), rotation45DegreesAboutCenter, ident
ityMatrix, anchor, position, bounds, false); | 2830 setLayerPropertiesForTesting(root.get(), rotation45DegreesAboutCenter, ident
ityMatrix, anchor, position, bounds, false); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2861 | 2861 |
| 2862 testPoint = IntPoint(-1, 50); | 2862 testPoint = IntPoint(-1, 50); |
| 2863 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); | 2863 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); |
| 2864 ASSERT_FALSE(resultLayer); | 2864 ASSERT_FALSE(resultLayer); |
| 2865 } | 2865 } |
| 2866 | 2866 |
| 2867 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) | 2867 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) |
| 2868 { | 2868 { |
| 2869 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2869 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2870 | 2870 |
| 2871 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(12345); | 2871 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(12345); |
| 2872 | 2872 |
| 2873 WebTransformationMatrix identityMatrix; | 2873 WebTransformationMatrix identityMatrix; |
| 2874 | 2874 |
| 2875 // perspectiveProjectionAboutCenter * translationByZ is designed so that the
100 x 100 layer becomes 50 x 50, and remains centered at (50, 50). | 2875 // perspectiveProjectionAboutCenter * translationByZ is designed so that the
100 x 100 layer becomes 50 x 50, and remains centered at (50, 50). |
| 2876 WebTransformationMatrix perspectiveProjectionAboutCenter; | 2876 WebTransformationMatrix perspectiveProjectionAboutCenter; |
| 2877 perspectiveProjectionAboutCenter.translate(50, 50); | 2877 perspectiveProjectionAboutCenter.translate(50, 50); |
| 2878 perspectiveProjectionAboutCenter.applyPerspective(1); | 2878 perspectiveProjectionAboutCenter.applyPerspective(1); |
| 2879 perspectiveProjectionAboutCenter.translate(-50, -50); | 2879 perspectiveProjectionAboutCenter.translate(-50, -50); |
| 2880 WebTransformationMatrix translationByZ; | 2880 WebTransformationMatrix translationByZ; |
| 2881 translationByZ.translate3d(0, 0, -1); | 2881 translationByZ.translate3d(0, 0, -1); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2923 // test makes sure that hit testing works correctly accounts for the content
s scale. | 2923 // test makes sure that hit testing works correctly accounts for the content
s scale. |
| 2924 // A contentsScale that is not 1 effectively forces a non-identity transform
between | 2924 // A contentsScale that is not 1 effectively forces a non-identity transform
between |
| 2925 // layer's content space and layer's origin space. The hit testing code must
take this into account. | 2925 // layer's content space and layer's origin space. The hit testing code must
take this into account. |
| 2926 // | 2926 // |
| 2927 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If | 2927 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If |
| 2928 // contentsScale is ignored, then hit testing will mis-interpret the visible
ContentRect | 2928 // contentsScale is ignored, then hit testing will mis-interpret the visible
ContentRect |
| 2929 // as being larger than the actual bounds of the layer. | 2929 // as being larger than the actual bounds of the layer. |
| 2930 // | 2930 // |
| 2931 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2931 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2932 | 2932 |
| 2933 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 2933 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 2934 | 2934 |
| 2935 WebTransformationMatrix identityMatrix; | 2935 WebTransformationMatrix identityMatrix; |
| 2936 FloatPoint anchor(0, 0); | 2936 FloatPoint anchor(0, 0); |
| 2937 | 2937 |
| 2938 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, FloatPoint(0, 0), IntSize(100, 100), false); | 2938 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, FloatPoint(0, 0), IntSize(100, 100), false); |
| 2939 | 2939 |
| 2940 { | 2940 { |
| 2941 FloatPoint position(25, 25); | 2941 FloatPoint position(25, 25); |
| 2942 IntSize bounds(50, 50); | 2942 IntSize bounds(50, 50); |
| 2943 OwnPtr<CCLayerImpl> testLayer = CCLayerImpl::create(12345); | 2943 scoped_ptr<CCLayerImpl> testLayer = CCLayerImpl::create(12345); |
| 2944 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 2944 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
| 2945 | 2945 |
| 2946 // override contentBounds | 2946 // override contentBounds |
| 2947 testLayer->setContentBounds(IntSize(100, 100)); | 2947 testLayer->setContentBounds(IntSize(100, 100)); |
| 2948 | 2948 |
| 2949 testLayer->setDrawsContent(true); | 2949 testLayer->setDrawsContent(true); |
| 2950 root->addChild(testLayer.release()); | 2950 root->addChild(testLayer.Pass()); |
| 2951 } | 2951 } |
| 2952 | 2952 |
| 2953 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 2953 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 2954 int dummyMaxTextureSize = 512; | 2954 int dummyMaxTextureSize = 512; |
| 2955 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 2955 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
| 2956 | 2956 |
| 2957 // Sanity check the scenario we just created. | 2957 // Sanity check the scenario we just created. |
| 2958 // The visibleContentRect for testLayer is actually 100x100, even though its
layout size is 50x50, positioned at 25x25. | 2958 // The visibleContentRect for testLayer is actually 100x100, even though its
layout size is 50x50, positioned at 25x25. |
| 2959 CCLayerImpl* testLayer = root->children()[0]; | 2959 CCLayerImpl* testLayer = root->children()[0]; |
| 2960 EXPECT_RECT_EQ(IntRect(IntPoint::zero(), IntSize(100, 100)), testLayer->visi
bleContentRect()); | 2960 EXPECT_RECT_EQ(IntRect(IntPoint::zero(), IntSize(100, 100)), testLayer->visi
bleContentRect()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2988 | 2988 |
| 2989 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) | 2989 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) |
| 2990 { | 2990 { |
| 2991 // Test that hit-testing will only work for the visible portion of a layer,
and not | 2991 // Test that hit-testing will only work for the visible portion of a layer,
and not |
| 2992 // the entire layer bounds. Here we just test the simple axis-aligned case. | 2992 // the entire layer bounds. Here we just test the simple axis-aligned case. |
| 2993 DebugScopedSetImplThread thisScopeIsOnImplThread; | 2993 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 2994 | 2994 |
| 2995 WebTransformationMatrix identityMatrix; | 2995 WebTransformationMatrix identityMatrix; |
| 2996 FloatPoint anchor(0, 0); | 2996 FloatPoint anchor(0, 0); |
| 2997 | 2997 |
| 2998 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 2998 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 2999 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, FloatPoint(0, 0), IntSize(100, 100), false); | 2999 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, FloatPoint(0, 0), IntSize(100, 100), false); |
| 3000 | 3000 |
| 3001 { | 3001 { |
| 3002 OwnPtr<CCLayerImpl> clippingLayer = CCLayerImpl::create(123); | 3002 scoped_ptr<CCLayerImpl> clippingLayer = CCLayerImpl::create(123); |
| 3003 FloatPoint position(25, 25); // this layer is positioned, and hit testin
g should correctly know where the layer is located. | 3003 FloatPoint position(25, 25); // this layer is positioned, and hit testin
g should correctly know where the layer is located. |
| 3004 IntSize bounds(50, 50); | 3004 IntSize bounds(50, 50); |
| 3005 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); | 3005 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); |
| 3006 clippingLayer->setMasksToBounds(true); | 3006 clippingLayer->setMasksToBounds(true); |
| 3007 | 3007 |
| 3008 OwnPtr<CCLayerImpl> child = CCLayerImpl::create(456); | 3008 scoped_ptr<CCLayerImpl> child = CCLayerImpl::create(456); |
| 3009 position = FloatPoint(-50, -50); | 3009 position = FloatPoint(-50, -50); |
| 3010 bounds = IntSize(300, 300); | 3010 bounds = IntSize(300, 300); |
| 3011 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3011 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3012 child->setDrawsContent(true); | 3012 child->setDrawsContent(true); |
| 3013 clippingLayer->addChild(child.release()); | 3013 clippingLayer->addChild(child.Pass()); |
| 3014 root->addChild(clippingLayer.release()); | 3014 root->addChild(clippingLayer.Pass()); |
| 3015 } | 3015 } |
| 3016 | 3016 |
| 3017 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 3017 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 3018 int dummyMaxTextureSize = 512; | 3018 int dummyMaxTextureSize = 512; |
| 3019 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3019 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
| 3020 | 3020 |
| 3021 // Sanity check the scenario we just created. | 3021 // Sanity check the scenario we just created. |
| 3022 ASSERT_EQ(1u, renderSurfaceLayerList.size()); | 3022 ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
| 3023 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); | 3023 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); |
| 3024 ASSERT_EQ(456, root->renderSurface()->layerList()[0]->id()); | 3024 ASSERT_EQ(456, root->renderSurface()->layerList()[0]->id()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3053 // algorithm needs to recognize that multiple parent layers may clip the lay
er, and | 3053 // algorithm needs to recognize that multiple parent layers may clip the lay
er, and |
| 3054 // should not actually hit those clipped areas. | 3054 // should not actually hit those clipped areas. |
| 3055 // | 3055 // |
| 3056 // The child and grandChild layers are both initialized to clip the rotatedL
eaf. The | 3056 // The child and grandChild layers are both initialized to clip the rotatedL
eaf. The |
| 3057 // child layer is rotated about the top-left corner, so that the root + chil
d clips | 3057 // child layer is rotated about the top-left corner, so that the root + chil
d clips |
| 3058 // combined create a triangle. The rotatedLeaf will only be visible where it
overlaps | 3058 // combined create a triangle. The rotatedLeaf will only be visible where it
overlaps |
| 3059 // this triangle. | 3059 // this triangle. |
| 3060 // | 3060 // |
| 3061 DebugScopedSetImplThread thisScopeIsOnImplThread; | 3061 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 3062 | 3062 |
| 3063 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(123); | 3063 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(123); |
| 3064 | 3064 |
| 3065 WebTransformationMatrix identityMatrix; | 3065 WebTransformationMatrix identityMatrix; |
| 3066 FloatPoint anchor(0, 0); | 3066 FloatPoint anchor(0, 0); |
| 3067 FloatPoint position(0, 0); | 3067 FloatPoint position(0, 0); |
| 3068 IntSize bounds(100, 100); | 3068 IntSize bounds(100, 100); |
| 3069 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3069 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3070 root->setMasksToBounds(true); | 3070 root->setMasksToBounds(true); |
| 3071 | 3071 |
| 3072 { | 3072 { |
| 3073 OwnPtr<CCLayerImpl> child = CCLayerImpl::create(456); | 3073 scoped_ptr<CCLayerImpl> child = CCLayerImpl::create(456); |
| 3074 OwnPtr<CCLayerImpl> grandChild = CCLayerImpl::create(789); | 3074 scoped_ptr<CCLayerImpl> grandChild = CCLayerImpl::create(789); |
| 3075 OwnPtr<CCLayerImpl> rotatedLeaf = CCLayerImpl::create(2468); | 3075 scoped_ptr<CCLayerImpl> rotatedLeaf = CCLayerImpl::create(2468); |
| 3076 | 3076 |
| 3077 position = FloatPoint(10, 10); | 3077 position = FloatPoint(10, 10); |
| 3078 bounds = IntSize(80, 80); | 3078 bounds = IntSize(80, 80); |
| 3079 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3079 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3080 child->setMasksToBounds(true); | 3080 child->setMasksToBounds(true); |
| 3081 | 3081 |
| 3082 WebTransformationMatrix rotation45DegreesAboutCorner; | 3082 WebTransformationMatrix rotation45DegreesAboutCorner; |
| 3083 rotation45DegreesAboutCorner.rotate3d(0, 0, 45); | 3083 rotation45DegreesAboutCorner.rotate3d(0, 0, 45); |
| 3084 | 3084 |
| 3085 position = FloatPoint(0, 0); // remember, positioned with respect to its
parent which is already at 10, 10 | 3085 position = FloatPoint(0, 0); // remember, positioned with respect to its
parent which is already at 10, 10 |
| 3086 bounds = IntSize(200, 200); // to ensure it covers at least sqrt(2) * 10
0. | 3086 bounds = IntSize(200, 200); // to ensure it covers at least sqrt(2) * 10
0. |
| 3087 setLayerPropertiesForTesting(grandChild.get(), rotation45DegreesAboutCor
ner, identityMatrix, anchor, position, bounds, false); | 3087 setLayerPropertiesForTesting(grandChild.get(), rotation45DegreesAboutCor
ner, identityMatrix, anchor, position, bounds, false); |
| 3088 grandChild->setMasksToBounds(true); | 3088 grandChild->setMasksToBounds(true); |
| 3089 | 3089 |
| 3090 // Rotates about the center of the layer | 3090 // Rotates about the center of the layer |
| 3091 WebTransformationMatrix rotatedLeafTransform; | 3091 WebTransformationMatrix rotatedLeafTransform; |
| 3092 rotatedLeafTransform.translate(-10, -10); // cancel out the grandParent'
s position | 3092 rotatedLeafTransform.translate(-10, -10); // cancel out the grandParent'
s position |
| 3093 rotatedLeafTransform.rotate3d(0, 0, -45); // cancel out the corner 45-de
gree rotation of the parent. | 3093 rotatedLeafTransform.rotate3d(0, 0, -45); // cancel out the corner 45-de
gree rotation of the parent. |
| 3094 rotatedLeafTransform.translate(50, 50); | 3094 rotatedLeafTransform.translate(50, 50); |
| 3095 rotatedLeafTransform.rotate3d(0, 0, 45); | 3095 rotatedLeafTransform.rotate3d(0, 0, 45); |
| 3096 rotatedLeafTransform.translate(-50, -50); | 3096 rotatedLeafTransform.translate(-50, -50); |
| 3097 position = FloatPoint(0, 0); | 3097 position = FloatPoint(0, 0); |
| 3098 bounds = IntSize(100, 100); | 3098 bounds = IntSize(100, 100); |
| 3099 setLayerPropertiesForTesting(rotatedLeaf.get(), rotatedLeafTransform, id
entityMatrix, anchor, position, bounds, false); | 3099 setLayerPropertiesForTesting(rotatedLeaf.get(), rotatedLeafTransform, id
entityMatrix, anchor, position, bounds, false); |
| 3100 rotatedLeaf->setDrawsContent(true); | 3100 rotatedLeaf->setDrawsContent(true); |
| 3101 | 3101 |
| 3102 grandChild->addChild(rotatedLeaf.release()); | 3102 grandChild->addChild(rotatedLeaf.Pass()); |
| 3103 child->addChild(grandChild.release()); | 3103 child->addChild(grandChild.Pass()); |
| 3104 root->addChild(child.release()); | 3104 root->addChild(child.Pass()); |
| 3105 } | 3105 } |
| 3106 | 3106 |
| 3107 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 3107 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 3108 int dummyMaxTextureSize = 512; | 3108 int dummyMaxTextureSize = 512; |
| 3109 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3109 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
| 3110 | 3110 |
| 3111 // Sanity check the scenario we just created. | 3111 // Sanity check the scenario we just created. |
| 3112 // The grandChild is expected to create a renderSurface because it masksToBo
unds and is not axis aligned. | 3112 // The grandChild is expected to create a renderSurface because it masksToBo
unds and is not axis aligned. |
| 3113 ASSERT_EQ(2u, renderSurfaceLayerList.size()); | 3113 ASSERT_EQ(2u, renderSurfaceLayerList.size()); |
| 3114 ASSERT_EQ(1u, renderSurfaceLayerList[0]->renderSurface()->layerList().size()
); | 3114 ASSERT_EQ(1u, renderSurfaceLayerList[0]->renderSurface()->layerList().size()
); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3156 | 3156 |
| 3157 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) | 3157 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) |
| 3158 { | 3158 { |
| 3159 // This test checks that hit testing code does not accidentally clip to laye
r | 3159 // This test checks that hit testing code does not accidentally clip to laye
r |
| 3160 // bounds for a layer that actually does not clip. | 3160 // bounds for a layer that actually does not clip. |
| 3161 DebugScopedSetImplThread thisScopeIsOnImplThread; | 3161 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 3162 | 3162 |
| 3163 WebTransformationMatrix identityMatrix; | 3163 WebTransformationMatrix identityMatrix; |
| 3164 FloatPoint anchor(0, 0); | 3164 FloatPoint anchor(0, 0); |
| 3165 | 3165 |
| 3166 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 3166 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 3167 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, FloatPoint(0, 0), IntSize(100, 100), false); | 3167 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, FloatPoint(0, 0), IntSize(100, 100), false); |
| 3168 | 3168 |
| 3169 { | 3169 { |
| 3170 OwnPtr<CCLayerImpl> intermediateLayer = CCLayerImpl::create(123); | 3170 scoped_ptr<CCLayerImpl> intermediateLayer = CCLayerImpl::create(123); |
| 3171 FloatPoint position(10, 10); // this layer is positioned, and hit testin
g should correctly know where the layer is located. | 3171 FloatPoint position(10, 10); // this layer is positioned, and hit testin
g should correctly know where the layer is located. |
| 3172 IntSize bounds(50, 50); | 3172 IntSize bounds(50, 50); |
| 3173 setLayerPropertiesForTesting(intermediateLayer.get(), identityMatrix, id
entityMatrix, anchor, position, bounds, false); | 3173 setLayerPropertiesForTesting(intermediateLayer.get(), identityMatrix, id
entityMatrix, anchor, position, bounds, false); |
| 3174 // Sanity check the intermediate layer should not clip. | 3174 // Sanity check the intermediate layer should not clip. |
| 3175 ASSERT_FALSE(intermediateLayer->masksToBounds()); | 3175 ASSERT_FALSE(intermediateLayer->masksToBounds()); |
| 3176 ASSERT_FALSE(intermediateLayer->maskLayer()); | 3176 ASSERT_FALSE(intermediateLayer->maskLayer()); |
| 3177 | 3177 |
| 3178 // The child of the intermediateLayer is translated so that it does not
overlap intermediateLayer at all. | 3178 // The child of the intermediateLayer is translated so that it does not
overlap intermediateLayer at all. |
| 3179 // If child is incorrectly clipped, we would not be able to hit it succe
ssfully. | 3179 // If child is incorrectly clipped, we would not be able to hit it succe
ssfully. |
| 3180 OwnPtr<CCLayerImpl> child = CCLayerImpl::create(456); | 3180 scoped_ptr<CCLayerImpl> child = CCLayerImpl::create(456); |
| 3181 position = FloatPoint(60, 60); // 70, 70 in screen space | 3181 position = FloatPoint(60, 60); // 70, 70 in screen space |
| 3182 bounds = IntSize(20, 20); | 3182 bounds = IntSize(20, 20); |
| 3183 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3183 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3184 child->setDrawsContent(true); | 3184 child->setDrawsContent(true); |
| 3185 intermediateLayer->addChild(child.release()); | 3185 intermediateLayer->addChild(child.Pass()); |
| 3186 root->addChild(intermediateLayer.release()); | 3186 root->addChild(intermediateLayer.Pass()); |
| 3187 } | 3187 } |
| 3188 | 3188 |
| 3189 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 3189 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 3190 int dummyMaxTextureSize = 512; | 3190 int dummyMaxTextureSize = 512; |
| 3191 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3191 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
| 3192 | 3192 |
| 3193 // Sanity check the scenario we just created. | 3193 // Sanity check the scenario we just created. |
| 3194 ASSERT_EQ(1u, renderSurfaceLayerList.size()); | 3194 ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
| 3195 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); | 3195 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); |
| 3196 ASSERT_EQ(456, root->renderSurface()->layerList()[0]->id()); | 3196 ASSERT_EQ(456, root->renderSurface()->layerList()[0]->id()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3214 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); | 3214 resultLayer = CCLayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, re
nderSurfaceLayerList); |
| 3215 ASSERT_TRUE(resultLayer); | 3215 ASSERT_TRUE(resultLayer); |
| 3216 EXPECT_EQ(456, resultLayer->id()); | 3216 EXPECT_EQ(456, resultLayer->id()); |
| 3217 } | 3217 } |
| 3218 | 3218 |
| 3219 | 3219 |
| 3220 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) | 3220 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) |
| 3221 { | 3221 { |
| 3222 DebugScopedSetImplThread thisScopeIsOnImplThread; | 3222 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 3223 | 3223 |
| 3224 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 3224 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 3225 | 3225 |
| 3226 WebTransformationMatrix identityMatrix; | 3226 WebTransformationMatrix identityMatrix; |
| 3227 FloatPoint anchor(0, 0); | 3227 FloatPoint anchor(0, 0); |
| 3228 FloatPoint position(0, 0); | 3228 FloatPoint position(0, 0); |
| 3229 IntSize bounds(100, 100); | 3229 IntSize bounds(100, 100); |
| 3230 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3230 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3231 root->setDrawsContent(true); | 3231 root->setDrawsContent(true); |
| 3232 | 3232 |
| 3233 { | 3233 { |
| 3234 // child 1 and child2 are initialized to overlap between x=50 and x=60. | 3234 // child 1 and child2 are initialized to overlap between x=50 and x=60. |
| 3235 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. | 3235 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. |
| 3236 // The expected stacking order is: | 3236 // The expected stacking order is: |
| 3237 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. | 3237 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. |
| 3238 | 3238 |
| 3239 OwnPtr<CCLayerImpl> child1 = CCLayerImpl::create(2); | 3239 scoped_ptr<CCLayerImpl> child1 = CCLayerImpl::create(2); |
| 3240 OwnPtr<CCLayerImpl> child2 = CCLayerImpl::create(3); | 3240 scoped_ptr<CCLayerImpl> child2 = CCLayerImpl::create(3); |
| 3241 OwnPtr<CCLayerImpl> grandChild1 = CCLayerImpl::create(4); | 3241 scoped_ptr<CCLayerImpl> grandChild1 = CCLayerImpl::create(4); |
| 3242 | 3242 |
| 3243 position = FloatPoint(10, 10); | 3243 position = FloatPoint(10, 10); |
| 3244 bounds = IntSize(50, 50); | 3244 bounds = IntSize(50, 50); |
| 3245 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3245 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3246 child1->setDrawsContent(true); | 3246 child1->setDrawsContent(true); |
| 3247 | 3247 |
| 3248 position = FloatPoint(50, 10); | 3248 position = FloatPoint(50, 10); |
| 3249 bounds = IntSize(50, 50); | 3249 bounds = IntSize(50, 50); |
| 3250 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3250 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3251 child2->setDrawsContent(true); | 3251 child2->setDrawsContent(true); |
| 3252 | 3252 |
| 3253 // Remember that grandChild is positioned with respect to its parent (i.
e. child1). | 3253 // Remember that grandChild is positioned with respect to its parent (i.
e. child1). |
| 3254 // In screen space, the intended position is (10, 50), with size 100 x 5
0. | 3254 // In screen space, the intended position is (10, 50), with size 100 x 5
0. |
| 3255 position = FloatPoint(0, 40); | 3255 position = FloatPoint(0, 40); |
| 3256 bounds = IntSize(100, 50); | 3256 bounds = IntSize(100, 50); |
| 3257 setLayerPropertiesForTesting(grandChild1.get(), identityMatrix, identity
Matrix, anchor, position, bounds, false); | 3257 setLayerPropertiesForTesting(grandChild1.get(), identityMatrix, identity
Matrix, anchor, position, bounds, false); |
| 3258 grandChild1->setDrawsContent(true); | 3258 grandChild1->setDrawsContent(true); |
| 3259 | 3259 |
| 3260 child1->addChild(grandChild1.release()); | 3260 child1->addChild(grandChild1.Pass()); |
| 3261 root->addChild(child1.release()); | 3261 root->addChild(child1.Pass()); |
| 3262 root->addChild(child2.release()); | 3262 root->addChild(child2.Pass()); |
| 3263 } | 3263 } |
| 3264 | 3264 |
| 3265 CCLayerImpl* child1 = root->children()[0]; | 3265 CCLayerImpl* child1 = root->children()[0]; |
| 3266 CCLayerImpl* child2 = root->children()[1]; | 3266 CCLayerImpl* child2 = root->children()[1]; |
| 3267 CCLayerImpl* grandChild1 = child1->children()[0]; | 3267 CCLayerImpl* grandChild1 = child1->children()[0]; |
| 3268 | 3268 |
| 3269 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 3269 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 3270 int dummyMaxTextureSize = 512; | 3270 int dummyMaxTextureSize = 512; |
| 3271 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3271 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
| 3272 | 3272 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3319 } | 3319 } |
| 3320 | 3320 |
| 3321 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) | 3321 TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
| 3322 { | 3322 { |
| 3323 // | 3323 // |
| 3324 // The geometry is set up similarly to the previous case, but | 3324 // The geometry is set up similarly to the previous case, but |
| 3325 // all layers are forced to be renderSurfaces now. | 3325 // all layers are forced to be renderSurfaces now. |
| 3326 // | 3326 // |
| 3327 DebugScopedSetImplThread thisScopeIsOnImplThread; | 3327 DebugScopedSetImplThread thisScopeIsOnImplThread; |
| 3328 | 3328 |
| 3329 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 3329 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 3330 | 3330 |
| 3331 WebTransformationMatrix identityMatrix; | 3331 WebTransformationMatrix identityMatrix; |
| 3332 FloatPoint anchor(0, 0); | 3332 FloatPoint anchor(0, 0); |
| 3333 FloatPoint position(0, 0); | 3333 FloatPoint position(0, 0); |
| 3334 IntSize bounds(100, 100); | 3334 IntSize bounds(100, 100); |
| 3335 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3335 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3336 root->setDrawsContent(true); | 3336 root->setDrawsContent(true); |
| 3337 | 3337 |
| 3338 { | 3338 { |
| 3339 // child 1 and child2 are initialized to overlap between x=50 and x=60. | 3339 // child 1 and child2 are initialized to overlap between x=50 and x=60. |
| 3340 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. | 3340 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. |
| 3341 // The expected stacking order is: | 3341 // The expected stacking order is: |
| 3342 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. | 3342 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. |
| 3343 | 3343 |
| 3344 OwnPtr<CCLayerImpl> child1 = CCLayerImpl::create(2); | 3344 scoped_ptr<CCLayerImpl> child1 = CCLayerImpl::create(2); |
| 3345 OwnPtr<CCLayerImpl> child2 = CCLayerImpl::create(3); | 3345 scoped_ptr<CCLayerImpl> child2 = CCLayerImpl::create(3); |
| 3346 OwnPtr<CCLayerImpl> grandChild1 = CCLayerImpl::create(4); | 3346 scoped_ptr<CCLayerImpl> grandChild1 = CCLayerImpl::create(4); |
| 3347 | 3347 |
| 3348 position = FloatPoint(10, 10); | 3348 position = FloatPoint(10, 10); |
| 3349 bounds = IntSize(50, 50); | 3349 bounds = IntSize(50, 50); |
| 3350 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3350 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3351 child1->setDrawsContent(true); | 3351 child1->setDrawsContent(true); |
| 3352 child1->setForceRenderSurface(true); | 3352 child1->setForceRenderSurface(true); |
| 3353 | 3353 |
| 3354 position = FloatPoint(50, 10); | 3354 position = FloatPoint(50, 10); |
| 3355 bounds = IntSize(50, 50); | 3355 bounds = IntSize(50, 50); |
| 3356 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3356 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3357 child2->setDrawsContent(true); | 3357 child2->setDrawsContent(true); |
| 3358 child2->setForceRenderSurface(true); | 3358 child2->setForceRenderSurface(true); |
| 3359 | 3359 |
| 3360 // Remember that grandChild is positioned with respect to its parent (i.
e. child1). | 3360 // Remember that grandChild is positioned with respect to its parent (i.
e. child1). |
| 3361 // In screen space, the intended position is (10, 50), with size 100 x 5
0. | 3361 // In screen space, the intended position is (10, 50), with size 100 x 5
0. |
| 3362 position = FloatPoint(0, 40); | 3362 position = FloatPoint(0, 40); |
| 3363 bounds = IntSize(100, 50); | 3363 bounds = IntSize(100, 50); |
| 3364 setLayerPropertiesForTesting(grandChild1.get(), identityMatrix, identity
Matrix, anchor, position, bounds, false); | 3364 setLayerPropertiesForTesting(grandChild1.get(), identityMatrix, identity
Matrix, anchor, position, bounds, false); |
| 3365 grandChild1->setDrawsContent(true); | 3365 grandChild1->setDrawsContent(true); |
| 3366 grandChild1->setForceRenderSurface(true); | 3366 grandChild1->setForceRenderSurface(true); |
| 3367 | 3367 |
| 3368 child1->addChild(grandChild1.release()); | 3368 child1->addChild(grandChild1.Pass()); |
| 3369 root->addChild(child1.release()); | 3369 root->addChild(child1.Pass()); |
| 3370 root->addChild(child2.release()); | 3370 root->addChild(child2.Pass()); |
| 3371 } | 3371 } |
| 3372 | 3372 |
| 3373 CCLayerImpl* child1 = root->children()[0]; | 3373 CCLayerImpl* child1 = root->children()[0]; |
| 3374 CCLayerImpl* child2 = root->children()[1]; | 3374 CCLayerImpl* child2 = root->children()[1]; |
| 3375 CCLayerImpl* grandChild1 = child1->children()[0]; | 3375 CCLayerImpl* grandChild1 = child1->children()[0]; |
| 3376 | 3376 |
| 3377 std::vector<CCLayerImpl*> renderSurfaceLayerList; | 3377 std::vector<CCLayerImpl*> renderSurfaceLayerList; |
| 3378 int dummyMaxTextureSize = 512; | 3378 int dummyMaxTextureSize = 512; |
| 3379 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3379 CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1
, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
| 3380 | 3380 |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3815 int nonexistentId = -1; | 3815 int nonexistentId = -1; |
| 3816 EXPECT_EQ(root, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), root->
id())); | 3816 EXPECT_EQ(root, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), root->
id())); |
| 3817 EXPECT_EQ(child, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), child
->id())); | 3817 EXPECT_EQ(child, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), child
->id())); |
| 3818 EXPECT_EQ(grandChild, CCLayerTreeHostCommon::findLayerInSubtree(root.get(),
grandChild->id())); | 3818 EXPECT_EQ(grandChild, CCLayerTreeHostCommon::findLayerInSubtree(root.get(),
grandChild->id())); |
| 3819 EXPECT_EQ(maskLayer, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), m
askLayer->id())); | 3819 EXPECT_EQ(maskLayer, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), m
askLayer->id())); |
| 3820 EXPECT_EQ(replicaLayer, CCLayerTreeHostCommon::findLayerInSubtree(root.get()
, replicaLayer->id())); | 3820 EXPECT_EQ(replicaLayer, CCLayerTreeHostCommon::findLayerInSubtree(root.get()
, replicaLayer->id())); |
| 3821 EXPECT_EQ(0, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), nonexiste
ntId)); | 3821 EXPECT_EQ(0, CCLayerTreeHostCommon::findLayerInSubtree(root.get(), nonexiste
ntId)); |
| 3822 } | 3822 } |
| 3823 | 3823 |
| 3824 } // namespace | 3824 } // namespace |
| OLD | NEW |