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/layer_tree_host_common.h" | 5 #include "cc/layer_tree_host_common.h" |
6 | 6 |
7 #include "cc/content_layer.h" | 7 #include "cc/content_layer.h" |
8 #include "cc/content_layer_client.h" | 8 #include "cc/content_layer_client.h" |
9 #include "cc/layer.h" | 9 #include "cc/layer.h" |
10 #include "cc/layer_animation_controller.h" | 10 #include "cc/layer_animation_controller.h" |
11 #include "cc/layer_impl.h" | 11 #include "cc/layer_impl.h" |
12 #include "cc/layer_sorter.h" | 12 #include "cc/layer_sorter.h" |
13 #include "cc/math_util.h" | 13 #include "cc/math_util.h" |
14 #include "cc/proxy.h" | 14 #include "cc/proxy.h" |
15 #include "cc/single_thread_proxy.h" | 15 #include "cc/single_thread_proxy.h" |
16 #include "cc/test/animation_test_common.h" | 16 #include "cc/test/animation_test_common.h" |
17 #include "cc/test/geometry_test_utils.h" | 17 #include "cc/test/geometry_test_utils.h" |
18 #include "cc/thread.h" | 18 #include "cc/thread.h" |
19 #include "ui/gfx/size_conversions.h" | 19 #include "ui/gfx/size_conversions.h" |
20 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
22 #include <public/WebTransformationMatrix.h> | 22 #include "ui/gfx/transform.h" |
23 | 23 |
24 using namespace WebKitTests; | 24 using namespace WebKitTests; |
25 using WebKit::WebTransformationMatrix; | |
26 | 25 |
27 namespace cc { | 26 namespace cc { |
28 namespace { | 27 namespace { |
29 | 28 |
30 template<typename LayerType> | 29 template<typename LayerType> |
31 void setLayerPropertiesForTestingInternal(LayerType* layer, const WebTransformat
ionMatrix& transform, const WebTransformationMatrix& sublayerTransform, const gf
x::PointF& anchor, const gfx::PointF& position, const gfx::Size& bounds, bool pr
eserves3D) | 30 void setLayerPropertiesForTestingInternal(LayerType* layer, const gfx::Transform
& transform, const gfx::Transform& sublayerTransform, const gfx::PointF& anchor,
const gfx::PointF& position, const gfx::Size& bounds, bool preserves3D) |
32 { | 31 { |
33 layer->setTransform(transform); | 32 layer->setTransform(transform); |
34 layer->setSublayerTransform(sublayerTransform); | 33 layer->setSublayerTransform(sublayerTransform); |
35 layer->setAnchorPoint(anchor); | 34 layer->setAnchorPoint(anchor); |
36 layer->setPosition(position); | 35 layer->setPosition(position); |
37 layer->setBounds(bounds); | 36 layer->setBounds(bounds); |
38 layer->setPreserves3D(preserves3D); | 37 layer->setPreserves3D(preserves3D); |
39 } | 38 } |
40 | 39 |
41 void setLayerPropertiesForTesting(Layer* layer, const WebTransformationMatrix& t
ransform, const WebTransformationMatrix& sublayerTransform, const gfx::PointF& a
nchor, const gfx::PointF& position, const gfx::Size& bounds, bool preserves3D) | 40 void setLayerPropertiesForTesting(Layer* layer, const gfx::Transform& transform,
const gfx::Transform& sublayerTransform, const gfx::PointF& anchor, const gfx::
PointF& position, const gfx::Size& bounds, bool preserves3D) |
42 { | 41 { |
43 setLayerPropertiesForTestingInternal<Layer>(layer, transform, sublayerTransf
orm, anchor, position, bounds, preserves3D); | 42 setLayerPropertiesForTestingInternal<Layer>(layer, transform, sublayerTransf
orm, anchor, position, bounds, preserves3D); |
44 layer->setAutomaticallyComputeRasterScale(true); | 43 layer->setAutomaticallyComputeRasterScale(true); |
45 } | 44 } |
46 | 45 |
47 void setLayerPropertiesForTesting(LayerImpl* layer, const WebTransformationMatri
x& transform, const WebTransformationMatrix& sublayerTransform, const gfx::Point
F& anchor, const gfx::PointF& position, const gfx::Size& bounds, bool preserves3
D) | 46 void setLayerPropertiesForTesting(LayerImpl* layer, const gfx::Transform& transf
orm, const gfx::Transform& sublayerTransform, const gfx::PointF& anchor, const g
fx::PointF& position, const gfx::Size& bounds, bool preserves3D) |
48 { | 47 { |
49 setLayerPropertiesForTestingInternal<LayerImpl>(layer, transform, sublayerTr
ansform, anchor, position, bounds, preserves3D); | 48 setLayerPropertiesForTestingInternal<LayerImpl>(layer, transform, sublayerTr
ansform, anchor, position, bounds, preserves3D); |
50 layer->setContentBounds(bounds); | 49 layer->setContentBounds(bounds); |
51 } | 50 } |
52 | 51 |
53 void executeCalculateDrawTransformsAndVisibility(Layer* rootLayer, float deviceS
caleFactor = 1, float pageScaleFactor = 1) | 52 void executeCalculateDrawTransformsAndVisibility(Layer* rootLayer, float deviceS
caleFactor = 1, float pageScaleFactor = 1) |
54 { | 53 { |
55 WebTransformationMatrix identityMatrix; | 54 gfx::Transform identityMatrix; |
56 std::vector<scoped_refptr<Layer> > dummyRenderSurfaceLayerList; | 55 std::vector<scoped_refptr<Layer> > dummyRenderSurfaceLayerList; |
57 int dummyMaxTextureSize = 512; | 56 int dummyMaxTextureSize = 512; |
58 gfx::Size deviceViewportSize = gfx::Size(rootLayer->bounds().width() * devic
eScaleFactor, rootLayer->bounds().height() * deviceScaleFactor); | 57 gfx::Size deviceViewportSize = gfx::Size(rootLayer->bounds().width() * devic
eScaleFactor, rootLayer->bounds().height() * deviceScaleFactor); |
59 | 58 |
60 // We are probably not testing what is intended if the rootLayer bounds are
empty. | 59 // We are probably not testing what is intended if the rootLayer bounds are
empty. |
61 DCHECK(!rootLayer->bounds().IsEmpty()); | 60 DCHECK(!rootLayer->bounds().IsEmpty()); |
62 LayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize,
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, dummyRenderSurfaceLayer
List); | 61 LayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize,
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, dummyRenderSurfaceLayer
List); |
63 } | 62 } |
64 | 63 |
65 void executeCalculateDrawTransformsAndVisibility(LayerImpl* rootLayer, float dev
iceScaleFactor = 1, float pageScaleFactor = 1) | 64 void executeCalculateDrawTransformsAndVisibility(LayerImpl* rootLayer, float dev
iceScaleFactor = 1, float pageScaleFactor = 1) |
66 { | 65 { |
67 // Note: this version skips layer sorting. | 66 // Note: this version skips layer sorting. |
68 | 67 |
69 WebTransformationMatrix identityMatrix; | 68 gfx::Transform identityMatrix; |
70 std::vector<LayerImpl*> dummyRenderSurfaceLayerList; | 69 std::vector<LayerImpl*> dummyRenderSurfaceLayerList; |
71 int dummyMaxTextureSize = 512; | 70 int dummyMaxTextureSize = 512; |
72 gfx::Size deviceViewportSize = gfx::Size(rootLayer->bounds().width() * devic
eScaleFactor, rootLayer->bounds().height() * deviceScaleFactor); | 71 gfx::Size deviceViewportSize = gfx::Size(rootLayer->bounds().width() * devic
eScaleFactor, rootLayer->bounds().height() * deviceScaleFactor); |
73 | 72 |
74 // We are probably not testing what is intended if the rootLayer bounds are
empty. | 73 // We are probably not testing what is intended if the rootLayer bounds are
empty. |
75 DCHECK(!rootLayer->bounds().IsEmpty()); | 74 DCHECK(!rootLayer->bounds().IsEmpty()); |
76 LayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize,
deviceScaleFactor, pageScaleFactor, 0, dummyMaxTextureSize, dummyRenderSurfaceLa
yerList); | 75 LayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize,
deviceScaleFactor, pageScaleFactor, 0, dummyMaxTextureSize, dummyRenderSurfaceLa
yerList); |
77 } | 76 } |
78 | 77 |
79 WebTransformationMatrix remove3DComponentOfMatrix(const WebTransformationMatrix&
mat) | |
80 { | |
81 WebTransformationMatrix ret = mat; | |
82 ret.setM13(0); | |
83 ret.setM23(0); | |
84 ret.setM31(0); | |
85 ret.setM32(0); | |
86 ret.setM33(1); | |
87 ret.setM34(0); | |
88 ret.setM43(0); | |
89 return ret; | |
90 } | |
91 | |
92 scoped_ptr<LayerImpl> createTreeForFixedPositionTests() | 78 scoped_ptr<LayerImpl> createTreeForFixedPositionTests() |
93 { | 79 { |
94 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 80 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
95 scoped_ptr<LayerImpl> child = LayerImpl::create(2); | 81 scoped_ptr<LayerImpl> child = LayerImpl::create(2); |
96 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(3); | 82 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(3); |
97 scoped_ptr<LayerImpl> greatGrandChild = LayerImpl::create(4); | 83 scoped_ptr<LayerImpl> greatGrandChild = LayerImpl::create(4); |
98 | 84 |
99 WebTransformationMatrix IdentityMatrix; | 85 gfx::Transform IdentityMatrix; |
100 gfx::PointF anchor(0, 0); | 86 gfx::PointF anchor(0, 0); |
101 gfx::PointF position(0, 0); | 87 gfx::PointF position(0, 0); |
102 gfx::Size bounds(100, 100); | 88 gfx::Size bounds(100, 100); |
103 setLayerPropertiesForTesting(root.get(), IdentityMatrix, IdentityMatrix, anc
hor, position, bounds, false); | 89 setLayerPropertiesForTesting(root.get(), IdentityMatrix, IdentityMatrix, anc
hor, position, bounds, false); |
104 setLayerPropertiesForTesting(child.get(), IdentityMatrix, IdentityMatrix, an
chor, position, bounds, false); | 90 setLayerPropertiesForTesting(child.get(), IdentityMatrix, IdentityMatrix, an
chor, position, bounds, false); |
105 setLayerPropertiesForTesting(grandChild.get(), IdentityMatrix, IdentityMatri
x, anchor, position, bounds, false); | 91 setLayerPropertiesForTesting(grandChild.get(), IdentityMatrix, IdentityMatri
x, anchor, position, bounds, false); |
106 setLayerPropertiesForTesting(greatGrandChild.get(), IdentityMatrix, Identity
Matrix, anchor, position, bounds, false); | 92 setLayerPropertiesForTesting(greatGrandChild.get(), IdentityMatrix, Identity
Matrix, anchor, position, bounds, false); |
107 | 93 |
108 grandChild->addChild(greatGrandChild.Pass()); | 94 grandChild->addChild(greatGrandChild.Pass()); |
109 child->addChild(grandChild.Pass()); | 95 child->addChild(grandChild.Pass()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 // and with identity transforms, then the drawTransform, | 139 // and with identity transforms, then the drawTransform, |
154 // screenSpaceTransform, and the hierarchy passed on to children | 140 // screenSpaceTransform, and the hierarchy passed on to children |
155 // layers should also be identity transforms. | 141 // layers should also be identity transforms. |
156 | 142 |
157 scoped_refptr<Layer> parent = Layer::create(); | 143 scoped_refptr<Layer> parent = Layer::create(); |
158 scoped_refptr<Layer> child = Layer::create(); | 144 scoped_refptr<Layer> child = Layer::create(); |
159 scoped_refptr<Layer> grandChild = Layer::create(); | 145 scoped_refptr<Layer> grandChild = Layer::create(); |
160 parent->addChild(child); | 146 parent->addChild(child); |
161 child->addChild(grandChild); | 147 child->addChild(grandChild); |
162 | 148 |
163 WebTransformationMatrix identityMatrix; | 149 gfx::Transform identityMatrix; |
164 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 150 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
165 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(0, 0), false); | 151 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(0, 0), false); |
166 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(0, 0), false); | 152 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(0, 0), false); |
167 | 153 |
168 executeCalculateDrawTransformsAndVisibility(parent.get()); | 154 executeCalculateDrawTransformsAndVisibility(parent.get()); |
169 | 155 |
170 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); | 156 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
171 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->screenSpaceTransform(
)); | 157 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->screenSpaceTransform(
)); |
172 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; | 158 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; |
173 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->screenSpaceTrans
form()); | 159 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->screenSpaceTrans
form()); |
174 } | 160 } |
175 | 161 |
176 TEST(LayerTreeHostCommonTest, verifyTransformsForSingleLayer) | 162 TEST(LayerTreeHostCommonTest, verifyTransformsForSingleLayer) |
177 { | 163 { |
178 WebTransformationMatrix identityMatrix; | 164 gfx::Transform identityMatrix; |
179 scoped_refptr<Layer> layer = Layer::create(); | 165 scoped_refptr<Layer> layer = Layer::create(); |
180 | 166 |
181 scoped_refptr<Layer> root = Layer::create(); | 167 scoped_refptr<Layer> root = Layer::create(); |
182 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); | 168 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); |
183 root->addChild(layer); | 169 root->addChild(layer); |
184 | 170 |
185 // Case 1: setting the sublayer transform should not affect this layer's dra
w transform or screen-space transform. | 171 // Case 1: setting the sublayer transform should not affect this layer's dra
w transform or screen-space transform. |
186 WebTransformationMatrix arbitraryTranslation; | 172 gfx::Transform arbitraryTranslation; |
187 arbitraryTranslation.translate(10, 20); | 173 arbitraryTranslation.Translate(10, 20); |
188 setLayerPropertiesForTesting(layer.get(), identityMatrix, arbitraryTranslati
on, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 174 setLayerPropertiesForTesting(layer.get(), identityMatrix, arbitraryTranslati
on, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
189 executeCalculateDrawTransformsAndVisibility(root.get()); | 175 executeCalculateDrawTransformsAndVisibility(root.get()); |
190 WebTransformationMatrix expectedDrawTransform = identityMatrix; | 176 gfx::Transform expectedDrawTransform = identityMatrix; |
191 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedDrawTransform, layer->drawTransform(
)); | 177 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedDrawTransform, layer->drawTransform(
)); |
192 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->screenSpaceTransform(
)); | 178 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->screenSpaceTransform(
)); |
193 | 179 |
194 // Case 2: Setting the bounds of the layer should not affect either the draw
transform or the screenspace transform. | 180 // Case 2: Setting the bounds of the layer should not affect either the draw
transform or the screenspace transform. |
195 WebTransformationMatrix translationToCenter; | 181 gfx::Transform translationToCenter; |
196 translationToCenter.translate(5, 6); | 182 translationToCenter.Translate(5, 6); |
197 setLayerPropertiesForTesting(layer.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 12), false); | 183 setLayerPropertiesForTesting(layer.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 12), false); |
198 executeCalculateDrawTransformsAndVisibility(root.get()); | 184 executeCalculateDrawTransformsAndVisibility(root.get()); |
199 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->drawTransform()); | 185 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->drawTransform()); |
200 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->screenSpaceTransform(
)); | 186 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->screenSpaceTransform(
)); |
201 | 187 |
202 // Case 3: The anchor point by itself (without a layer transform) should hav
e no effect on the transforms. | 188 // Case 3: The anchor point by itself (without a layer transform) should hav
e no effect on the transforms. |
203 setLayerPropertiesForTesting(layer.get(), identityMatrix, identityMatrix, gf
x::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false); | 189 setLayerPropertiesForTesting(layer.get(), identityMatrix, identityMatrix, gf
x::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false); |
204 executeCalculateDrawTransformsAndVisibility(root.get()); | 190 executeCalculateDrawTransformsAndVisibility(root.get()); |
205 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->drawTransform()); | 191 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->drawTransform()); |
206 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->screenSpaceTransform(
)); | 192 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, layer->screenSpaceTransform(
)); |
207 | 193 |
208 // Case 4: A change in actual position affects both the draw transform and s
creen space transform. | 194 // Case 4: A change in actual position affects both the draw transform and s
creen space transform. |
209 WebTransformationMatrix positionTransform; | 195 gfx::Transform positionTransform; |
210 positionTransform.translate(0, 1.2); | 196 positionTransform.Translate(0, 1.2); |
211 setLayerPropertiesForTesting(layer.get(), identityMatrix, identityMatrix, gf
x::PointF(0.25, 0.25), gfx::PointF(0, 1.2f), gfx::Size(10, 12), false); | 197 setLayerPropertiesForTesting(layer.get(), identityMatrix, identityMatrix, gf
x::PointF(0.25, 0.25), gfx::PointF(0, 1.2f), gfx::Size(10, 12), false); |
212 executeCalculateDrawTransformsAndVisibility(root.get()); | 198 executeCalculateDrawTransformsAndVisibility(root.get()); |
213 EXPECT_TRANSFORMATION_MATRIX_EQ(positionTransform, layer->drawTransform()); | 199 EXPECT_TRANSFORMATION_MATRIX_EQ(positionTransform, layer->drawTransform()); |
214 EXPECT_TRANSFORMATION_MATRIX_EQ(positionTransform, layer->screenSpaceTransfo
rm()); | 200 EXPECT_TRANSFORMATION_MATRIX_EQ(positionTransform, layer->screenSpaceTransfo
rm()); |
215 | 201 |
216 // Case 5: In the correct sequence of transforms, the layer transform should
pre-multiply the translationToCenter. This is easily tested by | 202 // Case 5: In the correct sequence of transforms, the layer transform should
pre-multiply the translationToCenter. This is easily tested by |
217 // using a scale transform, because scale and translation are not co
mmutative. | 203 // using a scale transform, because scale and translation are not co
mmutative. |
218 WebTransformationMatrix layerTransform; | 204 gfx::Transform layerTransform; |
219 layerTransform.scale3d(2, 2, 1); | 205 layerTransform.Scale3d(2, 2, 1); |
220 setLayerPropertiesForTesting(layer.get(), layerTransform, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 12), false); | 206 setLayerPropertiesForTesting(layer.get(), layerTransform, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 12), false); |
221 executeCalculateDrawTransformsAndVisibility(root.get()); | 207 executeCalculateDrawTransformsAndVisibility(root.get()); |
222 EXPECT_TRANSFORMATION_MATRIX_EQ(layerTransform, layer->drawTransform()); | 208 EXPECT_TRANSFORMATION_MATRIX_EQ(layerTransform, layer->drawTransform()); |
223 EXPECT_TRANSFORMATION_MATRIX_EQ(layerTransform, layer->screenSpaceTransform(
)); | 209 EXPECT_TRANSFORMATION_MATRIX_EQ(layerTransform, layer->screenSpaceTransform(
)); |
224 | 210 |
225 // Case 6: The layer transform should occur with respect to the anchor point
. | 211 // Case 6: The layer transform should occur with respect to the anchor point
. |
226 WebTransformationMatrix translationToAnchor; | 212 gfx::Transform translationToAnchor; |
227 translationToAnchor.translate(5, 0); | 213 translationToAnchor.Translate(5, 0); |
228 WebTransformationMatrix expectedResult = translationToAnchor * layerTransfor
m * translationToAnchor.inverse(); | 214 gfx::Transform expectedResult = translationToAnchor * layerTransform * MathU
til::inverse(translationToAnchor); |
229 setLayerPropertiesForTesting(layer.get(), layerTransform, identityMatrix, gf
x::PointF(0.5, 0), gfx::PointF(0, 0), gfx::Size(10, 12), false); | 215 setLayerPropertiesForTesting(layer.get(), layerTransform, identityMatrix, gf
x::PointF(0.5, 0), gfx::PointF(0, 0), gfx::Size(10, 12), false); |
230 executeCalculateDrawTransformsAndVisibility(root.get()); | 216 executeCalculateDrawTransformsAndVisibility(root.get()); |
231 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->drawTransform()); | 217 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->drawTransform()); |
232 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->screenSpaceTransform(
)); | 218 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->screenSpaceTransform(
)); |
233 | 219 |
234 // Case 7: Verify that position pre-multiplies the layer transform. | 220 // Case 7: Verify that position pre-multiplies the layer transform. |
235 // The current implementation of calculateDrawTransforms does this i
mplicitly, but it is | 221 // The current implementation of calculateDrawTransforms does this i
mplicitly, but it is |
236 // still worth testing to detect accidental regressions. | 222 // still worth testing to detect accidental regressions. |
237 expectedResult = positionTransform * translationToAnchor * layerTransform *
translationToAnchor.inverse(); | 223 expectedResult = positionTransform * translationToAnchor * layerTransform *
MathUtil::inverse(translationToAnchor); |
238 setLayerPropertiesForTesting(layer.get(), layerTransform, identityMatrix, gf
x::PointF(0.5, 0), gfx::PointF(0, 1.2f), gfx::Size(10, 12), false); | 224 setLayerPropertiesForTesting(layer.get(), layerTransform, identityMatrix, gf
x::PointF(0.5, 0), gfx::PointF(0, 1.2f), gfx::Size(10, 12), false); |
239 executeCalculateDrawTransformsAndVisibility(root.get()); | 225 executeCalculateDrawTransformsAndVisibility(root.get()); |
240 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->drawTransform()); | 226 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->drawTransform()); |
241 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->screenSpaceTransform(
)); | 227 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedResult, layer->screenSpaceTransform(
)); |
242 } | 228 } |
243 | 229 |
244 TEST(LayerTreeHostCommonTest, verifyTransformsForSimpleHierarchy) | 230 TEST(LayerTreeHostCommonTest, verifyTransformsForSimpleHierarchy) |
245 { | 231 { |
246 WebTransformationMatrix identityMatrix; | 232 gfx::Transform identityMatrix; |
247 scoped_refptr<Layer> root = Layer::create(); | 233 scoped_refptr<Layer> root = Layer::create(); |
248 scoped_refptr<Layer> parent = Layer::create(); | 234 scoped_refptr<Layer> parent = Layer::create(); |
249 scoped_refptr<Layer> child = Layer::create(); | 235 scoped_refptr<Layer> child = Layer::create(); |
250 scoped_refptr<Layer> grandChild = Layer::create(); | 236 scoped_refptr<Layer> grandChild = Layer::create(); |
251 root->addChild(parent); | 237 root->addChild(parent); |
252 parent->addChild(child); | 238 parent->addChild(child); |
253 child->addChild(grandChild); | 239 child->addChild(grandChild); |
254 | 240 |
255 // One-time setup of root layer | 241 // One-time setup of root layer |
256 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); | 242 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); |
257 | 243 |
258 // Case 1: parent's anchorPoint should not affect child or grandChild. | 244 // Case 1: parent's anchorPoint should not affect child or grandChild. |
259 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false); | 245 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false); |
260 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); | 246 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); |
261 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); | 247 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); |
262 executeCalculateDrawTransformsAndVisibility(root.get()); | 248 executeCalculateDrawTransformsAndVisibility(root.get()); |
263 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); | 249 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
264 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->screenSpaceTransform(
)); | 250 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->screenSpaceTransform(
)); |
265 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; | 251 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; |
266 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->screenSpaceTrans
form()); | 252 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->screenSpaceTrans
form()); |
267 | 253 |
268 // Case 2: parent's position affects child and grandChild. | 254 // Case 2: parent's position affects child and grandChild. |
269 WebTransformationMatrix parentPositionTransform; | 255 gfx::Transform parentPositionTransform; |
270 parentPositionTransform.translate(0, 1.2); | 256 parentPositionTransform.Translate(0, 1.2); |
271 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0.25, 0.25), gfx::PointF(0, 1.2f), gfx::Size(10, 12), false); | 257 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0.25, 0.25), gfx::PointF(0, 1.2f), gfx::Size(10, 12), false); |
272 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); | 258 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); |
273 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); | 259 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); |
274 executeCalculateDrawTransformsAndVisibility(root.get()); | 260 executeCalculateDrawTransformsAndVisibility(root.get()); |
275 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, child->drawTransfor
m()); | 261 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, child->drawTransfor
m()); |
276 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, child->screenSpaceT
ransform()); | 262 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, child->screenSpaceT
ransform()); |
277 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, grandChild->drawTra
nsform()); | 263 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, grandChild->drawTra
nsform()); |
278 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, grandChild->screenS
paceTransform()); | 264 EXPECT_TRANSFORMATION_MATRIX_EQ(parentPositionTransform, grandChild->screenS
paceTransform()); |
279 | 265 |
280 // Case 3: parent's local transform affects child and grandchild | 266 // Case 3: parent's local transform affects child and grandchild |
281 WebTransformationMatrix parentLayerTransform; | 267 gfx::Transform parentLayerTransform; |
282 parentLayerTransform.scale3d(2, 2, 1); | 268 parentLayerTransform.Scale3d(2, 2, 1); |
283 WebTransformationMatrix parentTranslationToAnchor; | 269 gfx::Transform parentTranslationToAnchor; |
284 parentTranslationToAnchor.translate(2.5, 3); | 270 parentTranslationToAnchor.Translate(2.5, 3); |
285 WebTransformationMatrix parentCompositeTransform = parentTranslationToAnchor
* parentLayerTransform * parentTranslationToAnchor.inverse(); | 271 gfx::Transform parentCompositeTransform = parentTranslationToAnchor * parent
LayerTransform * MathUtil::inverse(parentTranslationToAnchor); |
286 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, identityMat
rix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false); | 272 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, identityMat
rix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false); |
287 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); | 273 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); |
288 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); | 274 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); |
289 executeCalculateDrawTransformsAndVisibility(root.get()); | 275 executeCalculateDrawTransformsAndVisibility(root.get()); |
290 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->drawTransfo
rm()); | 276 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->drawTransfo
rm()); |
291 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->screenSpace
Transform()); | 277 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->screenSpace
Transform()); |
292 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, grandChild->drawTr
ansform()); | 278 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, grandChild->drawTr
ansform()); |
293 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, grandChild->screen
SpaceTransform()); | 279 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, grandChild->screen
SpaceTransform()); |
294 | 280 |
295 // Case 4: parent's sublayerMatrix affects child and grandchild | 281 // Case 4: parent's sublayerMatrix affects child and grandchild |
296 // scaling is used here again so that the correct sequence of transf
orms is properly tested. | 282 // scaling is used here again so that the correct sequence of transf
orms is properly tested. |
297 // Note that preserves3D is false, but the sublayer matrix should re
tain its 3D properties when given to child. | 283 // Note that preserves3D is false, but the sublayer matrix should re
tain its 3D properties when given to child. |
298 // But then, the child also does not preserve3D. When it gives its h
ierarchy to the grandChild, it should be flattened to 2D. | 284 // But then, the child also does not preserve3D. When it gives its h
ierarchy to the grandChild, it should be flattened to 2D. |
299 WebTransformationMatrix parentSublayerMatrix; | 285 gfx::Transform parentSublayerMatrix; |
300 parentSublayerMatrix.scale3d(10, 10, 3.3); | 286 parentSublayerMatrix.Scale3d(10, 10, 3.3); |
301 WebTransformationMatrix parentTranslationToCenter; | 287 gfx::Transform parentTranslationToCenter; |
302 parentTranslationToCenter.translate(5, 6); | 288 parentTranslationToCenter.Translate(5, 6); |
303 // Sublayer matrix is applied to the center of the parent layer. | 289 // Sublayer matrix is applied to the center of the parent layer. |
304 parentCompositeTransform = parentTranslationToAnchor * parentLayerTransform
* parentTranslationToAnchor.inverse() | 290 parentCompositeTransform = parentTranslationToAnchor * parentLayerTransform
* MathUtil::inverse(parentTranslationToAnchor) |
305 * parentTranslationToCenter * parentSublayerMatrix * parentTranslati
onToCenter.inverse(); | 291 * parentTranslationToCenter * parentSublayerMatrix * MathUtil::inver
se(parentTranslationToCenter); |
306 WebTransformationMatrix flattenedCompositeTransform = remove3DComponentOfMat
rix(parentCompositeTransform); | 292 gfx::Transform flattenedCompositeTransform = MathUtil::to2dTransform(parentC
ompositeTransform); |
307 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, parentSubla
yerMatrix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false)
; | 293 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, parentSubla
yerMatrix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false)
; |
308 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); | 294 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); |
309 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); | 295 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(76, 78), false); |
310 executeCalculateDrawTransformsAndVisibility(root.get()); | 296 executeCalculateDrawTransformsAndVisibility(root.get()); |
311 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->drawTransfo
rm()); | 297 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->drawTransfo
rm()); |
312 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->screenSpace
Transform()); | 298 EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->screenSpace
Transform()); |
313 EXPECT_TRANSFORMATION_MATRIX_EQ(flattenedCompositeTransform, grandChild->dra
wTransform()); | 299 EXPECT_TRANSFORMATION_MATRIX_EQ(flattenedCompositeTransform, grandChild->dra
wTransform()); |
314 EXPECT_TRANSFORMATION_MATRIX_EQ(flattenedCompositeTransform, grandChild->scr
eenSpaceTransform()); | 300 EXPECT_TRANSFORMATION_MATRIX_EQ(flattenedCompositeTransform, grandChild->scr
eenSpaceTransform()); |
315 | 301 |
316 // Case 5: same as Case 4, except that child does preserve 3D, so the grandC
hild should receive the non-flattened composite transform. | 302 // Case 5: same as Case 4, except that child does preserve 3D, so the grandC
hild should receive the non-flattened composite transform. |
(...skipping 12 matching lines...) Expand all Loading... |
329 { | 315 { |
330 scoped_refptr<Layer> root = Layer::create(); | 316 scoped_refptr<Layer> root = Layer::create(); |
331 scoped_refptr<Layer> parent = Layer::create(); | 317 scoped_refptr<Layer> parent = Layer::create(); |
332 scoped_refptr<Layer> child = Layer::create(); | 318 scoped_refptr<Layer> child = Layer::create(); |
333 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); | 319 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); |
334 root->addChild(parent); | 320 root->addChild(parent); |
335 parent->addChild(child); | 321 parent->addChild(child); |
336 child->addChild(grandChild); | 322 child->addChild(grandChild); |
337 | 323 |
338 // One-time setup of root layer | 324 // One-time setup of root layer |
339 WebTransformationMatrix identityMatrix; | 325 gfx::Transform identityMatrix; |
340 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); | 326 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); |
341 | 327 |
342 // Child is set up so that a new render surface should be created. | 328 // Child is set up so that a new render surface should be created. |
343 child->setOpacity(0.5); | 329 child->setOpacity(0.5); |
344 | 330 |
345 WebTransformationMatrix parentLayerTransform; | 331 gfx::Transform parentLayerTransform; |
346 parentLayerTransform.scale3d(1, 0.9, 1); | 332 parentLayerTransform.Scale3d(1, 0.9, 1); |
347 WebTransformationMatrix parentTranslationToAnchor; | 333 gfx::Transform parentTranslationToAnchor; |
348 parentTranslationToAnchor.translate(25, 30); | 334 parentTranslationToAnchor.Translate(25, 30); |
349 WebTransformationMatrix parentSublayerMatrix; | 335 gfx::Transform parentSublayerMatrix; |
350 parentSublayerMatrix.scale3d(0.9, 1, 3.3); | 336 parentSublayerMatrix.Scale3d(0.9, 1, 3.3); |
351 WebTransformationMatrix parentTranslationToCenter; | 337 gfx::Transform parentTranslationToCenter; |
352 parentTranslationToCenter.translate(50, 60); | 338 parentTranslationToCenter.Translate(50, 60); |
353 WebTransformationMatrix parentCompositeTransform = parentTranslationToAnchor
* parentLayerTransform * parentTranslationToAnchor.inverse() | 339 gfx::Transform parentCompositeTransform = parentTranslationToAnchor * parent
LayerTransform * MathUtil::inverse(parentTranslationToAnchor) |
354 * parentTranslationToCenter * parentSublayerMatrix * parentTranslati
onToCenter.inverse(); | 340 * parentTranslationToCenter * parentSublayerMatrix * MathUtil::inver
se(parentTranslationToCenter); |
355 gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleCompo
nents(parentCompositeTransform); | 341 gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleCompo
nents(parentCompositeTransform); |
356 WebTransformationMatrix surfaceSublayerTransform; | 342 gfx::Transform surfaceSublayerTransform; |
357 surfaceSublayerTransform.scaleNonUniform(parentCompositeScale.x(), parentCom
positeScale.y()); | 343 surfaceSublayerTransform.Scale(parentCompositeScale.x(), parentCompositeScal
e.y()); |
358 WebTransformationMatrix surfaceSublayerCompositeTransform = parentCompositeT
ransform * surfaceSublayerTransform.inverse(); | 344 gfx::Transform surfaceSublayerCompositeTransform = parentCompositeTransform
* MathUtil::inverse(surfaceSublayerTransform); |
359 | 345 |
360 // Child's render surface should not exist yet. | 346 // Child's render surface should not exist yet. |
361 ASSERT_FALSE(child->renderSurface()); | 347 ASSERT_FALSE(child->renderSurface()); |
362 | 348 |
363 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, parentSubla
yerMatrix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(100, 120), fals
e); | 349 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, parentSubla
yerMatrix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(100, 120), fals
e); |
364 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); | 350 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); |
365 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(8, 10), false); | 351 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(8, 10), false); |
366 executeCalculateDrawTransformsAndVisibility(root.get()); | 352 executeCalculateDrawTransformsAndVisibility(root.get()); |
367 | 353 |
368 // Render surface should have been created now. | 354 // Render surface should have been created now. |
(...skipping 19 matching lines...) Expand all Loading... |
388 scoped_refptr<Layer> parent = Layer::create(); | 374 scoped_refptr<Layer> parent = Layer::create(); |
389 scoped_refptr<Layer> child = Layer::create(); | 375 scoped_refptr<Layer> child = Layer::create(); |
390 scoped_refptr<Layer> childReplica = Layer::create(); | 376 scoped_refptr<Layer> childReplica = Layer::create(); |
391 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); | 377 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); |
392 root->addChild(parent); | 378 root->addChild(parent); |
393 parent->addChild(child); | 379 parent->addChild(child); |
394 child->addChild(grandChild); | 380 child->addChild(grandChild); |
395 child->setReplicaLayer(childReplica.get()); | 381 child->setReplicaLayer(childReplica.get()); |
396 | 382 |
397 // One-time setup of root layer | 383 // One-time setup of root layer |
398 WebTransformationMatrix identityMatrix; | 384 gfx::Transform identityMatrix; |
399 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); | 385 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); |
400 | 386 |
401 // Child is set up so that a new render surface should be created. | 387 // Child is set up so that a new render surface should be created. |
402 child->setOpacity(0.5); | 388 child->setOpacity(0.5); |
403 | 389 |
404 WebTransformationMatrix parentLayerTransform; | 390 gfx::Transform parentLayerTransform; |
405 parentLayerTransform.scale3d(2, 2, 1); | 391 parentLayerTransform.Scale3d(2, 2, 1); |
406 WebTransformationMatrix parentTranslationToAnchor; | 392 gfx::Transform parentTranslationToAnchor; |
407 parentTranslationToAnchor.translate(2.5, 3); | 393 parentTranslationToAnchor.Translate(2.5, 3); |
408 WebTransformationMatrix parentSublayerMatrix; | 394 gfx::Transform parentSublayerMatrix; |
409 parentSublayerMatrix.scale3d(10, 10, 3.3); | 395 parentSublayerMatrix.Scale3d(10, 10, 3.3); |
410 WebTransformationMatrix parentTranslationToCenter; | 396 gfx::Transform parentTranslationToCenter; |
411 parentTranslationToCenter.translate(5, 6); | 397 parentTranslationToCenter.Translate(5, 6); |
412 WebTransformationMatrix parentCompositeTransform = parentTranslationToAnchor
* parentLayerTransform * parentTranslationToAnchor.inverse() | 398 gfx::Transform parentCompositeTransform = parentTranslationToAnchor * parent
LayerTransform * MathUtil::inverse(parentTranslationToAnchor) |
413 * parentTranslationToCenter * parentSublayerMatrix * parentTranslati
onToCenter.inverse(); | 399 * parentTranslationToCenter * parentSublayerMatrix * MathUtil::inver
se(parentTranslationToCenter); |
414 WebTransformationMatrix childTranslationToCenter; | 400 gfx::Transform childTranslationToCenter; |
415 childTranslationToCenter.translate(8, 9); | 401 childTranslationToCenter.Translate(8, 9); |
416 WebTransformationMatrix replicaLayerTransform; | 402 gfx::Transform replicaLayerTransform; |
417 replicaLayerTransform.scale3d(3, 3, 1); | 403 replicaLayerTransform.Scale3d(3, 3, 1); |
418 gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleCompo
nents(parentCompositeTransform); | 404 gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleCompo
nents(parentCompositeTransform); |
419 WebTransformationMatrix surfaceSublayerTransform; | 405 gfx::Transform surfaceSublayerTransform; |
420 surfaceSublayerTransform.scaleNonUniform(parentCompositeScale.x(), parentCom
positeScale.y()); | 406 surfaceSublayerTransform.Scale(parentCompositeScale.x(), parentCompositeScal
e.y()); |
421 WebTransformationMatrix replicaCompositeTransform = parentCompositeTransform
* replicaLayerTransform * surfaceSublayerTransform.inverse(); | 407 gfx::Transform replicaCompositeTransform = parentCompositeTransform * replic
aLayerTransform * MathUtil::inverse(surfaceSublayerTransform); |
422 | 408 |
423 // Child's render surface should not exist yet. | 409 // Child's render surface should not exist yet. |
424 ASSERT_FALSE(child->renderSurface()); | 410 ASSERT_FALSE(child->renderSurface()); |
425 | 411 |
426 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, parentSubla
yerMatrix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false)
; | 412 setLayerPropertiesForTesting(parent.get(), parentLayerTransform, parentSubla
yerMatrix, gfx::PointF(0.25, 0.25), gfx::PointF(0, 0), gfx::Size(10, 12), false)
; |
427 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); | 413 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(16, 18), false); |
428 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(-0.5, -0.5), gfx::Size(1, 1), false); | 414 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(-0.5, -0.5), gfx::Size(1, 1), false); |
429 setLayerPropertiesForTesting(childReplica.get(), replicaLayerTransform, iden
tityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(0, 0), false); | 415 setLayerPropertiesForTesting(childReplica.get(), replicaLayerTransform, iden
tityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(0, 0), false); |
430 executeCalculateDrawTransformsAndVisibility(root.get()); | 416 executeCalculateDrawTransformsAndVisibility(root.get()); |
431 | 417 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 childOfRS1->addChild(grandChildOfRS1); | 454 childOfRS1->addChild(grandChildOfRS1); |
469 childOfRS2->addChild(grandChildOfRS2); | 455 childOfRS2->addChild(grandChildOfRS2); |
470 renderSurface1->setReplicaLayer(replicaOfRS1.get()); | 456 renderSurface1->setReplicaLayer(replicaOfRS1.get()); |
471 renderSurface2->setReplicaLayer(replicaOfRS2.get()); | 457 renderSurface2->setReplicaLayer(replicaOfRS2.get()); |
472 | 458 |
473 // In combination with descendantDrawsContent, opacity != 1 forces the layer
to have a new renderSurface. | 459 // In combination with descendantDrawsContent, opacity != 1 forces the layer
to have a new renderSurface. |
474 renderSurface1->setOpacity(0.5); | 460 renderSurface1->setOpacity(0.5); |
475 renderSurface2->setOpacity(0.33f); | 461 renderSurface2->setOpacity(0.33f); |
476 | 462 |
477 // One-time setup of root layer | 463 // One-time setup of root layer |
478 WebTransformationMatrix identityMatrix; | 464 gfx::Transform identityMatrix; |
479 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); | 465 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(1, 2), false); |
480 | 466 |
481 // All layers in the tree are initialized with an anchor at .25 and a size o
f (10,10). | 467 // All layers in the tree are initialized with an anchor at .25 and a size o
f (10,10). |
482 // matrix "A" is the composite layer transform used in all layers, centered
about the anchor point | 468 // matrix "A" is the composite layer transform used in all layers, centered
about the anchor point |
483 // matrix "B" is the sublayer transform used in all layers, centered about t
he center position of the layer. | 469 // matrix "B" is the sublayer transform used in all layers, centered about t
he center position of the layer. |
484 // matrix "R" is the composite replica transform used in all replica layers. | 470 // matrix "R" is the composite replica transform used in all replica layers. |
485 // | 471 // |
486 // x component tests that layerTransform and sublayerTransform are done in t
he right order (translation and scale are noncommutative). | 472 // x component tests that layerTransform and sublayerTransform are done in t
he right order (translation and scale are noncommutative). |
487 // y component has a translation by 1 for every ancestor, which indicates th
e "depth" of the layer in the hierarchy. | 473 // y component has a translation by 1 for every ancestor, which indicates th
e "depth" of the layer in the hierarchy. |
488 WebTransformationMatrix translationToAnchor; | 474 gfx::Transform translationToAnchor; |
489 translationToAnchor.translate(2.5, 0); | 475 translationToAnchor.Translate(2.5, 0); |
490 WebTransformationMatrix translationToCenter; | 476 gfx::Transform translationToCenter; |
491 translationToCenter.translate(5, 5); | 477 translationToCenter.Translate(5, 5); |
492 WebTransformationMatrix layerTransform; | 478 gfx::Transform layerTransform; |
493 layerTransform.translate(1, 1); | 479 layerTransform.Translate(1, 1); |
494 WebTransformationMatrix sublayerTransform; | 480 gfx::Transform sublayerTransform; |
495 sublayerTransform.scale3d(10, 1, 1); | 481 sublayerTransform.Scale3d(10, 1, 1); |
496 WebTransformationMatrix replicaLayerTransform; | 482 gfx::Transform replicaLayerTransform; |
497 replicaLayerTransform.scale3d(-2, 5, 1); | 483 replicaLayerTransform.Scale3d(-2, 5, 1); |
498 | 484 |
499 WebTransformationMatrix A = translationToAnchor * layerTransform * translati
onToAnchor.inverse(); | 485 gfx::Transform A = translationToAnchor * layerTransform * MathUtil::inverse(
translationToAnchor); |
500 WebTransformationMatrix B = translationToCenter * sublayerTransform * transl
ationToCenter.inverse(); | 486 gfx::Transform B = translationToCenter * sublayerTransform * MathUtil::inver
se(translationToCenter); |
501 WebTransformationMatrix R = A * translationToAnchor * replicaLayerTransform
* translationToAnchor.inverse(); | 487 gfx::Transform R = A * translationToAnchor * replicaLayerTransform * MathUti
l::inverse(translationToAnchor); |
502 | 488 |
503 gfx::Vector2dF surface1ParentTransformScale = MathUtil::computeTransform2dSc
aleComponents(A * B); | 489 gfx::Vector2dF surface1ParentTransformScale = MathUtil::computeTransform2dSc
aleComponents(A * B); |
504 WebTransformationMatrix surface1SublayerTransform; | 490 gfx::Transform surface1SublayerTransform; |
505 surface1SublayerTransform.scaleNonUniform(surface1ParentTransformScale.x(),
surface1ParentTransformScale.y()); | 491 surface1SublayerTransform.Scale(surface1ParentTransformScale.x(), surface1Pa
rentTransformScale.y()); |
506 | 492 |
507 // SS1 = transform given to the subtree of renderSurface1 | 493 // SS1 = transform given to the subtree of renderSurface1 |
508 WebTransformationMatrix SS1 = surface1SublayerTransform; | 494 gfx::Transform SS1 = surface1SublayerTransform; |
509 // S1 = transform to move from renderSurface1 pixels to the layer space of t
he owning layer | 495 // S1 = transform to move from renderSurface1 pixels to the layer space of t
he owning layer |
510 WebTransformationMatrix S1 = surface1SublayerTransform.inverse(); | 496 gfx::Transform S1 = MathUtil::inverse(surface1SublayerTransform); |
511 | 497 |
512 gfx::Vector2dF surface2ParentTransformScale = MathUtil::computeTransform2dSc
aleComponents(SS1 * A * B); | 498 gfx::Vector2dF surface2ParentTransformScale = MathUtil::computeTransform2dSc
aleComponents(SS1 * A * B); |
513 WebTransformationMatrix surface2SublayerTransform; | 499 gfx::Transform surface2SublayerTransform; |
514 surface2SublayerTransform.scaleNonUniform(surface2ParentTransformScale.x(),
surface2ParentTransformScale.y()); | 500 surface2SublayerTransform.Scale(surface2ParentTransformScale.x(), surface2Pa
rentTransformScale.y()); |
515 | 501 |
516 // SS2 = transform given to the subtree of renderSurface2 | 502 // SS2 = transform given to the subtree of renderSurface2 |
517 WebTransformationMatrix SS2 = surface2SublayerTransform; | 503 gfx::Transform SS2 = surface2SublayerTransform; |
518 // S2 = transform to move from renderSurface2 pixels to the layer space of t
he owning layer | 504 // S2 = transform to move from renderSurface2 pixels to the layer space of t
he owning layer |
519 WebTransformationMatrix S2 = surface2SublayerTransform.inverse(); | 505 gfx::Transform S2 = MathUtil::inverse(surface2SublayerTransform); |
520 | 506 |
521 setLayerPropertiesForTesting(parent.get(), layerTransform, sublayerTransform
, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 507 setLayerPropertiesForTesting(parent.get(), layerTransform, sublayerTransform
, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
522 setLayerPropertiesForTesting(renderSurface1.get(), layerTransform, sublayerT
ransform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 508 setLayerPropertiesForTesting(renderSurface1.get(), layerTransform, sublayerT
ransform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
523 setLayerPropertiesForTesting(renderSurface2.get(), layerTransform, sublayerT
ransform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 509 setLayerPropertiesForTesting(renderSurface2.get(), layerTransform, sublayerT
ransform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
524 setLayerPropertiesForTesting(childOfRoot.get(), layerTransform, sublayerTran
sform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 510 setLayerPropertiesForTesting(childOfRoot.get(), layerTransform, sublayerTran
sform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
525 setLayerPropertiesForTesting(childOfRS1.get(), layerTransform, sublayerTrans
form, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 511 setLayerPropertiesForTesting(childOfRS1.get(), layerTransform, sublayerTrans
form, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
526 setLayerPropertiesForTesting(childOfRS2.get(), layerTransform, sublayerTrans
form, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 512 setLayerPropertiesForTesting(childOfRS2.get(), layerTransform, sublayerTrans
form, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
527 setLayerPropertiesForTesting(grandChildOfRoot.get(), layerTransform, sublaye
rTransform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 513 setLayerPropertiesForTesting(grandChildOfRoot.get(), layerTransform, sublaye
rTransform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
528 setLayerPropertiesForTesting(grandChildOfRS1.get(), layerTransform, sublayer
Transform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 514 setLayerPropertiesForTesting(grandChildOfRS1.get(), layerTransform, sublayer
Transform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
529 setLayerPropertiesForTesting(grandChildOfRS2.get(), layerTransform, sublayer
Transform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); | 515 setLayerPropertiesForTesting(grandChildOfRS2.get(), layerTransform, sublayer
Transform, gfx::PointF(0.25, 0), gfx::PointF(0, 0), gfx::Size(10, 10), false); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * R * S1, renderSurface1->renderSurfac
e()->replicaScreenSpaceTransform()); | 585 EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * R * S1, renderSurface1->renderSurfac
e()->replicaScreenSpaceTransform()); |
600 // Draw transform of render surface 2 is described with respect to render su
rface 1. | 586 // Draw transform of render surface 2 is described with respect to render su
rface 1. |
601 EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * A * S2, renderSurface2->renderSurf
ace()->drawTransform()); | 587 EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * A * S2, renderSurface2->renderSurf
ace()->drawTransform()); |
602 EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * R * S2, renderSurface2->renderSurf
ace()->replicaDrawTransform()); | 588 EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * R * S2, renderSurface2->renderSurf
ace()->replicaDrawTransform()); |
603 EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * A * S2, renderSurface2->rend
erSurface()->screenSpaceTransform()); | 589 EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * A * S2, renderSurface2->rend
erSurface()->screenSpaceTransform()); |
604 EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * R * S2, renderSurface2->rend
erSurface()->replicaScreenSpaceTransform()); | 590 EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * R * S2, renderSurface2->rend
erSurface()->replicaScreenSpaceTransform()); |
605 | 591 |
606 // Sanity check. If these fail there is probably a bug in the test itself. | 592 // Sanity check. If these fail there is probably a bug in the test itself. |
607 // It is expected that we correctly set up transforms so that the y-componen
t of the screen-space transform | 593 // It is expected that we correctly set up transforms so that the y-componen
t of the screen-space transform |
608 // encodes the "depth" of the layer in the tree. | 594 // encodes the "depth" of the layer in the tree. |
609 EXPECT_FLOAT_EQ(1, parent->screenSpaceTransform().m42()); | 595 EXPECT_FLOAT_EQ(1, parent->screenSpaceTransform().matrix().getDouble(1, 3)); |
610 EXPECT_FLOAT_EQ(2, childOfRoot->screenSpaceTransform().m42()); | 596 EXPECT_FLOAT_EQ(2, childOfRoot->screenSpaceTransform().matrix().getDouble(1,
3)); |
611 EXPECT_FLOAT_EQ(3, grandChildOfRoot->screenSpaceTransform().m42()); | 597 EXPECT_FLOAT_EQ(3, grandChildOfRoot->screenSpaceTransform().matrix().getDoub
le(1, 3)); |
612 | 598 |
613 EXPECT_FLOAT_EQ(2, renderSurface1->screenSpaceTransform().m42()); | 599 EXPECT_FLOAT_EQ(2, renderSurface1->screenSpaceTransform().matrix().getDouble
(1, 3)); |
614 EXPECT_FLOAT_EQ(3, childOfRS1->screenSpaceTransform().m42()); | 600 EXPECT_FLOAT_EQ(3, childOfRS1->screenSpaceTransform().matrix().getDouble(1,
3)); |
615 EXPECT_FLOAT_EQ(4, grandChildOfRS1->screenSpaceTransform().m42()); | 601 EXPECT_FLOAT_EQ(4, grandChildOfRS1->screenSpaceTransform().matrix().getDoubl
e(1, 3)); |
616 | 602 |
617 EXPECT_FLOAT_EQ(3, renderSurface2->screenSpaceTransform().m42()); | 603 EXPECT_FLOAT_EQ(3, renderSurface2->screenSpaceTransform().matrix().getDouble
(1, 3)); |
618 EXPECT_FLOAT_EQ(4, childOfRS2->screenSpaceTransform().m42()); | 604 EXPECT_FLOAT_EQ(4, childOfRS2->screenSpaceTransform().matrix().getDouble(1,
3)); |
619 EXPECT_FLOAT_EQ(5, grandChildOfRS2->screenSpaceTransform().m42()); | 605 EXPECT_FLOAT_EQ(5, grandChildOfRS2->screenSpaceTransform().matrix().getDoubl
e(1, 3)); |
620 } | 606 } |
621 | 607 |
622 TEST(LayerTreeHostCommonTest, verifyTransformsForFlatteningLayer) | 608 TEST(LayerTreeHostCommonTest, verifyTransformsForFlatteningLayer) |
623 { | 609 { |
624 // For layers that flatten their subtree, there should be an orthographic pr
ojection | 610 // For layers that flatten their subtree, there should be an orthographic pr
ojection |
625 // (for x and y values) in the middle of the transform sequence. Note that t
he way the | 611 // (for x and y values) in the middle of the transform sequence. Note that t
he way the |
626 // code is currently implemented, it is not expected to use a canonical orth
ographic | 612 // code is currently implemented, it is not expected to use a canonical orth
ographic |
627 // projection. | 613 // projection. |
628 | 614 |
629 scoped_refptr<Layer> root = Layer::create(); | 615 scoped_refptr<Layer> root = Layer::create(); |
630 scoped_refptr<Layer> child = Layer::create(); | 616 scoped_refptr<Layer> child = Layer::create(); |
631 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); | 617 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); |
632 | 618 |
633 WebTransformationMatrix rotationAboutYAxis; | 619 gfx::Transform rotationAboutYAxis; |
634 rotationAboutYAxis.rotate3d(0, 30, 0); | 620 MathUtil::rotateEulerAngles(&rotationAboutYAxis, 0, 30, 0); |
635 | 621 |
636 const WebTransformationMatrix identityMatrix; | 622 const gfx::Transform identityMatrix; |
637 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(), gfx::PointF(), gfx::Size(100, 100), false); | 623 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(), gfx::PointF(), gfx::Size(100, 100), false); |
638 setLayerPropertiesForTesting(child.get(), rotationAboutYAxis, identityMatrix
, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 624 setLayerPropertiesForTesting(child.get(), rotationAboutYAxis, identityMatrix
, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
639 setLayerPropertiesForTesting(grandChild.get(), rotationAboutYAxis, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 625 setLayerPropertiesForTesting(grandChild.get(), rotationAboutYAxis, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
640 | 626 |
641 root->addChild(child); | 627 root->addChild(child); |
642 child->addChild(grandChild); | 628 child->addChild(grandChild); |
643 child->setForceRenderSurface(true); | 629 child->setForceRenderSurface(true); |
644 | 630 |
645 // No layers in this test should preserve 3d. | 631 // No layers in this test should preserve 3d. |
646 ASSERT_FALSE(root->preserves3D()); | 632 ASSERT_FALSE(root->preserves3D()); |
647 ASSERT_FALSE(child->preserves3D()); | 633 ASSERT_FALSE(child->preserves3D()); |
648 ASSERT_FALSE(grandChild->preserves3D()); | 634 ASSERT_FALSE(grandChild->preserves3D()); |
649 | 635 |
650 WebTransformationMatrix expectedChildDrawTransform = rotationAboutYAxis; | 636 gfx::Transform expectedChildDrawTransform = rotationAboutYAxis; |
651 WebTransformationMatrix expectedChildScreenSpaceTransform = rotationAboutYAx
is; | 637 gfx::Transform expectedChildScreenSpaceTransform = rotationAboutYAxis; |
652 WebTransformationMatrix expectedGrandChildDrawTransform = rotationAboutYAxis
; // draws onto child's renderSurface | 638 gfx::Transform expectedGrandChildDrawTransform = rotationAboutYAxis; // draw
s onto child's renderSurface |
653 WebTransformationMatrix expectedGrandChildScreenSpaceTransform = rotationAbo
utYAxis.to2dTransform() * rotationAboutYAxis; | 639 gfx::Transform expectedGrandChildScreenSpaceTransform = MathUtil::to2dTransf
orm(rotationAboutYAxis) * rotationAboutYAxis; |
654 | 640 |
655 executeCalculateDrawTransformsAndVisibility(root.get()); | 641 executeCalculateDrawTransformsAndVisibility(root.get()); |
656 | 642 |
657 // The child's drawTransform should have been taken by its surface. | 643 // The child's drawTransform should have been taken by its surface. |
658 ASSERT_TRUE(child->renderSurface()); | 644 ASSERT_TRUE(child->renderSurface()); |
659 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildDrawTransform, child->renderSur
face()->drawTransform()); | 645 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildDrawTransform, child->renderSur
face()->drawTransform()); |
660 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildScreenSpaceTransform, child->re
nderSurface()->screenSpaceTransform()); | 646 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildScreenSpaceTransform, child->re
nderSurface()->screenSpaceTransform()); |
661 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); | 647 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
662 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildScreenSpaceTransform, child->sc
reenSpaceTransform()); | 648 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildScreenSpaceTransform, child->sc
reenSpaceTransform()); |
663 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildDrawTransform, grandChild-
>drawTransform()); | 649 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildDrawTransform, grandChild-
>drawTransform()); |
664 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildScreenSpaceTransform, gran
dChild->screenSpaceTransform()); | 650 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildScreenSpaceTransform, gran
dChild->screenSpaceTransform()); |
665 } | 651 } |
666 | 652 |
667 TEST(LayerTreeHostCommonTest, verifyTransformsForDegenerateIntermediateLayer) | 653 TEST(LayerTreeHostCommonTest, verifyTransformsForDegenerateIntermediateLayer) |
668 { | 654 { |
669 // A layer that is empty in one axis, but not the other, was accidentally sk
ipping a necessary translation. | 655 // A layer that is empty in one axis, but not the other, was accidentally sk
ipping a necessary translation. |
670 // Without that translation, the coordinate space of the layer's drawTransfo
rm is incorrect. | 656 // Without that translation, the coordinate space of the layer's drawTransfo
rm is incorrect. |
671 // | 657 // |
672 // Normally this isn't a problem, because the layer wouldn't be drawn anyway
, but if that layer becomes a renderSurface, then | 658 // Normally this isn't a problem, because the layer wouldn't be drawn anyway
, but if that layer becomes a renderSurface, then |
673 // its drawTransform is implicitly inherited by the rest of the subtree, whi
ch then is positioned incorrectly as a result. | 659 // its drawTransform is implicitly inherited by the rest of the subtree, whi
ch then is positioned incorrectly as a result. |
674 | 660 |
675 scoped_refptr<Layer> root = Layer::create(); | 661 scoped_refptr<Layer> root = Layer::create(); |
676 scoped_refptr<Layer> child = Layer::create(); | 662 scoped_refptr<Layer> child = Layer::create(); |
677 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); | 663 scoped_refptr<LayerWithForcedDrawsContent> grandChild = make_scoped_refptr(n
ew LayerWithForcedDrawsContent()); |
678 | 664 |
679 // The child height is zero, but has non-zero width that should be accounted
for while computing drawTransforms. | 665 // The child height is zero, but has non-zero width that should be accounted
for while computing drawTransforms. |
680 const WebTransformationMatrix identityMatrix; | 666 const gfx::Transform identityMatrix; |
681 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(), gfx::PointF(), gfx::Size(100, 100), false); | 667 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(), gfx::PointF(), gfx::Size(100, 100), false); |
682 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(), gfx::Size(10, 0), false); | 668 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(), gfx::Size(10, 0), false); |
683 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 669 setLayerPropertiesForTesting(grandChild.get(), identityMatrix, identityMatri
x, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
684 | 670 |
685 root->addChild(child); | 671 root->addChild(child); |
686 child->addChild(grandChild); | 672 child->addChild(grandChild); |
687 child->setForceRenderSurface(true); | 673 child->setForceRenderSurface(true); |
688 | 674 |
689 executeCalculateDrawTransformsAndVisibility(root.get()); | 675 executeCalculateDrawTransformsAndVisibility(root.get()); |
690 | 676 |
691 ASSERT_TRUE(child->renderSurface()); | 677 ASSERT_TRUE(child->renderSurface()); |
692 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->renderSurface()->draw
Transform()); // This is the real test, the rest are sanity checks. | 678 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->renderSurface()->draw
Transform()); // This is the real test, the rest are sanity checks. |
693 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); | 679 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
694 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; | 680 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; |
695 } | 681 } |
696 | 682 |
697 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceListForRenderSurfaceWithClipped
Layer) | 683 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceListForRenderSurfaceWithClipped
Layer) |
698 { | 684 { |
699 scoped_refptr<Layer> parent = Layer::create(); | 685 scoped_refptr<Layer> parent = Layer::create(); |
700 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 686 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
701 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); | 687 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); |
702 | 688 |
703 const WebTransformationMatrix identityMatrix; | 689 const gfx::Transform identityMatrix; |
704 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 690 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
705 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 691 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
706 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(30, 30), gfx::Size(10, 10), false); | 692 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(30, 30), gfx::Size(10, 10), false); |
707 | 693 |
708 parent->addChild(renderSurface1); | 694 parent->addChild(renderSurface1); |
709 parent->setMasksToBounds(true); | 695 parent->setMasksToBounds(true); |
710 renderSurface1->addChild(child); | 696 renderSurface1->addChild(child); |
711 renderSurface1->setForceRenderSurface(true); | 697 renderSurface1->setForceRenderSurface(true); |
712 | 698 |
713 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 699 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
714 int dummyMaxTextureSize = 512; | 700 int dummyMaxTextureSize = 512; |
715 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
1, 1, dummyMaxTextureSize, renderSurfaceLayerList); | 701 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
716 | 702 |
717 // The child layer's content is entirely outside the parent's clip rect, so
the intermediate | 703 // The child layer's content is entirely outside the parent's clip rect, so
the intermediate |
718 // render surface should not be listed here, even if it was forced to be cre
ated. Render surfaces without children or visible | 704 // render surface should not be listed here, even if it was forced to be cre
ated. Render surfaces without children or visible |
719 // content are unexpected at draw time (e.g. we might try to create a conten
t texture of size 0). | 705 // content are unexpected at draw time (e.g. we might try to create a conten
t texture of size 0). |
720 ASSERT_TRUE(parent->renderSurface()); | 706 ASSERT_TRUE(parent->renderSurface()); |
721 ASSERT_FALSE(renderSurface1->renderSurface()); | 707 ASSERT_FALSE(renderSurface1->renderSurface()); |
722 EXPECT_EQ(1U, renderSurfaceLayerList.size()); | 708 EXPECT_EQ(1U, renderSurfaceLayerList.size()); |
723 } | 709 } |
724 | 710 |
725 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceListForTransparentChild) | 711 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceListForTransparentChild) |
726 { | 712 { |
727 scoped_refptr<Layer> parent = Layer::create(); | 713 scoped_refptr<Layer> parent = Layer::create(); |
728 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 714 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
729 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); | 715 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); |
730 | 716 |
731 const WebTransformationMatrix identityMatrix; | 717 const gfx::Transform identityMatrix; |
732 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 718 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
733 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 719 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
734 | 720 |
735 parent->addChild(renderSurface1); | 721 parent->addChild(renderSurface1); |
736 renderSurface1->addChild(child); | 722 renderSurface1->addChild(child); |
737 renderSurface1->setForceRenderSurface(true); | 723 renderSurface1->setForceRenderSurface(true); |
738 renderSurface1->setOpacity(0); | 724 renderSurface1->setOpacity(0); |
739 | 725 |
740 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 726 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
741 int dummyMaxTextureSize = 512; | 727 int dummyMaxTextureSize = 512; |
742 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
1, 1, dummyMaxTextureSize, renderSurfaceLayerList); | 728 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
743 | 729 |
744 // Since the layer is transparent, renderSurface1->renderSurface() should no
t have gotten added anywhere. | 730 // Since the layer is transparent, renderSurface1->renderSurface() should no
t have gotten added anywhere. |
745 // Also, the drawable content rect should not have been extended by the chil
dren. | 731 // Also, the drawable content rect should not have been extended by the chil
dren. |
746 ASSERT_TRUE(parent->renderSurface()); | 732 ASSERT_TRUE(parent->renderSurface()); |
747 EXPECT_EQ(0U, parent->renderSurface()->layerList().size()); | 733 EXPECT_EQ(0U, parent->renderSurface()->layerList().size()); |
748 EXPECT_EQ(1U, renderSurfaceLayerList.size()); | 734 EXPECT_EQ(1U, renderSurfaceLayerList.size()); |
749 EXPECT_EQ(parent->id(), renderSurfaceLayerList[0]->id()); | 735 EXPECT_EQ(parent->id(), renderSurfaceLayerList[0]->id()); |
750 EXPECT_EQ(gfx::Rect(), parent->drawableContentRect()); | 736 EXPECT_EQ(gfx::Rect(), parent->drawableContentRect()); |
751 } | 737 } |
752 | 738 |
753 TEST(LayerTreeHostCommonTest, verifyForceRenderSurface) | 739 TEST(LayerTreeHostCommonTest, verifyForceRenderSurface) |
754 { | 740 { |
755 scoped_refptr<Layer> parent = Layer::create(); | 741 scoped_refptr<Layer> parent = Layer::create(); |
756 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 742 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
757 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); | 743 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); |
758 renderSurface1->setForceRenderSurface(true); | 744 renderSurface1->setForceRenderSurface(true); |
759 | 745 |
760 const WebTransformationMatrix identityMatrix; | 746 const gfx::Transform identityMatrix; |
761 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 747 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
762 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 748 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
763 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(), gfx::Size(10, 10), false); | 749 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(), gfx::PointF(), gfx::Size(10, 10), false); |
764 | 750 |
765 parent->addChild(renderSurface1); | 751 parent->addChild(renderSurface1); |
766 renderSurface1->addChild(child); | 752 renderSurface1->addChild(child); |
767 | 753 |
768 // Sanity check before the actual test | 754 // Sanity check before the actual test |
769 EXPECT_FALSE(parent->renderSurface()); | 755 EXPECT_FALSE(parent->renderSurface()); |
770 EXPECT_FALSE(renderSurface1->renderSurface()); | 756 EXPECT_FALSE(renderSurface1->renderSurface()); |
(...skipping 23 matching lines...) Expand all Loading... |
794 LayerImpl* child = root->children()[0]; | 780 LayerImpl* child = root->children()[0]; |
795 LayerImpl* grandChild = child->children()[0]; | 781 LayerImpl* grandChild = child->children()[0]; |
796 | 782 |
797 child->setIsContainerForFixedPositionLayers(true); | 783 child->setIsContainerForFixedPositionLayers(true); |
798 grandChild->setFixedToContainerLayer(true); | 784 grandChild->setFixedToContainerLayer(true); |
799 | 785 |
800 // Case 1: scrollDelta of 0, 0 | 786 // Case 1: scrollDelta of 0, 0 |
801 child->setScrollDelta(gfx::Vector2d(0, 0)); | 787 child->setScrollDelta(gfx::Vector2d(0, 0)); |
802 executeCalculateDrawTransformsAndVisibility(root.get()); | 788 executeCalculateDrawTransformsAndVisibility(root.get()); |
803 | 789 |
804 WebTransformationMatrix expectedChildTransform; | 790 gfx::Transform expectedChildTransform; |
805 WebTransformationMatrix expectedGrandChildTransform = expectedChildTransform
; | 791 gfx::Transform expectedGrandChildTransform = expectedChildTransform; |
806 | 792 |
807 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 793 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
808 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 794 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
809 | 795 |
810 // Case 2: scrollDelta of 10, 10 | 796 // Case 2: scrollDelta of 10, 10 |
811 child->setScrollDelta(gfx::Vector2d(10, 10)); | 797 child->setScrollDelta(gfx::Vector2d(10, 10)); |
812 executeCalculateDrawTransformsAndVisibility(root.get()); | 798 executeCalculateDrawTransformsAndVisibility(root.get()); |
813 | 799 |
814 // Here the child is affected by scrollDelta, but the fixed position grandCh
ild should not be affected. | 800 // Here the child is affected by scrollDelta, but the fixed position grandCh
ild should not be affected. |
815 expectedChildTransform.makeIdentity(); | 801 expectedChildTransform.MakeIdentity(); |
816 expectedChildTransform.translate(-10, -10); | 802 expectedChildTransform.Translate(-10, -10); |
817 | 803 |
818 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 804 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
819 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 805 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
820 } | 806 } |
821 | 807 |
822 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithT
ransformedDirectContainer) | 808 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithT
ransformedDirectContainer) |
823 { | 809 { |
824 // This test checks for correct scroll compensation when the fixed-position
container | 810 // This test checks for correct scroll compensation when the fixed-position
container |
825 // is the direct parent of the fixed-position layer, but that container is t
ransformed. | 811 // is the direct parent of the fixed-position layer, but that container is t
ransformed. |
826 // In this case, the fixed position element inherits the container's transfo
rm, | 812 // In this case, the fixed position element inherits the container's transfo
rm, |
827 // but the scrollDelta that has to be undone should not be affected by that
transform. | 813 // but the scrollDelta that has to be undone should not be affected by that
transform. |
828 // | 814 // |
829 // Transforms are in general non-commutative; using something like a non-uni
form scale | 815 // gfx::Transforms are in general non-commutative; using something like a no
n-uniform scale |
830 // helps to verify that translations and non-uniform scales are applied in t
he correct | 816 // helps to verify that translations and non-uniform scales are applied in t
he correct |
831 // order. | 817 // order. |
832 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 818 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
833 LayerImpl* child = root->children()[0]; | 819 LayerImpl* child = root->children()[0]; |
834 LayerImpl* grandChild = child->children()[0]; | 820 LayerImpl* grandChild = child->children()[0]; |
835 | 821 |
836 // This scale will cause child and grandChild to be effectively 200 x 800 wi
th respect to the renderTarget. | 822 // This scale will cause child and grandChild to be effectively 200 x 800 wi
th respect to the renderTarget. |
837 WebTransformationMatrix nonUniformScale; | 823 gfx::Transform nonUniformScale; |
838 nonUniformScale.scaleNonUniform(2, 8); | 824 nonUniformScale.Scale(2, 8); |
839 child->setTransform(nonUniformScale); | 825 child->setTransform(nonUniformScale); |
840 | 826 |
841 child->setIsContainerForFixedPositionLayers(true); | 827 child->setIsContainerForFixedPositionLayers(true); |
842 grandChild->setFixedToContainerLayer(true); | 828 grandChild->setFixedToContainerLayer(true); |
843 | 829 |
844 // Case 1: scrollDelta of 0, 0 | 830 // Case 1: scrollDelta of 0, 0 |
845 child->setScrollDelta(gfx::Vector2d(0, 0)); | 831 child->setScrollDelta(gfx::Vector2d(0, 0)); |
846 executeCalculateDrawTransformsAndVisibility(root.get()); | 832 executeCalculateDrawTransformsAndVisibility(root.get()); |
847 | 833 |
848 WebTransformationMatrix expectedChildTransform; | 834 gfx::Transform expectedChildTransform; |
849 expectedChildTransform.multiply(nonUniformScale); | 835 expectedChildTransform.PreconcatTransform(nonUniformScale); |
850 | 836 |
851 WebTransformationMatrix expectedGrandChildTransform = expectedChildTransform
; | 837 gfx::Transform expectedGrandChildTransform = expectedChildTransform; |
852 | 838 |
853 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 839 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
854 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 840 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
855 | 841 |
856 // Case 2: scrollDelta of 10, 20 | 842 // Case 2: scrollDelta of 10, 20 |
857 child->setScrollDelta(gfx::Vector2d(10, 20)); | 843 child->setScrollDelta(gfx::Vector2d(10, 20)); |
858 executeCalculateDrawTransformsAndVisibility(root.get()); | 844 executeCalculateDrawTransformsAndVisibility(root.get()); |
859 | 845 |
860 // The child should be affected by scrollDelta, but the fixed position grand
Child should not be affected. | 846 // The child should be affected by scrollDelta, but the fixed position grand
Child should not be affected. |
861 expectedChildTransform.makeIdentity(); | 847 expectedChildTransform.MakeIdentity(); |
862 expectedChildTransform.translate(-10, -20); // scrollDelta | 848 expectedChildTransform.Translate(-10, -20); // scrollDelta |
863 expectedChildTransform.multiply(nonUniformScale); | 849 expectedChildTransform.PreconcatTransform(nonUniformScale); |
864 | 850 |
865 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 851 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
866 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 852 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
867 } | 853 } |
868 | 854 |
869 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithD
istantContainer) | 855 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithD
istantContainer) |
870 { | 856 { |
871 // This test checks for correct scroll compensation when the fixed-position
container | 857 // This test checks for correct scroll compensation when the fixed-position
container |
872 // is NOT the direct parent of the fixed-position layer. | 858 // is NOT the direct parent of the fixed-position layer. |
873 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 859 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
874 LayerImpl* child = root->children()[0]; | 860 LayerImpl* child = root->children()[0]; |
875 LayerImpl* grandChild = child->children()[0]; | 861 LayerImpl* grandChild = child->children()[0]; |
876 LayerImpl* greatGrandChild = grandChild->children()[0]; | 862 LayerImpl* greatGrandChild = grandChild->children()[0]; |
877 | 863 |
878 child->setIsContainerForFixedPositionLayers(true); | 864 child->setIsContainerForFixedPositionLayers(true); |
879 grandChild->setPosition(gfx::PointF(8, 6)); | 865 grandChild->setPosition(gfx::PointF(8, 6)); |
880 greatGrandChild->setFixedToContainerLayer(true); | 866 greatGrandChild->setFixedToContainerLayer(true); |
881 | 867 |
882 // Case 1: scrollDelta of 0, 0 | 868 // Case 1: scrollDelta of 0, 0 |
883 child->setScrollDelta(gfx::Vector2d(0, 0)); | 869 child->setScrollDelta(gfx::Vector2d(0, 0)); |
884 executeCalculateDrawTransformsAndVisibility(root.get()); | 870 executeCalculateDrawTransformsAndVisibility(root.get()); |
885 | 871 |
886 WebTransformationMatrix expectedChildTransform; | 872 gfx::Transform expectedChildTransform; |
887 WebTransformationMatrix expectedGrandChildTransform; | 873 gfx::Transform expectedGrandChildTransform; |
888 expectedGrandChildTransform.translate(8, 6); | 874 expectedGrandChildTransform.Translate(8, 6); |
889 | 875 |
890 WebTransformationMatrix expectedGreatGrandChildTransform = expectedGrandChil
dTransform; | 876 gfx::Transform expectedGreatGrandChildTransform = expectedGrandChildTransfor
m; |
891 | 877 |
892 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 878 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
893 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 879 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
894 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 880 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
895 | 881 |
896 // Case 2: scrollDelta of 10, 10 | 882 // Case 2: scrollDelta of 10, 10 |
897 child->setScrollDelta(gfx::Vector2d(10, 10)); | 883 child->setScrollDelta(gfx::Vector2d(10, 10)); |
898 executeCalculateDrawTransformsAndVisibility(root.get()); | 884 executeCalculateDrawTransformsAndVisibility(root.get()); |
899 | 885 |
900 // Here the child and grandChild are affected by scrollDelta, but the fixed
position greatGrandChild should not be affected. | 886 // Here the child and grandChild are affected by scrollDelta, but the fixed
position greatGrandChild should not be affected. |
901 expectedChildTransform.makeIdentity(); | 887 expectedChildTransform.MakeIdentity(); |
902 expectedChildTransform.translate(-10, -10); | 888 expectedChildTransform.Translate(-10, -10); |
903 expectedGrandChildTransform.makeIdentity(); | 889 expectedGrandChildTransform.MakeIdentity(); |
904 expectedGrandChildTransform.translate(-2, -4); | 890 expectedGrandChildTransform.Translate(-2, -4); |
905 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 891 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
906 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 892 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
907 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 893 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
908 } | 894 } |
909 | 895 |
910 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithD
istantContainerAndTransforms) | 896 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithD
istantContainerAndTransforms) |
911 { | 897 { |
912 // This test checks for correct scroll compensation when the fixed-position
container | 898 // This test checks for correct scroll compensation when the fixed-position
container |
913 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various | 899 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various |
914 // transforms that have to be processed in the correct order. | 900 // transforms that have to be processed in the correct order. |
915 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 901 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
916 LayerImpl* child = root->children()[0]; | 902 LayerImpl* child = root->children()[0]; |
917 LayerImpl* grandChild = child->children()[0]; | 903 LayerImpl* grandChild = child->children()[0]; |
918 LayerImpl* greatGrandChild = grandChild->children()[0]; | 904 LayerImpl* greatGrandChild = grandChild->children()[0]; |
919 | 905 |
920 WebTransformationMatrix rotationAboutZ; | 906 gfx::Transform rotationAboutZ; |
921 rotationAboutZ.rotate3d(0, 0, 90); | 907 MathUtil::rotateEulerAngles(&rotationAboutZ, 0, 0, 90); |
922 | 908 |
923 child->setIsContainerForFixedPositionLayers(true); | 909 child->setIsContainerForFixedPositionLayers(true); |
924 child->setTransform(rotationAboutZ); | 910 child->setTransform(rotationAboutZ); |
925 grandChild->setPosition(gfx::PointF(8, 6)); | 911 grandChild->setPosition(gfx::PointF(8, 6)); |
926 grandChild->setTransform(rotationAboutZ); | 912 grandChild->setTransform(rotationAboutZ); |
927 greatGrandChild->setFixedToContainerLayer(true); // greatGrandChild is posit
ioned upside-down with respect to the renderTarget. | 913 greatGrandChild->setFixedToContainerLayer(true); // greatGrandChild is posit
ioned upside-down with respect to the renderTarget. |
928 | 914 |
929 // Case 1: scrollDelta of 0, 0 | 915 // Case 1: scrollDelta of 0, 0 |
930 child->setScrollDelta(gfx::Vector2d(0, 0)); | 916 child->setScrollDelta(gfx::Vector2d(0, 0)); |
931 executeCalculateDrawTransformsAndVisibility(root.get()); | 917 executeCalculateDrawTransformsAndVisibility(root.get()); |
932 | 918 |
933 WebTransformationMatrix expectedChildTransform; | 919 gfx::Transform expectedChildTransform; |
934 expectedChildTransform.multiply(rotationAboutZ); | 920 expectedChildTransform.PreconcatTransform(rotationAboutZ); |
935 | 921 |
936 WebTransformationMatrix expectedGrandChildTransform; | 922 gfx::Transform expectedGrandChildTransform; |
937 expectedGrandChildTransform.multiply(rotationAboutZ); // child's local trans
form is inherited | 923 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // child's l
ocal transform is inherited |
938 expectedGrandChildTransform.translate(8, 6); // translation because of posit
ion occurs before layer's local transform. | 924 expectedGrandChildTransform.Translate(8, 6); // translation because of posit
ion occurs before layer's local transform. |
939 expectedGrandChildTransform.multiply(rotationAboutZ); // grandChild's local
transform | 925 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // grandChil
d's local transform |
940 | 926 |
941 WebTransformationMatrix expectedGreatGrandChildTransform = expectedGrandChil
dTransform; | 927 gfx::Transform expectedGreatGrandChildTransform = expectedGrandChildTransfor
m; |
942 | 928 |
943 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 929 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
944 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 930 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
945 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 931 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
946 | 932 |
947 // Case 2: scrollDelta of 10, 20 | 933 // Case 2: scrollDelta of 10, 20 |
948 child->setScrollDelta(gfx::Vector2d(10, 20)); | 934 child->setScrollDelta(gfx::Vector2d(10, 20)); |
949 executeCalculateDrawTransformsAndVisibility(root.get()); | 935 executeCalculateDrawTransformsAndVisibility(root.get()); |
950 | 936 |
951 // Here the child and grandChild are affected by scrollDelta, but the fixed
position greatGrandChild should not be affected. | 937 // Here the child and grandChild are affected by scrollDelta, but the fixed
position greatGrandChild should not be affected. |
952 expectedChildTransform.makeIdentity(); | 938 expectedChildTransform.MakeIdentity(); |
953 expectedChildTransform.translate(-10, -20); // scrollDelta | 939 expectedChildTransform.Translate(-10, -20); // scrollDelta |
954 expectedChildTransform.multiply(rotationAboutZ); | 940 expectedChildTransform.PreconcatTransform(rotationAboutZ); |
955 | 941 |
956 expectedGrandChildTransform.makeIdentity(); | 942 expectedGrandChildTransform.MakeIdentity(); |
957 expectedGrandChildTransform.translate(-10, -20); // child's scrollDelta is i
nherited | 943 expectedGrandChildTransform.Translate(-10, -20); // child's scrollDelta is i
nherited |
958 expectedGrandChildTransform.multiply(rotationAboutZ); // child's local trans
form is inherited | 944 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // child's l
ocal transform is inherited |
959 expectedGrandChildTransform.translate(8, 6); // translation because of posit
ion occurs before layer's local transform. | 945 expectedGrandChildTransform.Translate(8, 6); // translation because of posit
ion occurs before layer's local transform. |
960 expectedGrandChildTransform.multiply(rotationAboutZ); // grandChild's local
transform | 946 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // grandChil
d's local transform |
961 | 947 |
962 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 948 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
963 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 949 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
964 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 950 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
965 } | 951 } |
966 | 952 |
967 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithM
ultipleScrollDeltas) | 953 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithM
ultipleScrollDeltas) |
968 { | 954 { |
969 // This test checks for correct scroll compensation when the fixed-position
container | 955 // This test checks for correct scroll compensation when the fixed-position
container |
970 // has multiple ancestors that have nonzero scrollDelta before reaching the
space where the layer is fixed. | 956 // has multiple ancestors that have nonzero scrollDelta before reaching the
space where the layer is fixed. |
971 // In this test, each scrollDelta occurs in a different space because of eac
h layer's local transform. | 957 // In this test, each scrollDelta occurs in a different space because of eac
h layer's local transform. |
972 // This test checks for correct scroll compensation when the fixed-position
container | 958 // This test checks for correct scroll compensation when the fixed-position
container |
973 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various | 959 // is NOT the direct parent of the fixed-position layer, and the hierarchy h
as various |
974 // transforms that have to be processed in the correct order. | 960 // transforms that have to be processed in the correct order. |
975 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 961 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
976 LayerImpl* child = root->children()[0]; | 962 LayerImpl* child = root->children()[0]; |
977 LayerImpl* grandChild = child->children()[0]; | 963 LayerImpl* grandChild = child->children()[0]; |
978 LayerImpl* greatGrandChild = grandChild->children()[0]; | 964 LayerImpl* greatGrandChild = grandChild->children()[0]; |
979 | 965 |
980 WebTransformationMatrix rotationAboutZ; | 966 gfx::Transform rotationAboutZ; |
981 rotationAboutZ.rotate3d(0, 0, 90); | 967 MathUtil::rotateEulerAngles(&rotationAboutZ, 0, 0, 90); |
982 | 968 |
983 child->setIsContainerForFixedPositionLayers(true); | 969 child->setIsContainerForFixedPositionLayers(true); |
984 child->setTransform(rotationAboutZ); | 970 child->setTransform(rotationAboutZ); |
985 grandChild->setPosition(gfx::PointF(8, 6)); | 971 grandChild->setPosition(gfx::PointF(8, 6)); |
986 grandChild->setTransform(rotationAboutZ); | 972 grandChild->setTransform(rotationAboutZ); |
987 greatGrandChild->setFixedToContainerLayer(true); // greatGrandChild is posit
ioned upside-down with respect to the renderTarget. | 973 greatGrandChild->setFixedToContainerLayer(true); // greatGrandChild is posit
ioned upside-down with respect to the renderTarget. |
988 | 974 |
989 // Case 1: scrollDelta of 0, 0 | 975 // Case 1: scrollDelta of 0, 0 |
990 child->setScrollDelta(gfx::Vector2d(0, 0)); | 976 child->setScrollDelta(gfx::Vector2d(0, 0)); |
991 executeCalculateDrawTransformsAndVisibility(root.get()); | 977 executeCalculateDrawTransformsAndVisibility(root.get()); |
992 | 978 |
993 WebTransformationMatrix expectedChildTransform; | 979 gfx::Transform expectedChildTransform; |
994 expectedChildTransform.multiply(rotationAboutZ); | 980 expectedChildTransform.PreconcatTransform(rotationAboutZ); |
995 | 981 |
996 WebTransformationMatrix expectedGrandChildTransform; | 982 gfx::Transform expectedGrandChildTransform; |
997 expectedGrandChildTransform.multiply(rotationAboutZ); // child's local trans
form is inherited | 983 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // child's l
ocal transform is inherited |
998 expectedGrandChildTransform.translate(8, 6); // translation because of posit
ion occurs before layer's local transform. | 984 expectedGrandChildTransform.Translate(8, 6); // translation because of posit
ion occurs before layer's local transform. |
999 expectedGrandChildTransform.multiply(rotationAboutZ); // grandChild's local
transform | 985 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // grandChil
d's local transform |
1000 | 986 |
1001 WebTransformationMatrix expectedGreatGrandChildTransform = expectedGrandChil
dTransform; | 987 gfx::Transform expectedGreatGrandChildTransform = expectedGrandChildTransfor
m; |
1002 | 988 |
1003 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 989 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1004 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 990 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1005 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 991 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
1006 | 992 |
1007 // Case 2: scrollDelta of 10, 20 | 993 // Case 2: scrollDelta of 10, 20 |
1008 child->setScrollDelta(gfx::Vector2d(10, 0)); | 994 child->setScrollDelta(gfx::Vector2d(10, 0)); |
1009 grandChild->setScrollDelta(gfx::Vector2d(5, 0)); | 995 grandChild->setScrollDelta(gfx::Vector2d(5, 0)); |
1010 executeCalculateDrawTransformsAndVisibility(root.get()); | 996 executeCalculateDrawTransformsAndVisibility(root.get()); |
1011 | 997 |
1012 // Here the child and grandChild are affected by scrollDelta, but the fixed
position greatGrandChild should not be affected. | 998 // Here the child and grandChild are affected by scrollDelta, but the fixed
position greatGrandChild should not be affected. |
1013 expectedChildTransform.makeIdentity(); | 999 expectedChildTransform.MakeIdentity(); |
1014 expectedChildTransform.translate(-10, 0); // scrollDelta | 1000 expectedChildTransform.Translate(-10, 0); // scrollDelta |
1015 expectedChildTransform.multiply(rotationAboutZ); | 1001 expectedChildTransform.PreconcatTransform(rotationAboutZ); |
1016 | 1002 |
1017 expectedGrandChildTransform.makeIdentity(); | 1003 expectedGrandChildTransform.MakeIdentity(); |
1018 expectedGrandChildTransform.translate(-10, 0); // child's scrollDelta is inh
erited | 1004 expectedGrandChildTransform.Translate(-10, 0); // child's scrollDelta is inh
erited |
1019 expectedGrandChildTransform.multiply(rotationAboutZ); // child's local trans
form is inherited | 1005 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // child's l
ocal transform is inherited |
1020 expectedGrandChildTransform.translate(-5, 0); // grandChild's scrollDelta | 1006 expectedGrandChildTransform.Translate(-5, 0); // grandChild's scrollDelta |
1021 expectedGrandChildTransform.translate(8, 6); // translation because of posit
ion occurs before layer's local transform. | 1007 expectedGrandChildTransform.Translate(8, 6); // translation because of posit
ion occurs before layer's local transform. |
1022 expectedGrandChildTransform.multiply(rotationAboutZ); // grandChild's local
transform | 1008 expectedGrandChildTransform.PreconcatTransform(rotationAboutZ); // grandChil
d's local transform |
1023 | 1009 |
1024 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1010 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1025 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1011 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1026 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 1012 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
1027 } | 1013 } |
1028 | 1014 |
1029 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithI
ntermediateSurfaceAndTransforms) | 1015 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithI
ntermediateSurfaceAndTransforms) |
1030 { | 1016 { |
1031 // This test checks for correct scroll compensation when the fixed-position
container | 1017 // This test checks for correct scroll compensation when the fixed-position
container |
1032 // contributes to a different renderSurface than the fixed-position layer. I
n this | 1018 // contributes to a different renderSurface than the fixed-position layer. I
n this |
1033 // case, the surface drawTransforms also have to be accounted for when check
ing the | 1019 // case, the surface drawTransforms also have to be accounted for when check
ing the |
1034 // scrollDelta. | 1020 // scrollDelta. |
1035 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 1021 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
1036 LayerImpl* child = root->children()[0]; | 1022 LayerImpl* child = root->children()[0]; |
1037 LayerImpl* grandChild = child->children()[0]; | 1023 LayerImpl* grandChild = child->children()[0]; |
1038 LayerImpl* greatGrandChild = grandChild->children()[0]; | 1024 LayerImpl* greatGrandChild = grandChild->children()[0]; |
1039 | 1025 |
1040 child->setIsContainerForFixedPositionLayers(true); | 1026 child->setIsContainerForFixedPositionLayers(true); |
1041 grandChild->setPosition(gfx::PointF(8, 6)); | 1027 grandChild->setPosition(gfx::PointF(8, 6)); |
1042 grandChild->setForceRenderSurface(true); | 1028 grandChild->setForceRenderSurface(true); |
1043 greatGrandChild->setFixedToContainerLayer(true); | 1029 greatGrandChild->setFixedToContainerLayer(true); |
1044 greatGrandChild->setDrawsContent(true); | 1030 greatGrandChild->setDrawsContent(true); |
1045 | 1031 |
1046 WebTransformationMatrix rotationAboutZ; | 1032 gfx::Transform rotationAboutZ; |
1047 rotationAboutZ.rotate3d(0, 0, 90); | 1033 MathUtil::rotateEulerAngles(&rotationAboutZ, 0, 0, 90); |
1048 grandChild->setTransform(rotationAboutZ); | 1034 grandChild->setTransform(rotationAboutZ); |
1049 | 1035 |
1050 // Case 1: scrollDelta of 0, 0 | 1036 // Case 1: scrollDelta of 0, 0 |
1051 child->setScrollDelta(gfx::Vector2d(0, 0)); | 1037 child->setScrollDelta(gfx::Vector2d(0, 0)); |
1052 executeCalculateDrawTransformsAndVisibility(root.get()); | 1038 executeCalculateDrawTransformsAndVisibility(root.get()); |
1053 | 1039 |
1054 WebTransformationMatrix expectedChildTransform; | 1040 gfx::Transform expectedChildTransform; |
1055 WebTransformationMatrix expectedSurfaceDrawTransform; | 1041 gfx::Transform expectedSurfaceDrawTransform; |
1056 expectedSurfaceDrawTransform.translate(8, 6); | 1042 expectedSurfaceDrawTransform.Translate(8, 6); |
1057 expectedSurfaceDrawTransform.multiply(rotationAboutZ); | 1043 expectedSurfaceDrawTransform.PreconcatTransform(rotationAboutZ); |
1058 WebTransformationMatrix expectedGrandChildTransform; | 1044 gfx::Transform expectedGrandChildTransform; |
1059 WebTransformationMatrix expectedGreatGrandChildTransform; | 1045 gfx::Transform expectedGreatGrandChildTransform; |
1060 ASSERT_TRUE(grandChild->renderSurface()); | 1046 ASSERT_TRUE(grandChild->renderSurface()); |
1061 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1047 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1062 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, grandChild->re
nderSurface()->drawTransform()); | 1048 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, grandChild->re
nderSurface()->drawTransform()); |
1063 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1049 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1064 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 1050 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
1065 | 1051 |
1066 // Case 2: scrollDelta of 10, 30 | 1052 // Case 2: scrollDelta of 10, 30 |
1067 child->setScrollDelta(gfx::Vector2d(10, 30)); | 1053 child->setScrollDelta(gfx::Vector2d(10, 30)); |
1068 executeCalculateDrawTransformsAndVisibility(root.get()); | 1054 executeCalculateDrawTransformsAndVisibility(root.get()); |
1069 | 1055 |
1070 // Here the grandChild remains unchanged, because it scrolls along with the | 1056 // Here the grandChild remains unchanged, because it scrolls along with the |
1071 // renderSurface, and the translation is actually in the renderSurface. But,
the fixed | 1057 // renderSurface, and the translation is actually in the renderSurface. But,
the fixed |
1072 // position greatGrandChild is more awkward: its actually being drawn with r
espect to | 1058 // position greatGrandChild is more awkward: its actually being drawn with r
espect to |
1073 // the renderSurface, but it needs to remain fixed with resepct to a contain
er beyond | 1059 // the renderSurface, but it needs to remain fixed with resepct to a contain
er beyond |
1074 // that surface. So, the net result is that, unlike previous tests where the
fixed | 1060 // that surface. So, the net result is that, unlike previous tests where the
fixed |
1075 // position layer's transform remains unchanged, here the fixed position lay
er's | 1061 // position layer's transform remains unchanged, here the fixed position lay
er's |
1076 // transform explicitly contains the translation that cancels out the scroll
. | 1062 // transform explicitly contains the translation that cancels out the scroll
. |
1077 expectedChildTransform.makeIdentity(); | 1063 expectedChildTransform.MakeIdentity(); |
1078 expectedChildTransform.translate(-10, -30); // scrollDelta | 1064 expectedChildTransform.Translate(-10, -30); // scrollDelta |
1079 | 1065 |
1080 expectedSurfaceDrawTransform.makeIdentity(); | 1066 expectedSurfaceDrawTransform.MakeIdentity(); |
1081 expectedSurfaceDrawTransform.translate(-10, -30); // scrollDelta | 1067 expectedSurfaceDrawTransform.Translate(-10, -30); // scrollDelta |
1082 expectedSurfaceDrawTransform.translate(8, 6); | 1068 expectedSurfaceDrawTransform.Translate(8, 6); |
1083 expectedSurfaceDrawTransform.multiply(rotationAboutZ); | 1069 expectedSurfaceDrawTransform.PreconcatTransform(rotationAboutZ); |
1084 | 1070 |
1085 // The rotation and its inverse are needed to place the scrollDelta compensa
tion in | 1071 // The rotation and its inverse are needed to place the scrollDelta compensa
tion in |
1086 // the correct space. This test will fail if the rotation/inverse are backwa
rds, too, | 1072 // the correct space. This test will fail if the rotation/inverse are backwa
rds, too, |
1087 // so it requires perfect order of operations. | 1073 // so it requires perfect order of operations. |
1088 expectedGreatGrandChildTransform.makeIdentity(); | 1074 expectedGreatGrandChildTransform.MakeIdentity(); |
1089 expectedGreatGrandChildTransform.multiply(rotationAboutZ.inverse()); | 1075 expectedGreatGrandChildTransform.PreconcatTransform(MathUtil::inverse(rotati
onAboutZ)); |
1090 expectedGreatGrandChildTransform.translate(10, 30); // explicit canceling ou
t the scrollDelta that gets embedded in the fixed position layer's surface. | 1076 expectedGreatGrandChildTransform.Translate(10, 30); // explicit canceling ou
t the scrollDelta that gets embedded in the fixed position layer's surface. |
1091 expectedGreatGrandChildTransform.multiply(rotationAboutZ); | 1077 expectedGreatGrandChildTransform.PreconcatTransform(rotationAboutZ); |
1092 | 1078 |
1093 ASSERT_TRUE(grandChild->renderSurface()); | 1079 ASSERT_TRUE(grandChild->renderSurface()); |
1094 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1080 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1095 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, grandChild->re
nderSurface()->drawTransform()); | 1081 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, grandChild->re
nderSurface()->drawTransform()); |
1096 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1082 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1097 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 1083 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
1098 } | 1084 } |
1099 | 1085 |
1100 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithM
ultipleIntermediateSurfaces) | 1086 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerWithM
ultipleIntermediateSurfaces) |
1101 { | 1087 { |
1102 // This test checks for correct scroll compensation when the fixed-position
container | 1088 // This test checks for correct scroll compensation when the fixed-position
container |
1103 // contributes to a different renderSurface than the fixed-position layer, w
ith | 1089 // contributes to a different renderSurface than the fixed-position layer, w
ith |
1104 // additional renderSurfaces in-between. This checks that the conversion to
ancestor | 1090 // additional renderSurfaces in-between. This checks that the conversion to
ancestor |
1105 // surfaces is accumulated properly in the final matrix transform. | 1091 // surfaces is accumulated properly in the final matrix transform. |
1106 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 1092 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
1107 LayerImpl* child = root->children()[0]; | 1093 LayerImpl* child = root->children()[0]; |
1108 LayerImpl* grandChild = child->children()[0]; | 1094 LayerImpl* grandChild = child->children()[0]; |
1109 LayerImpl* greatGrandChild = grandChild->children()[0]; | 1095 LayerImpl* greatGrandChild = grandChild->children()[0]; |
1110 | 1096 |
1111 // Add one more layer to the test tree for this scenario. | 1097 // Add one more layer to the test tree for this scenario. |
1112 { | 1098 { |
1113 WebTransformationMatrix identity; | 1099 gfx::Transform identity; |
1114 scoped_ptr<LayerImpl> fixedPositionChild = LayerImpl::create(5); | 1100 scoped_ptr<LayerImpl> fixedPositionChild = LayerImpl::create(5); |
1115 setLayerPropertiesForTesting(fixedPositionChild.get(), identity, identit
y, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 1101 setLayerPropertiesForTesting(fixedPositionChild.get(), identity, identit
y, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
1116 greatGrandChild->addChild(fixedPositionChild.Pass()); | 1102 greatGrandChild->addChild(fixedPositionChild.Pass()); |
1117 } | 1103 } |
1118 LayerImpl* fixedPositionChild = greatGrandChild->children()[0]; | 1104 LayerImpl* fixedPositionChild = greatGrandChild->children()[0]; |
1119 | 1105 |
1120 // Actually set up the scenario here. | 1106 // Actually set up the scenario here. |
1121 child->setIsContainerForFixedPositionLayers(true); | 1107 child->setIsContainerForFixedPositionLayers(true); |
1122 grandChild->setPosition(gfx::PointF(8, 6)); | 1108 grandChild->setPosition(gfx::PointF(8, 6)); |
1123 grandChild->setForceRenderSurface(true); | 1109 grandChild->setForceRenderSurface(true); |
1124 greatGrandChild->setPosition(gfx::PointF(40, 60)); | 1110 greatGrandChild->setPosition(gfx::PointF(40, 60)); |
1125 greatGrandChild->setForceRenderSurface(true); | 1111 greatGrandChild->setForceRenderSurface(true); |
1126 fixedPositionChild->setFixedToContainerLayer(true); | 1112 fixedPositionChild->setFixedToContainerLayer(true); |
1127 fixedPositionChild->setDrawsContent(true); | 1113 fixedPositionChild->setDrawsContent(true); |
1128 | 1114 |
1129 // The additional rotations, which are non-commutative with translations, he
lp to | 1115 // The additional rotations, which are non-commutative with translations, he
lp to |
1130 // verify that we have correct order-of-operations in the final scroll compe
nsation. | 1116 // verify that we have correct order-of-operations in the final scroll compe
nsation. |
1131 // Note that rotating about the center of the layer ensures we do not accide
ntally | 1117 // Note that rotating about the center of the layer ensures we do not accide
ntally |
1132 // clip away layers that we want to test. | 1118 // clip away layers that we want to test. |
1133 WebTransformationMatrix rotationAboutZ; | 1119 gfx::Transform rotationAboutZ; |
1134 rotationAboutZ.translate(50, 50); | 1120 rotationAboutZ.Translate(50, 50); |
1135 rotationAboutZ.rotate3d(0, 0, 90); | 1121 MathUtil::rotateEulerAngles(&rotationAboutZ, 0, 0, 90); |
1136 rotationAboutZ.translate(-50, -50); | 1122 rotationAboutZ.Translate(-50, -50); |
1137 grandChild->setTransform(rotationAboutZ); | 1123 grandChild->setTransform(rotationAboutZ); |
1138 greatGrandChild->setTransform(rotationAboutZ); | 1124 greatGrandChild->setTransform(rotationAboutZ); |
1139 | 1125 |
1140 // Case 1: scrollDelta of 0, 0 | 1126 // Case 1: scrollDelta of 0, 0 |
1141 child->setScrollDelta(gfx::Vector2d(0, 0)); | 1127 child->setScrollDelta(gfx::Vector2d(0, 0)); |
1142 executeCalculateDrawTransformsAndVisibility(root.get()); | 1128 executeCalculateDrawTransformsAndVisibility(root.get()); |
1143 | 1129 |
1144 WebTransformationMatrix expectedChildTransform; | 1130 gfx::Transform expectedChildTransform; |
1145 | 1131 |
1146 WebTransformationMatrix expectedGrandChildSurfaceDrawTransform; | 1132 gfx::Transform expectedGrandChildSurfaceDrawTransform; |
1147 expectedGrandChildSurfaceDrawTransform.translate(8, 6); | 1133 expectedGrandChildSurfaceDrawTransform.Translate(8, 6); |
1148 expectedGrandChildSurfaceDrawTransform.multiply(rotationAboutZ); | 1134 expectedGrandChildSurfaceDrawTransform.PreconcatTransform(rotationAboutZ); |
1149 | 1135 |
1150 WebTransformationMatrix expectedGrandChildTransform; | 1136 gfx::Transform expectedGrandChildTransform; |
1151 | 1137 |
1152 WebTransformationMatrix expectedGreatGrandChildSurfaceDrawTransform; | 1138 gfx::Transform expectedGreatGrandChildSurfaceDrawTransform; |
1153 expectedGreatGrandChildSurfaceDrawTransform.translate(40, 60); | 1139 expectedGreatGrandChildSurfaceDrawTransform.Translate(40, 60); |
1154 expectedGreatGrandChildSurfaceDrawTransform.multiply(rotationAboutZ); | 1140 expectedGreatGrandChildSurfaceDrawTransform.PreconcatTransform(rotationAbout
Z); |
1155 | 1141 |
1156 WebTransformationMatrix expectedGreatGrandChildTransform; | 1142 gfx::Transform expectedGreatGrandChildTransform; |
1157 | 1143 |
1158 WebTransformationMatrix expectedFixedPositionChildTransform; | 1144 gfx::Transform expectedFixedPositionChildTransform; |
1159 | 1145 |
1160 ASSERT_TRUE(grandChild->renderSurface()); | 1146 ASSERT_TRUE(grandChild->renderSurface()); |
1161 ASSERT_TRUE(greatGrandChild->renderSurface()); | 1147 ASSERT_TRUE(greatGrandChild->renderSurface()); |
1162 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1148 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1163 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildSurfaceDrawTransform, gran
dChild->renderSurface()->drawTransform()); | 1149 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildSurfaceDrawTransform, gran
dChild->renderSurface()->drawTransform()); |
1164 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1150 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1165 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildSurfaceDrawTransform,
greatGrandChild->renderSurface()->drawTransform()); | 1151 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildSurfaceDrawTransform,
greatGrandChild->renderSurface()->drawTransform()); |
1166 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 1152 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
1167 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedFixedPositionChildTransform, fixedPo
sitionChild->drawTransform()); | 1153 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedFixedPositionChildTransform, fixedPo
sitionChild->drawTransform()); |
1168 | 1154 |
1169 // Case 2: scrollDelta of 10, 30 | 1155 // Case 2: scrollDelta of 10, 30 |
1170 child->setScrollDelta(gfx::Vector2d(10, 30)); | 1156 child->setScrollDelta(gfx::Vector2d(10, 30)); |
1171 executeCalculateDrawTransformsAndVisibility(root.get()); | 1157 executeCalculateDrawTransformsAndVisibility(root.get()); |
1172 | 1158 |
1173 expectedChildTransform.makeIdentity(); | 1159 expectedChildTransform.MakeIdentity(); |
1174 expectedChildTransform.translate(-10, -30); // scrollDelta | 1160 expectedChildTransform.Translate(-10, -30); // scrollDelta |
1175 | 1161 |
1176 expectedGrandChildSurfaceDrawTransform.makeIdentity(); | 1162 expectedGrandChildSurfaceDrawTransform.MakeIdentity(); |
1177 expectedGrandChildSurfaceDrawTransform.translate(-10, -30); // scrollDelta | 1163 expectedGrandChildSurfaceDrawTransform.Translate(-10, -30); // scrollDelta |
1178 expectedGrandChildSurfaceDrawTransform.translate(8, 6); | 1164 expectedGrandChildSurfaceDrawTransform.Translate(8, 6); |
1179 expectedGrandChildSurfaceDrawTransform.multiply(rotationAboutZ); | 1165 expectedGrandChildSurfaceDrawTransform.PreconcatTransform(rotationAboutZ); |
1180 | 1166 |
1181 // grandChild, greatGrandChild, and greatGrandChild's surface are not expect
ed to | 1167 // grandChild, greatGrandChild, and greatGrandChild's surface are not expect
ed to |
1182 // change, since they are all not fixed, and they are all drawn with respect
to | 1168 // change, since they are all not fixed, and they are all drawn with respect
to |
1183 // grandChild's surface that already has the scrollDelta accounted for. | 1169 // grandChild's surface that already has the scrollDelta accounted for. |
1184 | 1170 |
1185 // But the great-great grandchild, "fixedPositionChild", should have a trans
form that explicitly cancels out the scrollDelta. | 1171 // But the great-great grandchild, "fixedPositionChild", should have a trans
form that explicitly cancels out the scrollDelta. |
1186 // The expected transform is: | 1172 // The expected transform is: |
1187 // compoundDrawTransform.inverse() * translate(positive scrollDelta) * com
poundOriginTransform | 1173 // compoundDrawTransform.inverse() * translate(positive scrollDelta) * com
poundOriginTransform |
1188 WebTransformationMatrix compoundDrawTransform; // transform from greatGrandC
hildSurface's origin to the root surface. | 1174 gfx::Transform compoundDrawTransform; // transform from greatGrandChildSurfa
ce's origin to the root surface. |
1189 compoundDrawTransform.translate(8, 6); // origin translation of grandChild | 1175 compoundDrawTransform.Translate(8, 6); // origin translation of grandChild |
1190 compoundDrawTransform.multiply(rotationAboutZ); // rotation of grandChild | 1176 compoundDrawTransform.PreconcatTransform(rotationAboutZ); // rotation of gra
ndChild |
1191 compoundDrawTransform.translate(40, 60); // origin translation of greatGrand
Child | 1177 compoundDrawTransform.Translate(40, 60); // origin translation of greatGrand
Child |
1192 compoundDrawTransform.multiply(rotationAboutZ); // rotation of greatGrandChi
ld | 1178 compoundDrawTransform.PreconcatTransform(rotationAboutZ); // rotation of gre
atGrandChild |
1193 | 1179 |
1194 expectedFixedPositionChildTransform.makeIdentity(); | 1180 expectedFixedPositionChildTransform.MakeIdentity(); |
1195 expectedFixedPositionChildTransform.multiply(compoundDrawTransform.inverse()
); | 1181 expectedFixedPositionChildTransform.PreconcatTransform(MathUtil::inverse(com
poundDrawTransform)); |
1196 expectedFixedPositionChildTransform.translate(10, 30); // explicit canceling
out the scrollDelta that gets embedded in the fixed position layer's surface. | 1182 expectedFixedPositionChildTransform.Translate(10, 30); // explicit canceling
out the scrollDelta that gets embedded in the fixed position layer's surface. |
1197 expectedFixedPositionChildTransform.multiply(compoundDrawTransform); | 1183 expectedFixedPositionChildTransform.PreconcatTransform(compoundDrawTransform
); |
1198 | 1184 |
1199 ASSERT_TRUE(grandChild->renderSurface()); | 1185 ASSERT_TRUE(grandChild->renderSurface()); |
1200 ASSERT_TRUE(greatGrandChild->renderSurface()); | 1186 ASSERT_TRUE(greatGrandChild->renderSurface()); |
1201 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1187 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1202 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildSurfaceDrawTransform, gran
dChild->renderSurface()->drawTransform()); | 1188 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildSurfaceDrawTransform, gran
dChild->renderSurface()->drawTransform()); |
1203 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1189 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1204 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildSurfaceDrawTransform,
greatGrandChild->renderSurface()->drawTransform()); | 1190 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildSurfaceDrawTransform,
greatGrandChild->renderSurface()->drawTransform()); |
1205 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); | 1191 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGreatGrandChildTransform, greatGrand
Child->drawTransform()); |
1206 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedFixedPositionChildTransform, fixedPo
sitionChild->drawTransform()); | 1192 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedFixedPositionChildTransform, fixedPo
sitionChild->drawTransform()); |
1207 } | 1193 } |
(...skipping 10 matching lines...) Expand all Loading... |
1218 | 1204 |
1219 child->setIsContainerForFixedPositionLayers(true); | 1205 child->setIsContainerForFixedPositionLayers(true); |
1220 child->setForceRenderSurface(true); | 1206 child->setForceRenderSurface(true); |
1221 grandChild->setFixedToContainerLayer(true); | 1207 grandChild->setFixedToContainerLayer(true); |
1222 grandChild->setDrawsContent(true); | 1208 grandChild->setDrawsContent(true); |
1223 | 1209 |
1224 // Case 1: scrollDelta of 0, 0 | 1210 // Case 1: scrollDelta of 0, 0 |
1225 child->setScrollDelta(gfx::Vector2d(0, 0)); | 1211 child->setScrollDelta(gfx::Vector2d(0, 0)); |
1226 executeCalculateDrawTransformsAndVisibility(root.get()); | 1212 executeCalculateDrawTransformsAndVisibility(root.get()); |
1227 | 1213 |
1228 WebTransformationMatrix expectedSurfaceDrawTransform; | 1214 gfx::Transform expectedSurfaceDrawTransform; |
1229 expectedSurfaceDrawTransform.translate(0, 0); | 1215 expectedSurfaceDrawTransform.Translate(0, 0); |
1230 WebTransformationMatrix expectedChildTransform; | 1216 gfx::Transform expectedChildTransform; |
1231 WebTransformationMatrix expectedGrandChildTransform; | 1217 gfx::Transform expectedGrandChildTransform; |
1232 ASSERT_TRUE(child->renderSurface()); | 1218 ASSERT_TRUE(child->renderSurface()); |
1233 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, child->renderS
urface()->drawTransform()); | 1219 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, child->renderS
urface()->drawTransform()); |
1234 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1220 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1235 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1221 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1236 | 1222 |
1237 // Case 2: scrollDelta of 10, 10 | 1223 // Case 2: scrollDelta of 10, 10 |
1238 child->setScrollDelta(gfx::Vector2d(10, 10)); | 1224 child->setScrollDelta(gfx::Vector2d(10, 10)); |
1239 executeCalculateDrawTransformsAndVisibility(root.get()); | 1225 executeCalculateDrawTransformsAndVisibility(root.get()); |
1240 | 1226 |
1241 // The surface is translated by scrollDelta, the child transform doesn't cha
nge | 1227 // The surface is translated by scrollDelta, the child transform doesn't cha
nge |
1242 // because it scrolls along with the surface, but the fixed position grandCh
ild | 1228 // because it scrolls along with the surface, but the fixed position grandCh
ild |
1243 // needs to compensate for the scroll translation. | 1229 // needs to compensate for the scroll translation. |
1244 expectedSurfaceDrawTransform.makeIdentity(); | 1230 expectedSurfaceDrawTransform.MakeIdentity(); |
1245 expectedSurfaceDrawTransform.translate(-10, -10); | 1231 expectedSurfaceDrawTransform.Translate(-10, -10); |
1246 expectedGrandChildTransform.makeIdentity(); | 1232 expectedGrandChildTransform.MakeIdentity(); |
1247 expectedGrandChildTransform.translate(10, 10); | 1233 expectedGrandChildTransform.Translate(10, 10); |
1248 | 1234 |
1249 ASSERT_TRUE(child->renderSurface()); | 1235 ASSERT_TRUE(child->renderSurface()); |
1250 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, child->renderS
urface()->drawTransform()); | 1236 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, child->renderS
urface()->drawTransform()); |
1251 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1237 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1252 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1238 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1253 } | 1239 } |
1254 | 1240 |
1255 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerThatI
sAlsoFixedPositionContainer) | 1241 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerThatI
sAlsoFixedPositionContainer) |
1256 { | 1242 { |
1257 // This test checks the scenario where a fixed-position layer also happens t
o be a | 1243 // This test checks the scenario where a fixed-position layer also happens t
o be a |
1258 // container itself for a descendant fixed position layer. In particular, th
e layer | 1244 // container itself for a descendant fixed position layer. In particular, th
e layer |
1259 // should not accidentally be fixed to itself. | 1245 // should not accidentally be fixed to itself. |
1260 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 1246 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
1261 LayerImpl* child = root->children()[0]; | 1247 LayerImpl* child = root->children()[0]; |
1262 LayerImpl* grandChild = child->children()[0]; | 1248 LayerImpl* grandChild = child->children()[0]; |
1263 | 1249 |
1264 child->setIsContainerForFixedPositionLayers(true); | 1250 child->setIsContainerForFixedPositionLayers(true); |
1265 grandChild->setFixedToContainerLayer(true); | 1251 grandChild->setFixedToContainerLayer(true); |
1266 | 1252 |
1267 // This should not confuse the grandChild. If correct, the grandChild would
still be considered fixed to its container (i.e. "child"). | 1253 // This should not confuse the grandChild. If correct, the grandChild would
still be considered fixed to its container (i.e. "child"). |
1268 grandChild->setIsContainerForFixedPositionLayers(true); | 1254 grandChild->setIsContainerForFixedPositionLayers(true); |
1269 | 1255 |
1270 // Case 1: scrollDelta of 0, 0 | 1256 // Case 1: scrollDelta of 0, 0 |
1271 child->setScrollDelta(gfx::Vector2d(0, 0)); | 1257 child->setScrollDelta(gfx::Vector2d(0, 0)); |
1272 executeCalculateDrawTransformsAndVisibility(root.get()); | 1258 executeCalculateDrawTransformsAndVisibility(root.get()); |
1273 | 1259 |
1274 WebTransformationMatrix expectedChildTransform; | 1260 gfx::Transform expectedChildTransform; |
1275 WebTransformationMatrix expectedGrandChildTransform; | 1261 gfx::Transform expectedGrandChildTransform; |
1276 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1262 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1277 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1263 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1278 | 1264 |
1279 // Case 2: scrollDelta of 10, 10 | 1265 // Case 2: scrollDelta of 10, 10 |
1280 child->setScrollDelta(gfx::Vector2d(10, 10)); | 1266 child->setScrollDelta(gfx::Vector2d(10, 10)); |
1281 executeCalculateDrawTransformsAndVisibility(root.get()); | 1267 executeCalculateDrawTransformsAndVisibility(root.get()); |
1282 | 1268 |
1283 // Here the child is affected by scrollDelta, but the fixed position grandCh
ild should not be affected. | 1269 // Here the child is affected by scrollDelta, but the fixed position grandCh
ild should not be affected. |
1284 expectedChildTransform.makeIdentity(); | 1270 expectedChildTransform.MakeIdentity(); |
1285 expectedChildTransform.translate(-10, -10); | 1271 expectedChildTransform.Translate(-10, -10); |
1286 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 1272 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
1287 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1273 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1288 } | 1274 } |
1289 | 1275 |
1290 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerThatH
asNoContainer) | 1276 TEST(LayerTreeHostCommonTest, verifyScrollCompensationForFixedPositionLayerThatH
asNoContainer) |
1291 { | 1277 { |
1292 // This test checks scroll compensation when a fixed-position layer does not
find any | 1278 // This test checks scroll compensation when a fixed-position layer does not
find any |
1293 // ancestor that is a "containerForFixedPositionLayers". In this situation,
the layer should | 1279 // ancestor that is a "containerForFixedPositionLayers". In this situation,
the layer should |
1294 // be fixed to the viewport -- not the rootLayer, which may have transforms
of its own. | 1280 // be fixed to the viewport -- not the rootLayer, which may have transforms
of its own. |
1295 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); | 1281 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(); |
1296 LayerImpl* child = root->children()[0]; | 1282 LayerImpl* child = root->children()[0]; |
1297 LayerImpl* grandChild = child->children()[0]; | 1283 LayerImpl* grandChild = child->children()[0]; |
1298 | 1284 |
1299 WebTransformationMatrix rotationByZ; | 1285 gfx::Transform rotationByZ; |
1300 rotationByZ.rotate3d(0, 0, 90); | 1286 MathUtil::rotateEulerAngles(&rotationByZ, 0, 0, 90); |
1301 | 1287 |
1302 root->setTransform(rotationByZ); | 1288 root->setTransform(rotationByZ); |
1303 grandChild->setFixedToContainerLayer(true); | 1289 grandChild->setFixedToContainerLayer(true); |
1304 | 1290 |
1305 // Case 1: root scrollDelta of 0, 0 | 1291 // Case 1: root scrollDelta of 0, 0 |
1306 root->setScrollDelta(gfx::Vector2d(0, 0)); | 1292 root->setScrollDelta(gfx::Vector2d(0, 0)); |
1307 executeCalculateDrawTransformsAndVisibility(root.get()); | 1293 executeCalculateDrawTransformsAndVisibility(root.get()); |
1308 | 1294 |
1309 WebTransformationMatrix identityMatrix; | 1295 gfx::Transform identityMatrix; |
1310 | 1296 |
1311 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); | 1297 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
1312 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; | 1298 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, grandChild->drawTransform())
; |
1313 | 1299 |
1314 // Case 2: root scrollDelta of 10, 10 | 1300 // Case 2: root scrollDelta of 10, 10 |
1315 root->setScrollDelta(gfx::Vector2d(10, 20)); | 1301 root->setScrollDelta(gfx::Vector2d(10, 20)); |
1316 executeCalculateDrawTransformsAndVisibility(root.get()); | 1302 executeCalculateDrawTransformsAndVisibility(root.get()); |
1317 | 1303 |
1318 // The child is affected by scrollDelta, but it is already implcitly account
ed for by | 1304 // The child is affected by scrollDelta, but it is already implcitly account
ed for by |
1319 // the child's target surface (i.e. the root renderSurface). The grandChild
is not | 1305 // the child's target surface (i.e. the root renderSurface). The grandChild
is not |
1320 // affected by the scrollDelta, so its drawTransform needs to explicitly | 1306 // affected by the scrollDelta, so its drawTransform needs to explicitly |
1321 // inverse-compensate for the scroll that's embedded in the target surface. | 1307 // inverse-compensate for the scroll that's embedded in the target surface. |
1322 WebTransformationMatrix expectedGrandChildTransform; | 1308 gfx::Transform expectedGrandChildTransform; |
1323 expectedGrandChildTransform.multiply(rotationByZ.inverse()); | 1309 expectedGrandChildTransform.PreconcatTransform(MathUtil::inverse(rotationByZ
)); |
1324 expectedGrandChildTransform.translate(10, 20); // explicit canceling out the
scrollDelta that gets embedded in the fixed position layer's surface. | 1310 expectedGrandChildTransform.Translate(10, 20); // explicit canceling out the
scrollDelta that gets embedded in the fixed position layer's surface. |
1325 expectedGrandChildTransform.multiply(rotationByZ); | 1311 expectedGrandChildTransform.PreconcatTransform(rotationByZ); |
1326 | 1312 |
1327 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); | 1313 EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
1328 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); | 1314 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedGrandChildTransform, grandChild->dra
wTransform()); |
1329 } | 1315 } |
1330 | 1316 |
1331 TEST(LayerTreeHostCommonTest, verifyClipRectCullsRenderSurfaces) | 1317 TEST(LayerTreeHostCommonTest, verifyClipRectCullsRenderSurfaces) |
1332 { | 1318 { |
1333 // The entire subtree of layers that are outside the clipRect should be cull
ed away, | 1319 // The entire subtree of layers that are outside the clipRect should be cull
ed away, |
1334 // and should not affect the renderSurfaceLayerList. | 1320 // and should not affect the renderSurfaceLayerList. |
1335 // | 1321 // |
1336 // The test tree is set up as follows: | 1322 // The test tree is set up as follows: |
1337 // - all layers except the leafNodes are forced to be a new renderSurface t
hat have something to draw. | 1323 // - all layers except the leafNodes are forced to be a new renderSurface t
hat have something to draw. |
1338 // - parent is a large container layer. | 1324 // - parent is a large container layer. |
1339 // - child has masksToBounds=true to cause clipping. | 1325 // - child has masksToBounds=true to cause clipping. |
1340 // - grandChild is positioned outside of the child's bounds | 1326 // - grandChild is positioned outside of the child's bounds |
1341 // - greatGrandChild is also kept outside child's bounds. | 1327 // - greatGrandChild is also kept outside child's bounds. |
1342 // | 1328 // |
1343 // In this configuration, grandChild and greatGrandChild are completely outs
ide the | 1329 // In this configuration, grandChild and greatGrandChild are completely outs
ide the |
1344 // clipRect, and they should never get scheduled on the list of renderSurfac
es. | 1330 // clipRect, and they should never get scheduled on the list of renderSurfac
es. |
1345 // | 1331 // |
1346 | 1332 |
1347 const WebTransformationMatrix identityMatrix; | 1333 const gfx::Transform identityMatrix; |
1348 scoped_refptr<Layer> parent = Layer::create(); | 1334 scoped_refptr<Layer> parent = Layer::create(); |
1349 scoped_refptr<Layer> child = Layer::create(); | 1335 scoped_refptr<Layer> child = Layer::create(); |
1350 scoped_refptr<Layer> grandChild = Layer::create(); | 1336 scoped_refptr<Layer> grandChild = Layer::create(); |
1351 scoped_refptr<Layer> greatGrandChild = Layer::create(); | 1337 scoped_refptr<Layer> greatGrandChild = Layer::create(); |
1352 scoped_refptr<LayerWithForcedDrawsContent> leafNode1 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1338 scoped_refptr<LayerWithForcedDrawsContent> leafNode1 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1353 scoped_refptr<LayerWithForcedDrawsContent> leafNode2 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1339 scoped_refptr<LayerWithForcedDrawsContent> leafNode2 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1354 parent->addChild(child); | 1340 parent->addChild(child); |
1355 child->addChild(grandChild); | 1341 child->addChild(grandChild); |
1356 grandChild->addChild(greatGrandChild); | 1342 grandChild->addChild(greatGrandChild); |
1357 | 1343 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1392 // - parent is a container layer that masksToBounds=true to cause clipping. | 1378 // - parent is a container layer that masksToBounds=true to cause clipping. |
1393 // - child is a renderSurface, which has a clipRect set to the bounds of th
e parent. | 1379 // - child is a renderSurface, which has a clipRect set to the bounds of th
e parent. |
1394 // - grandChild is a renderSurface, and the only visible content in child.
It is positioned outside of the clipRect from parent. | 1380 // - grandChild is a renderSurface, and the only visible content in child.
It is positioned outside of the clipRect from parent. |
1395 | 1381 |
1396 // In this configuration, grandChild should be outside the clipped | 1382 // In this configuration, grandChild should be outside the clipped |
1397 // contentRect of the child, making grandChild not appear in the | 1383 // contentRect of the child, making grandChild not appear in the |
1398 // renderSurfaceLayerList. However, when we place an animation on the child, | 1384 // renderSurfaceLayerList. However, when we place an animation on the child, |
1399 // this clipping should be avoided and we should keep the grandChild | 1385 // this clipping should be avoided and we should keep the grandChild |
1400 // in the renderSurfaceLayerList. | 1386 // in the renderSurfaceLayerList. |
1401 | 1387 |
1402 const WebTransformationMatrix identityMatrix; | 1388 const gfx::Transform identityMatrix; |
1403 scoped_refptr<Layer> parent = Layer::create(); | 1389 scoped_refptr<Layer> parent = Layer::create(); |
1404 scoped_refptr<Layer> child = Layer::create(); | 1390 scoped_refptr<Layer> child = Layer::create(); |
1405 scoped_refptr<Layer> grandChild = Layer::create(); | 1391 scoped_refptr<Layer> grandChild = Layer::create(); |
1406 scoped_refptr<LayerWithForcedDrawsContent> leafNode = make_scoped_refptr(new
LayerWithForcedDrawsContent()); | 1392 scoped_refptr<LayerWithForcedDrawsContent> leafNode = make_scoped_refptr(new
LayerWithForcedDrawsContent()); |
1407 parent->addChild(child); | 1393 parent->addChild(child); |
1408 child->addChild(grandChild); | 1394 child->addChild(grandChild); |
1409 grandChild->addChild(leafNode); | 1395 grandChild->addChild(leafNode); |
1410 | 1396 |
1411 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 1397 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
1412 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(20, 20), false); | 1398 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(20, 20), false); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1450 // renderTarget, | 1436 // renderTarget, |
1451 // - a surface is clipped by an ancestor that contributes to the same | 1437 // - a surface is clipped by an ancestor that contributes to the same |
1452 // renderTarget. | 1438 // renderTarget. |
1453 // | 1439 // |
1454 // In particular, for a layer that owns a renderSurface: | 1440 // In particular, for a layer that owns a renderSurface: |
1455 // - the renderSurfarce inherits any clip from ancestors, and does NOT | 1441 // - the renderSurfarce inherits any clip from ancestors, and does NOT |
1456 // pass that clipped status to the layer itself. | 1442 // pass that clipped status to the layer itself. |
1457 // - but if the layer itself masks to bounds, it is considered clipped | 1443 // - but if the layer itself masks to bounds, it is considered clipped |
1458 // and propagates the clip to the subtree. | 1444 // and propagates the clip to the subtree. |
1459 | 1445 |
1460 const WebTransformationMatrix identityMatrix; | 1446 const gfx::Transform identityMatrix; |
1461 scoped_refptr<Layer> root = Layer::create(); | 1447 scoped_refptr<Layer> root = Layer::create(); |
1462 scoped_refptr<Layer> parent = Layer::create(); | 1448 scoped_refptr<Layer> parent = Layer::create(); |
1463 scoped_refptr<Layer> child1 = Layer::create(); | 1449 scoped_refptr<Layer> child1 = Layer::create(); |
1464 scoped_refptr<Layer> child2 = Layer::create(); | 1450 scoped_refptr<Layer> child2 = Layer::create(); |
1465 scoped_refptr<Layer> grandChild = Layer::create(); | 1451 scoped_refptr<Layer> grandChild = Layer::create(); |
1466 scoped_refptr<LayerWithForcedDrawsContent> leafNode1 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1452 scoped_refptr<LayerWithForcedDrawsContent> leafNode1 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1467 scoped_refptr<LayerWithForcedDrawsContent> leafNode2 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1453 scoped_refptr<LayerWithForcedDrawsContent> leafNode2 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1468 root->addChild(parent); | 1454 root->addChild(parent); |
1469 parent->addChild(child1); | 1455 parent->addChild(child1); |
1470 parent->addChild(child2); | 1456 parent->addChild(child2); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1545 TEST(LayerTreeHostCommonTest, verifyDrawableContentRectForLayers) | 1531 TEST(LayerTreeHostCommonTest, verifyDrawableContentRectForLayers) |
1546 { | 1532 { |
1547 // Verify that layers get the appropriate drawableContentRect when their par
ent masksToBounds is true. | 1533 // Verify that layers get the appropriate drawableContentRect when their par
ent masksToBounds is true. |
1548 // | 1534 // |
1549 // grandChild1 - completely inside the region; drawableContentRect should
be the layer rect expressed in target space. | 1535 // grandChild1 - completely inside the region; drawableContentRect should
be the layer rect expressed in target space. |
1550 // grandChild2 - partially clipped but NOT masksToBounds; the clipRect wil
l be the intersection of layerBounds and the mask region. | 1536 // grandChild2 - partially clipped but NOT masksToBounds; the clipRect wil
l be the intersection of layerBounds and the mask region. |
1551 // grandChild3 - partially clipped and masksToBounds; the drawableContentR
ect will still be the intersection of layerBounds and the mask region. | 1537 // grandChild3 - partially clipped and masksToBounds; the drawableContentR
ect will still be the intersection of layerBounds and the mask region. |
1552 // grandChild4 - outside parent's clipRect; the drawableContentRect should
be empty. | 1538 // grandChild4 - outside parent's clipRect; the drawableContentRect should
be empty. |
1553 // | 1539 // |
1554 | 1540 |
1555 const WebTransformationMatrix identityMatrix; | 1541 const gfx::Transform identityMatrix; |
1556 scoped_refptr<Layer> parent = Layer::create(); | 1542 scoped_refptr<Layer> parent = Layer::create(); |
1557 scoped_refptr<Layer> child = Layer::create(); | 1543 scoped_refptr<Layer> child = Layer::create(); |
1558 scoped_refptr<Layer> grandChild1 = Layer::create(); | 1544 scoped_refptr<Layer> grandChild1 = Layer::create(); |
1559 scoped_refptr<Layer> grandChild2 = Layer::create(); | 1545 scoped_refptr<Layer> grandChild2 = Layer::create(); |
1560 scoped_refptr<Layer> grandChild3 = Layer::create(); | 1546 scoped_refptr<Layer> grandChild3 = Layer::create(); |
1561 scoped_refptr<Layer> grandChild4 = Layer::create(); | 1547 scoped_refptr<Layer> grandChild4 = Layer::create(); |
1562 | 1548 |
1563 parent->addChild(child); | 1549 parent->addChild(child); |
1564 child->addChild(grandChild1); | 1550 child->addChild(grandChild1); |
1565 child->addChild(grandChild2); | 1551 child->addChild(grandChild2); |
(...skipping 29 matching lines...) Expand all Loading... |
1595 | 1581 |
1596 TEST(LayerTreeHostCommonTest, verifyClipRectIsPropagatedCorrectlyToSurfaces) | 1582 TEST(LayerTreeHostCommonTest, verifyClipRectIsPropagatedCorrectlyToSurfaces) |
1597 { | 1583 { |
1598 // Verify that renderSurfaces (and their layers) get the appropriate clipRec
ts when their parent masksToBounds is true. | 1584 // Verify that renderSurfaces (and their layers) get the appropriate clipRec
ts when their parent masksToBounds is true. |
1599 // | 1585 // |
1600 // Layers that own renderSurfaces (at least for now) do not inherit any clip
ping; | 1586 // Layers that own renderSurfaces (at least for now) do not inherit any clip
ping; |
1601 // instead the surface will enforce the clip for the entire subtree. They ma
y still | 1587 // instead the surface will enforce the clip for the entire subtree. They ma
y still |
1602 // have a clipRect of their own layer bounds, however, if masksToBounds was
true. | 1588 // have a clipRect of their own layer bounds, however, if masksToBounds was
true. |
1603 // | 1589 // |
1604 | 1590 |
1605 const WebTransformationMatrix identityMatrix; | 1591 const gfx::Transform identityMatrix; |
1606 scoped_refptr<Layer> parent = Layer::create(); | 1592 scoped_refptr<Layer> parent = Layer::create(); |
1607 scoped_refptr<Layer> child = Layer::create(); | 1593 scoped_refptr<Layer> child = Layer::create(); |
1608 scoped_refptr<Layer> grandChild1 = Layer::create(); | 1594 scoped_refptr<Layer> grandChild1 = Layer::create(); |
1609 scoped_refptr<Layer> grandChild2 = Layer::create(); | 1595 scoped_refptr<Layer> grandChild2 = Layer::create(); |
1610 scoped_refptr<Layer> grandChild3 = Layer::create(); | 1596 scoped_refptr<Layer> grandChild3 = Layer::create(); |
1611 scoped_refptr<Layer> grandChild4 = Layer::create(); | 1597 scoped_refptr<Layer> grandChild4 = Layer::create(); |
1612 scoped_refptr<LayerWithForcedDrawsContent> leafNode1 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1598 scoped_refptr<LayerWithForcedDrawsContent> leafNode1 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1613 scoped_refptr<LayerWithForcedDrawsContent> leafNode2 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1599 scoped_refptr<LayerWithForcedDrawsContent> leafNode2 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1614 scoped_refptr<LayerWithForcedDrawsContent> leafNode3 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1600 scoped_refptr<LayerWithForcedDrawsContent> leafNode3 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
1615 scoped_refptr<LayerWithForcedDrawsContent> leafNode4 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); | 1601 scoped_refptr<LayerWithForcedDrawsContent> leafNode4 = make_scoped_refptr(ne
w LayerWithForcedDrawsContent()); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1686 // Make our render surfaces. | 1672 // Make our render surfaces. |
1687 renderSurface1->setForceRenderSurface(true); | 1673 renderSurface1->setForceRenderSurface(true); |
1688 renderSurface2->setForceRenderSurface(true); | 1674 renderSurface2->setForceRenderSurface(true); |
1689 | 1675 |
1690 // Put an animated opacity on the render surface. | 1676 // Put an animated opacity on the render surface. |
1691 addOpacityTransitionToController(*renderSurface1->layerAnimationController()
, 10, 1, 0, false); | 1677 addOpacityTransitionToController(*renderSurface1->layerAnimationController()
, 10, 1, 0, false); |
1692 | 1678 |
1693 // Also put an animated opacity on a layer without descendants. | 1679 // Also put an animated opacity on a layer without descendants. |
1694 addOpacityTransitionToController(*grandChildOfRoot->layerAnimationController
(), 10, 1, 0, false); | 1680 addOpacityTransitionToController(*grandChildOfRoot->layerAnimationController
(), 10, 1, 0, false); |
1695 | 1681 |
1696 WebTransformationMatrix layerTransform; | 1682 gfx::Transform layerTransform; |
1697 layerTransform.translate(1, 1); | 1683 layerTransform.Translate(1, 1); |
1698 WebTransformationMatrix sublayerTransform; | 1684 gfx::Transform sublayerTransform; |
1699 sublayerTransform.scale3d(10, 1, 1); | 1685 sublayerTransform.Scale3d(10, 1, 1); |
1700 | 1686 |
1701 // Put a transform animation on the render surface. | 1687 // Put a transform animation on the render surface. |
1702 addAnimatedTransformToController(*renderSurface2->layerAnimationController()
, 10, 30, 0); | 1688 addAnimatedTransformToController(*renderSurface2->layerAnimationController()
, 10, 30, 0); |
1703 | 1689 |
1704 // Also put transform animations on grandChildOfRoot, and grandChildOfRS2 | 1690 // Also put transform animations on grandChildOfRoot, and grandChildOfRS2 |
1705 addAnimatedTransformToController(*grandChildOfRoot->layerAnimationController
(), 10, 30, 0); | 1691 addAnimatedTransformToController(*grandChildOfRoot->layerAnimationController
(), 10, 30, 0); |
1706 addAnimatedTransformToController(*grandChildOfRS2->layerAnimationController(
), 10, 30, 0); | 1692 addAnimatedTransformToController(*grandChildOfRS2->layerAnimationController(
), 10, 30, 0); |
1707 | 1693 |
1708 setLayerPropertiesForTesting(parent.get(), layerTransform, sublayerTransform
, gfx::PointF(0.25, 0), gfx::PointF(2.5, 0), gfx::Size(10, 10), false); | 1694 setLayerPropertiesForTesting(parent.get(), layerTransform, sublayerTransform
, gfx::PointF(0.25, 0), gfx::PointF(2.5, 0), gfx::Size(10, 10), false); |
1709 setLayerPropertiesForTesting(renderSurface1.get(), layerTransform, sublayerT
ransform, gfx::PointF(0.25, 0), gfx::PointF(2.5, 0), gfx::Size(10, 10), false); | 1695 setLayerPropertiesForTesting(renderSurface1.get(), layerTransform, sublayerT
ransform, gfx::PointF(0.25, 0), gfx::PointF(2.5, 0), gfx::Size(10, 10), false); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1784 EXPECT_FALSE(grandChildOfRS1->screenSpaceTransformIsAnimating()); | 1770 EXPECT_FALSE(grandChildOfRS1->screenSpaceTransformIsAnimating()); |
1785 EXPECT_TRUE(renderSurface2->screenSpaceTransformIsAnimating()); | 1771 EXPECT_TRUE(renderSurface2->screenSpaceTransformIsAnimating()); |
1786 EXPECT_TRUE(renderSurface2->renderSurface()->screenSpaceTransformsAreAnimati
ng()); | 1772 EXPECT_TRUE(renderSurface2->renderSurface()->screenSpaceTransformsAreAnimati
ng()); |
1787 EXPECT_TRUE(childOfRS2->screenSpaceTransformIsAnimating()); | 1773 EXPECT_TRUE(childOfRS2->screenSpaceTransformIsAnimating()); |
1788 EXPECT_TRUE(grandChildOfRS2->screenSpaceTransformIsAnimating()); | 1774 EXPECT_TRUE(grandChildOfRS2->screenSpaceTransformIsAnimating()); |
1789 | 1775 |
1790 | 1776 |
1791 // Sanity check. If these fail there is probably a bug in the test itself. | 1777 // Sanity check. If these fail there is probably a bug in the test itself. |
1792 // It is expected that we correctly set up transforms so that the y-componen
t of the screen-space transform | 1778 // It is expected that we correctly set up transforms so that the y-componen
t of the screen-space transform |
1793 // encodes the "depth" of the layer in the tree. | 1779 // encodes the "depth" of the layer in the tree. |
1794 EXPECT_FLOAT_EQ(1, parent->screenSpaceTransform().m42()); | 1780 EXPECT_FLOAT_EQ(1, parent->screenSpaceTransform().matrix().getDouble(1, 3)); |
1795 EXPECT_FLOAT_EQ(2, childOfRoot->screenSpaceTransform().m42()); | 1781 EXPECT_FLOAT_EQ(2, childOfRoot->screenSpaceTransform().matrix().getDouble(1,
3)); |
1796 EXPECT_FLOAT_EQ(3, grandChildOfRoot->screenSpaceTransform().m42()); | 1782 EXPECT_FLOAT_EQ(3, grandChildOfRoot->screenSpaceTransform().matrix().getDoub
le(1, 3)); |
1797 | 1783 |
1798 EXPECT_FLOAT_EQ(2, renderSurface1->screenSpaceTransform().m42()); | 1784 EXPECT_FLOAT_EQ(2, renderSurface1->screenSpaceTransform().matrix().getDouble
(1, 3)); |
1799 EXPECT_FLOAT_EQ(3, childOfRS1->screenSpaceTransform().m42()); | 1785 EXPECT_FLOAT_EQ(3, childOfRS1->screenSpaceTransform().matrix().getDouble(1,
3)); |
1800 EXPECT_FLOAT_EQ(4, grandChildOfRS1->screenSpaceTransform().m42()); | 1786 EXPECT_FLOAT_EQ(4, grandChildOfRS1->screenSpaceTransform().matrix().getDoubl
e(1, 3)); |
1801 | 1787 |
1802 EXPECT_FLOAT_EQ(3, renderSurface2->screenSpaceTransform().m42()); | 1788 EXPECT_FLOAT_EQ(3, renderSurface2->screenSpaceTransform().matrix().getDouble
(1, 3)); |
1803 EXPECT_FLOAT_EQ(4, childOfRS2->screenSpaceTransform().m42()); | 1789 EXPECT_FLOAT_EQ(4, childOfRS2->screenSpaceTransform().matrix().getDouble(1,
3)); |
1804 EXPECT_FLOAT_EQ(5, grandChildOfRS2->screenSpaceTransform().m42()); | 1790 EXPECT_FLOAT_EQ(5, grandChildOfRS2->screenSpaceTransform().matrix().getDoubl
e(1, 3)); |
1805 } | 1791 } |
1806 | 1792 |
1807 TEST(LayerTreeHostCommonTest, verifyVisibleRectForIdentityTransform) | 1793 TEST(LayerTreeHostCommonTest, verifyVisibleRectForIdentityTransform) |
1808 { | 1794 { |
1809 // Test the calculateVisibleRect() function works correctly for identity tra
nsforms. | 1795 // Test the calculateVisibleRect() function works correctly for identity tra
nsforms. |
1810 | 1796 |
1811 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); | 1797 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); |
1812 WebTransformationMatrix layerToSurfaceTransform; | 1798 gfx::Transform layerToSurfaceTransform; |
1813 | 1799 |
1814 // Case 1: Layer is contained within the surface. | 1800 // Case 1: Layer is contained within the surface. |
1815 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(10, 10), gfx::Size(30, 30)
); | 1801 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(10, 10), gfx::Size(30, 30)
); |
1816 gfx::Rect expected = gfx::Rect(gfx::Point(10, 10), gfx::Size(30, 30)); | 1802 gfx::Rect expected = gfx::Rect(gfx::Point(10, 10), gfx::Size(30, 30)); |
1817 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 1803 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
1818 EXPECT_RECT_EQ(expected, actual); | 1804 EXPECT_RECT_EQ(expected, actual); |
1819 | 1805 |
1820 // Case 2: Layer is outside the surface rect. | 1806 // Case 2: Layer is outside the surface rect. |
1821 layerContentRect = gfx::Rect(gfx::Point(120, 120), gfx::Size(30, 30)); | 1807 layerContentRect = gfx::Rect(gfx::Point(120, 120), gfx::Size(30, 30)); |
1822 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1808 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1823 EXPECT_TRUE(actual.IsEmpty()); | 1809 EXPECT_TRUE(actual.IsEmpty()); |
1824 | 1810 |
1825 // Case 3: Layer is partially overlapping the surface rect. | 1811 // Case 3: Layer is partially overlapping the surface rect. |
1826 layerContentRect = gfx::Rect(gfx::Point(80, 80), gfx::Size(30, 30)); | 1812 layerContentRect = gfx::Rect(gfx::Point(80, 80), gfx::Size(30, 30)); |
1827 expected = gfx::Rect(gfx::Point(80, 80), gfx::Size(20, 20)); | 1813 expected = gfx::Rect(gfx::Point(80, 80), gfx::Size(20, 20)); |
1828 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1814 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1829 EXPECT_RECT_EQ(expected, actual); | 1815 EXPECT_RECT_EQ(expected, actual); |
1830 } | 1816 } |
1831 | 1817 |
1832 TEST(LayerTreeHostCommonTest, verifyVisibleRectForTranslations) | 1818 TEST(LayerTreeHostCommonTest, verifyVisibleRectForTranslations) |
1833 { | 1819 { |
1834 // Test the calculateVisibleRect() function works correctly for scaling tran
sforms. | 1820 // Test the calculateVisibleRect() function works correctly for scaling tran
sforms. |
1835 | 1821 |
1836 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); | 1822 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); |
1837 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); | 1823 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); |
1838 WebTransformationMatrix layerToSurfaceTransform; | 1824 gfx::Transform layerToSurfaceTransform; |
1839 | 1825 |
1840 // Case 1: Layer is contained within the surface. | 1826 // Case 1: Layer is contained within the surface. |
1841 layerToSurfaceTransform.makeIdentity(); | 1827 layerToSurfaceTransform.MakeIdentity(); |
1842 layerToSurfaceTransform.translate(10, 10); | 1828 layerToSurfaceTransform.Translate(10, 10); |
1843 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); | 1829 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); |
1844 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 1830 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
1845 EXPECT_RECT_EQ(expected, actual); | 1831 EXPECT_RECT_EQ(expected, actual); |
1846 | 1832 |
1847 // Case 2: Layer is outside the surface rect. | 1833 // Case 2: Layer is outside the surface rect. |
1848 layerToSurfaceTransform.makeIdentity(); | 1834 layerToSurfaceTransform.MakeIdentity(); |
1849 layerToSurfaceTransform.translate(120, 120); | 1835 layerToSurfaceTransform.Translate(120, 120); |
1850 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1836 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1851 EXPECT_TRUE(actual.IsEmpty()); | 1837 EXPECT_TRUE(actual.IsEmpty()); |
1852 | 1838 |
1853 // Case 3: Layer is partially overlapping the surface rect. | 1839 // Case 3: Layer is partially overlapping the surface rect. |
1854 layerToSurfaceTransform.makeIdentity(); | 1840 layerToSurfaceTransform.MakeIdentity(); |
1855 layerToSurfaceTransform.translate(80, 80); | 1841 layerToSurfaceTransform.Translate(80, 80); |
1856 expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(20, 20)); | 1842 expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(20, 20)); |
1857 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1843 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1858 EXPECT_RECT_EQ(expected, actual); | 1844 EXPECT_RECT_EQ(expected, actual); |
1859 } | 1845 } |
1860 | 1846 |
1861 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor2DRotations) | 1847 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor2DRotations) |
1862 { | 1848 { |
1863 // Test the calculateVisibleRect() function works correctly for rotations ab
out z-axis (i.e. 2D rotations). | 1849 // Test the calculateVisibleRect() function works correctly for rotations ab
out z-axis (i.e. 2D rotations). |
1864 // Remember that calculateVisibleRect() should return the visible rect in th
e layer's space. | 1850 // Remember that calculateVisibleRect() should return the visible rect in th
e layer's space. |
1865 | 1851 |
1866 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); | 1852 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); |
1867 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); | 1853 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); |
1868 WebTransformationMatrix layerToSurfaceTransform; | 1854 gfx::Transform layerToSurfaceTransform; |
1869 | 1855 |
1870 // Case 1: Layer is contained within the surface. | 1856 // Case 1: Layer is contained within the surface. |
1871 layerToSurfaceTransform.makeIdentity(); | 1857 layerToSurfaceTransform.MakeIdentity(); |
1872 layerToSurfaceTransform.translate(50, 50); | 1858 layerToSurfaceTransform.Translate(50, 50); |
1873 layerToSurfaceTransform.rotate(45); | 1859 layerToSurfaceTransform.Rotate(45); |
1874 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); | 1860 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); |
1875 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 1861 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
1876 EXPECT_RECT_EQ(expected, actual); | 1862 EXPECT_RECT_EQ(expected, actual); |
1877 | 1863 |
1878 // Case 2: Layer is outside the surface rect. | 1864 // Case 2: Layer is outside the surface rect. |
1879 layerToSurfaceTransform.makeIdentity(); | 1865 layerToSurfaceTransform.MakeIdentity(); |
1880 layerToSurfaceTransform.translate(-50, 0); | 1866 layerToSurfaceTransform.Translate(-50, 0); |
1881 layerToSurfaceTransform.rotate(45); | 1867 layerToSurfaceTransform.Rotate(45); |
1882 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1868 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1883 EXPECT_TRUE(actual.IsEmpty()); | 1869 EXPECT_TRUE(actual.IsEmpty()); |
1884 | 1870 |
1885 // Case 3: The layer is rotated about its top-left corner. In surface space,
the layer | 1871 // Case 3: The layer is rotated about its top-left corner. In surface space,
the layer |
1886 // is oriented diagonally, with the left half outside of the renderS
urface. In | 1872 // is oriented diagonally, with the left half outside of the renderS
urface. In |
1887 // this case, the visible rect should still be the entire layer (rem
ember the | 1873 // this case, the visible rect should still be the entire layer (rem
ember the |
1888 // visible rect is computed in layer space); both the top-left and | 1874 // visible rect is computed in layer space); both the top-left and |
1889 // bottom-right corners of the layer are still visible. | 1875 // bottom-right corners of the layer are still visible. |
1890 layerToSurfaceTransform.makeIdentity(); | 1876 layerToSurfaceTransform.MakeIdentity(); |
1891 layerToSurfaceTransform.rotate(45); | 1877 layerToSurfaceTransform.Rotate(45); |
1892 expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); | 1878 expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(30, 30)); |
1893 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1879 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1894 EXPECT_RECT_EQ(expected, actual); | 1880 EXPECT_RECT_EQ(expected, actual); |
1895 | 1881 |
1896 // Case 4: The layer is rotated about its top-left corner, and translated up
wards. In | 1882 // Case 4: The layer is rotated about its top-left corner, and translated up
wards. In |
1897 // surface space, the layer is oriented diagonally, with only the to
p corner | 1883 // surface space, the layer is oriented diagonally, with only the to
p corner |
1898 // of the surface overlapping the layer. In layer space, the render
surface | 1884 // of the surface overlapping the layer. In layer space, the render
surface |
1899 // overlaps the right side of the layer. The visible rect should be
the | 1885 // overlaps the right side of the layer. The visible rect should be
the |
1900 // layer's right half. | 1886 // layer's right half. |
1901 layerToSurfaceTransform.makeIdentity(); | 1887 layerToSurfaceTransform.MakeIdentity(); |
1902 layerToSurfaceTransform.translate(0, -sqrt(2.0) * 15); | 1888 layerToSurfaceTransform.Translate(0, -sqrt(2.0) * 15); |
1903 layerToSurfaceTransform.rotate(45); | 1889 layerToSurfaceTransform.Rotate(45); |
1904 expected = gfx::Rect(gfx::Point(15, 0), gfx::Size(15, 30)); // right half of
layer bounds. | 1890 expected = gfx::Rect(gfx::Point(15, 0), gfx::Size(15, 30)); // right half of
layer bounds. |
1905 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1891 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1906 EXPECT_RECT_EQ(expected, actual); | 1892 EXPECT_RECT_EQ(expected, actual); |
1907 } | 1893 } |
1908 | 1894 |
1909 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dOrthographicTransform) | 1895 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dOrthographicTransform) |
1910 { | 1896 { |
1911 // Test that the calculateVisibleRect() function works correctly for 3d tran
sforms. | 1897 // Test that the calculateVisibleRect() function works correctly for 3d tran
sforms. |
1912 | 1898 |
1913 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); | 1899 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); |
1914 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)
); | 1900 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)
); |
1915 WebTransformationMatrix layerToSurfaceTransform; | 1901 gfx::Transform layerToSurfaceTransform; |
1916 | 1902 |
1917 // Case 1: Orthographic projection of a layer rotated about y-axis by 45 deg
rees, should be fully contained in the renderSurface. | 1903 // Case 1: Orthographic projection of a layer rotated about y-axis by 45 deg
rees, should be fully contained in the renderSurface. |
1918 layerToSurfaceTransform.makeIdentity(); | 1904 layerToSurfaceTransform.MakeIdentity(); |
1919 layerToSurfaceTransform.rotate3d(0, 45, 0); | 1905 MathUtil::rotateEulerAngles(&layerToSurfaceTransform, 0, 45, 0); |
1920 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)); | 1906 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)); |
1921 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 1907 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
1922 EXPECT_RECT_EQ(expected, actual); | 1908 EXPECT_RECT_EQ(expected, actual); |
1923 | 1909 |
1924 // Case 2: Orthographic projection of a layer rotated about y-axis by 45 deg
rees, but | 1910 // Case 2: Orthographic projection of a layer rotated about y-axis by 45 deg
rees, but |
1925 // shifted to the side so only the right-half the layer would be vis
ible on | 1911 // shifted to the side so only the right-half the layer would be vis
ible on |
1926 // the surface. | 1912 // the surface. |
1927 double halfWidthOfRotatedLayer = (100 / sqrt(2.0)) * 0.5; // 100 is the un-r
otated layer width; divided by sqrt(2) is the rotated width. | 1913 double halfWidthOfRotatedLayer = (100 / sqrt(2.0)) * 0.5; // 100 is the un-r
otated layer width; divided by sqrt(2) is the rotated width. |
1928 layerToSurfaceTransform.makeIdentity(); | 1914 layerToSurfaceTransform.MakeIdentity(); |
1929 layerToSurfaceTransform.translate(-halfWidthOfRotatedLayer, 0); | 1915 layerToSurfaceTransform.Translate(-halfWidthOfRotatedLayer, 0); |
1930 layerToSurfaceTransform.rotate3d(0, 45, 0); // rotates about the left edge o
f the layer | 1916 MathUtil::rotateEulerAngles(&layerToSurfaceTransform, 0, 45, 0); // rotates
about the left edge of the layer |
1931 expected = gfx::Rect(gfx::Point(50, 0), gfx::Size(50, 100)); // right half o
f the layer. | 1917 expected = gfx::Rect(gfx::Point(50, 0), gfx::Size(50, 100)); // right half o
f the layer. |
1932 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1918 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1933 EXPECT_RECT_EQ(expected, actual); | 1919 EXPECT_RECT_EQ(expected, actual); |
1934 } | 1920 } |
1935 | 1921 |
1936 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dPerspectiveTransform) | 1922 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dPerspectiveTransform) |
1937 { | 1923 { |
1938 // Test the calculateVisibleRect() function works correctly when the layer h
as a | 1924 // Test the calculateVisibleRect() function works correctly when the layer h
as a |
1939 // perspective projection onto the target surface. | 1925 // perspective projection onto the target surface. |
1940 | 1926 |
1941 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); | 1927 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); |
1942 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(-50, -50), gfx::Size(200,
200)); | 1928 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(-50, -50), gfx::Size(200,
200)); |
1943 WebTransformationMatrix layerToSurfaceTransform; | 1929 gfx::Transform layerToSurfaceTransform; |
1944 | 1930 |
1945 // Case 1: Even though the layer is twice as large as the surface, due to pe
rspective | 1931 // Case 1: Even though the layer is twice as large as the surface, due to pe
rspective |
1946 // foreshortening, the layer will fit fully in the surface when its
translated | 1932 // foreshortening, the layer will fit fully in the surface when its
translated |
1947 // more than the perspective amount. | 1933 // more than the perspective amount. |
1948 layerToSurfaceTransform.makeIdentity(); | 1934 layerToSurfaceTransform.MakeIdentity(); |
1949 | 1935 |
1950 // The following sequence of transforms applies the perspective about the ce
nter of the surface. | 1936 // The following sequence of transforms applies the perspective about the ce
nter of the surface. |
1951 layerToSurfaceTransform.translate(50, 50); | 1937 layerToSurfaceTransform.Translate(50, 50); |
1952 layerToSurfaceTransform.applyPerspective(9); | 1938 layerToSurfaceTransform.ApplyPerspectiveDepth(9); |
1953 layerToSurfaceTransform.translate(-50, -50); | 1939 layerToSurfaceTransform.Translate(-50, -50); |
1954 | 1940 |
1955 // This translate places the layer in front of the surface's projection plan
e. | 1941 // This translate places the layer in front of the surface's projection plan
e. |
1956 layerToSurfaceTransform.translate3d(0, 0, -27); | 1942 layerToSurfaceTransform.Translate3d(0, 0, -27); |
1957 | 1943 |
1958 gfx::Rect expected = gfx::Rect(gfx::Point(-50, -50), gfx::Size(200, 200)); | 1944 gfx::Rect expected = gfx::Rect(gfx::Point(-50, -50), gfx::Size(200, 200)); |
1959 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 1945 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
1960 EXPECT_RECT_EQ(expected, actual); | 1946 EXPECT_RECT_EQ(expected, actual); |
1961 | 1947 |
1962 // Case 2: same projection as before, except that the layer is also translat
ed to the | 1948 // Case 2: same projection as before, except that the layer is also translat
ed to the |
1963 // side, so that only the right half of the layer should be visible. | 1949 // side, so that only the right half of the layer should be visible. |
1964 // | 1950 // |
1965 // Explanation of expected result: | 1951 // Explanation of expected result: |
1966 // The perspective ratio is (z distance between layer and camera origin) / (
z distance between projection plane and camera origin) == ((-27 - 9) / 9) | 1952 // The perspective ratio is (z distance between layer and camera origin) / (
z distance between projection plane and camera origin) == ((-27 - 9) / 9) |
1967 // Then, by similar triangles, if we want to move a layer by translating -50
units in projected surface units (so that only half of it is | 1953 // Then, by similar triangles, if we want to move a layer by translating -50
units in projected surface units (so that only half of it is |
1968 // visible), then we would need to translate by (-36 / 9) * -50 == -200 in t
he layer's units. | 1954 // visible), then we would need to translate by (-36 / 9) * -50 == -200 in t
he layer's units. |
1969 // | 1955 // |
1970 layerToSurfaceTransform.translate3d(-200, 0, 0); | 1956 layerToSurfaceTransform.Translate3d(-200, 0, 0); |
1971 expected = gfx::Rect(gfx::Point(50, -50), gfx::Size(100, 200)); // The right
half of the layer's bounding rect. | 1957 expected = gfx::Rect(gfx::Point(50, -50), gfx::Size(100, 200)); // The right
half of the layer's bounding rect. |
1972 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); | 1958 actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRect, layerC
ontentRect, layerToSurfaceTransform); |
1973 EXPECT_RECT_EQ(expected, actual); | 1959 EXPECT_RECT_EQ(expected, actual); |
1974 } | 1960 } |
1975 | 1961 |
1976 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dOrthographicIsNotClippedBehi
ndSurface) | 1962 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dOrthographicIsNotClippedBehi
ndSurface) |
1977 { | 1963 { |
1978 // There is currently no explicit concept of an orthographic projection plan
e in our | 1964 // There is currently no explicit concept of an orthographic projection plan
e in our |
1979 // code (nor in the CSS spec to my knowledge). Therefore, layers that are te
chnically | 1965 // code (nor in the CSS spec to my knowledge). Therefore, layers that are te
chnically |
1980 // behind the surface in an orthographic world should not be clipped when th
ey are | 1966 // behind the surface in an orthographic world should not be clipped when th
ey are |
1981 // flattened to the surface. | 1967 // flattened to the surface. |
1982 | 1968 |
1983 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); | 1969 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100
)); |
1984 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)
); | 1970 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)
); |
1985 WebTransformationMatrix layerToSurfaceTransform; | 1971 gfx::Transform layerToSurfaceTransform; |
1986 | 1972 |
1987 // This sequence of transforms effectively rotates the layer about the y-axi
s at the | 1973 // This sequence of transforms effectively rotates the layer about the y-axi
s at the |
1988 // center of the layer. | 1974 // center of the layer. |
1989 layerToSurfaceTransform.makeIdentity(); | 1975 layerToSurfaceTransform.MakeIdentity(); |
1990 layerToSurfaceTransform.translate(50, 0); | 1976 layerToSurfaceTransform.Translate(50, 0); |
1991 layerToSurfaceTransform.rotate3d(0, 45, 0); | 1977 MathUtil::rotateEulerAngles(&layerToSurfaceTransform, 0, 45, 0); |
1992 layerToSurfaceTransform.translate(-50, 0); | 1978 layerToSurfaceTransform.Translate(-50, 0); |
1993 | 1979 |
1994 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)); | 1980 gfx::Rect expected = gfx::Rect(gfx::Point(0, 0), gfx::Size(100, 100)); |
1995 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 1981 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
1996 EXPECT_RECT_EQ(expected, actual); | 1982 EXPECT_RECT_EQ(expected, actual); |
1997 } | 1983 } |
1998 | 1984 |
1999 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dPerspectiveWhenClippedByW) | 1985 TEST(LayerTreeHostCommonTest, verifyVisibleRectFor3dPerspectiveWhenClippedByW) |
2000 { | 1986 { |
2001 // Test the calculateVisibleRect() function works correctly when projecting
a surface | 1987 // Test the calculateVisibleRect() function works correctly when projecting
a surface |
2002 // onto a layer, but the layer is partially behind the camera (not just behi
nd the | 1988 // onto a layer, but the layer is partially behind the camera (not just behi
nd the |
2003 // projection plane). In this case, the cartesian coordinates may seem to be
valid, | 1989 // projection plane). In this case, the cartesian coordinates may seem to be
valid, |
2004 // but actually they are not. The visibleRect needs to be properly clipped b
y the | 1990 // but actually they are not. The visibleRect needs to be properly clipped b
y the |
2005 // w = 0 plane in homogeneous coordinates before converting to cartesian coo
rdinates. | 1991 // w = 0 plane in homogeneous coordinates before converting to cartesian coo
rdinates. |
2006 | 1992 |
2007 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(-50, -50), gfx::Size(100,
100)); | 1993 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(-50, -50), gfx::Size(100,
100)); |
2008 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(-10, -1), gfx::Size(20, 2)
); | 1994 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(-10, -1), gfx::Size(20, 2)
); |
2009 WebTransformationMatrix layerToSurfaceTransform; | 1995 gfx::Transform layerToSurfaceTransform; |
2010 | 1996 |
2011 // The layer is positioned so that the right half of the layer should be in
front of | 1997 // The layer is positioned so that the right half of the layer should be in
front of |
2012 // the camera, while the other half is behind the surface's projection plane
. The | 1998 // the camera, while the other half is behind the surface's projection plane
. The |
2013 // following sequence of transforms applies the perspective and rotation abo
ut the | 1999 // following sequence of transforms applies the perspective and rotation abo
ut the |
2014 // center of the layer. | 2000 // center of the layer. |
2015 layerToSurfaceTransform.makeIdentity(); | 2001 layerToSurfaceTransform.MakeIdentity(); |
2016 layerToSurfaceTransform.applyPerspective(1); | 2002 layerToSurfaceTransform.ApplyPerspectiveDepth(1); |
2017 layerToSurfaceTransform.translate3d(-2, 0, 1); | 2003 layerToSurfaceTransform.Translate3d(-2, 0, 1); |
2018 layerToSurfaceTransform.rotate3d(0, 45, 0); | 2004 MathUtil::rotateEulerAngles(&layerToSurfaceTransform, 0, 45, 0); |
2019 | 2005 |
2020 // Sanity check that this transform does indeed cause w < 0 when applying th
e | 2006 // Sanity check that this transform does indeed cause w < 0 when applying th
e |
2021 // transform, otherwise this code is not testing the intended scenario. | 2007 // transform, otherwise this code is not testing the intended scenario. |
2022 bool clipped = false; | 2008 bool clipped = false; |
2023 MathUtil::mapQuad(layerToSurfaceTransform, gfx::QuadF(gfx::RectF(layerConten
tRect)), clipped); | 2009 MathUtil::mapQuad(layerToSurfaceTransform, gfx::QuadF(gfx::RectF(layerConten
tRect)), clipped); |
2024 ASSERT_TRUE(clipped); | 2010 ASSERT_TRUE(clipped); |
2025 | 2011 |
2026 int expectedXPosition = 0; | 2012 int expectedXPosition = 0; |
2027 int expectedWidth = 10; | 2013 int expectedWidth = 10; |
2028 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 2014 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
2029 EXPECT_EQ(expectedXPosition, actual.x()); | 2015 EXPECT_EQ(expectedXPosition, actual.x()); |
2030 EXPECT_EQ(expectedWidth, actual.width()); | 2016 EXPECT_EQ(expectedWidth, actual.width()); |
2031 } | 2017 } |
2032 | 2018 |
2033 TEST(LayerTreeHostCommonTest, verifyVisibleRectForPerspectiveUnprojection) | 2019 TEST(LayerTreeHostCommonTest, verifyVisibleRectForPerspectiveUnprojection) |
2034 { | 2020 { |
2035 // To determine visibleRect in layer space, there needs to be an un-projecti
on from | 2021 // To determine visibleRect in layer space, there needs to be an un-projecti
on from |
2036 // surface space to layer space. When the original transform was a perspecti
ve | 2022 // surface space to layer space. When the original transform was a perspecti
ve |
2037 // projection that was clipped, it returns a rect that encloses the clipped
bounds. | 2023 // projection that was clipped, it returns a rect that encloses the clipped
bounds. |
2038 // Un-projecting this new rect may require clipping again. | 2024 // Un-projecting this new rect may require clipping again. |
2039 | 2025 |
2040 // This sequence of transforms causes one corner of the layer to protrude ac
ross the w = 0 plane, and should be clipped. | 2026 // This sequence of transforms causes one corner of the layer to protrude ac
ross the w = 0 plane, and should be clipped. |
2041 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(-50, -50), gfx::Size(100,
100)); | 2027 gfx::Rect targetSurfaceRect = gfx::Rect(gfx::Point(-50, -50), gfx::Size(100,
100)); |
2042 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(-10, -10), gfx::Size(20, 2
0)); | 2028 gfx::Rect layerContentRect = gfx::Rect(gfx::Point(-10, -10), gfx::Size(20, 2
0)); |
2043 WebTransformationMatrix layerToSurfaceTransform; | 2029 gfx::Transform layerToSurfaceTransform; |
2044 layerToSurfaceTransform.makeIdentity(); | 2030 layerToSurfaceTransform.MakeIdentity(); |
2045 layerToSurfaceTransform.applyPerspective(1); | 2031 layerToSurfaceTransform.ApplyPerspectiveDepth(1); |
2046 layerToSurfaceTransform.translate3d(0, 0, -5); | 2032 layerToSurfaceTransform.Translate3d(0, 0, -5); |
2047 layerToSurfaceTransform.rotate3d(0, 45, 0); | 2033 MathUtil::rotateEulerAngles(&layerToSurfaceTransform, 0, 45, 0); |
2048 layerToSurfaceTransform.rotate3d(80, 0, 0); | 2034 MathUtil::rotateEulerAngles(&layerToSurfaceTransform, 80, 0, 0); |
2049 | 2035 |
2050 // Sanity check that un-projection does indeed cause w < 0, otherwise this c
ode is not | 2036 // Sanity check that un-projection does indeed cause w < 0, otherwise this c
ode is not |
2051 // testing the intended scenario. | 2037 // testing the intended scenario. |
2052 bool clipped = false; | 2038 bool clipped = false; |
2053 gfx::RectF clippedRect = MathUtil::mapClippedRect(layerToSurfaceTransform, l
ayerContentRect); | 2039 gfx::RectF clippedRect = MathUtil::mapClippedRect(layerToSurfaceTransform, l
ayerContentRect); |
2054 MathUtil::projectQuad(layerToSurfaceTransform.inverse(), gfx::QuadF(clippedR
ect), clipped); | 2040 MathUtil::projectQuad(MathUtil::inverse(layerToSurfaceTransform), gfx::QuadF
(clippedRect), clipped); |
2055 ASSERT_TRUE(clipped); | 2041 ASSERT_TRUE(clipped); |
2056 | 2042 |
2057 // Only the corner of the layer is not visible on the surface because of bei
ng | 2043 // Only the corner of the layer is not visible on the surface because of bei
ng |
2058 // clipped. But, the net result of rounding visible region to an axis-aligne
d rect is | 2044 // clipped. But, the net result of rounding visible region to an axis-aligne
d rect is |
2059 // that the entire layer should still be considered visible. | 2045 // that the entire layer should still be considered visible. |
2060 gfx::Rect expected = gfx::Rect(gfx::Point(-10, -10), gfx::Size(20, 20)); | 2046 gfx::Rect expected = gfx::Rect(gfx::Point(-10, -10), gfx::Size(20, 20)); |
2061 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); | 2047 gfx::Rect actual = LayerTreeHostCommon::calculateVisibleRect(targetSurfaceRe
ct, layerContentRect, layerToSurfaceTransform); |
2062 EXPECT_RECT_EQ(expected, actual); | 2048 EXPECT_RECT_EQ(expected, actual); |
2063 } | 2049 } |
2064 | 2050 |
2065 TEST(LayerTreeHostCommonTest, verifyDrawableAndVisibleContentRectsForSimpleLayer
s) | 2051 TEST(LayerTreeHostCommonTest, verifyDrawableAndVisibleContentRectsForSimpleLayer
s) |
2066 { | 2052 { |
2067 scoped_refptr<Layer> root = Layer::create(); | 2053 scoped_refptr<Layer> root = Layer::create(); |
2068 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2054 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2069 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2055 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2070 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2056 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2071 root->addChild(child1); | 2057 root->addChild(child1); |
2072 root->addChild(child2); | 2058 root->addChild(child2); |
2073 root->addChild(child3); | 2059 root->addChild(child3); |
2074 | 2060 |
2075 WebTransformationMatrix identityMatrix; | 2061 gfx::Transform identityMatrix; |
2076 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2062 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2077 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(50, 50), false); | 2063 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(50, 50), false); |
2078 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); | 2064 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); |
2079 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); | 2065 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); |
2080 | 2066 |
2081 executeCalculateDrawTransformsAndVisibility(root.get()); | 2067 executeCalculateDrawTransformsAndVisibility(root.get()); |
2082 | 2068 |
2083 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), root->renderSurface()->drawableCon
tentRect()); | 2069 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), root->renderSurface()->drawableCon
tentRect()); |
2084 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), root->drawableContentRect()); | 2070 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), root->drawableContentRect()); |
2085 | 2071 |
(...skipping 16 matching lines...) Expand all Loading... |
2102 scoped_refptr<Layer> root = Layer::create(); | 2088 scoped_refptr<Layer> root = Layer::create(); |
2103 scoped_refptr<Layer> child = Layer::create(); | 2089 scoped_refptr<Layer> child = Layer::create(); |
2104 scoped_refptr<LayerWithForcedDrawsContent> grandChild1 = make_scoped_refptr(
new LayerWithForcedDrawsContent()); | 2090 scoped_refptr<LayerWithForcedDrawsContent> grandChild1 = make_scoped_refptr(
new LayerWithForcedDrawsContent()); |
2105 scoped_refptr<LayerWithForcedDrawsContent> grandChild2 = make_scoped_refptr(
new LayerWithForcedDrawsContent()); | 2091 scoped_refptr<LayerWithForcedDrawsContent> grandChild2 = make_scoped_refptr(
new LayerWithForcedDrawsContent()); |
2106 scoped_refptr<LayerWithForcedDrawsContent> grandChild3 = make_scoped_refptr(
new LayerWithForcedDrawsContent()); | 2092 scoped_refptr<LayerWithForcedDrawsContent> grandChild3 = make_scoped_refptr(
new LayerWithForcedDrawsContent()); |
2107 root->addChild(child); | 2093 root->addChild(child); |
2108 child->addChild(grandChild1); | 2094 child->addChild(grandChild1); |
2109 child->addChild(grandChild2); | 2095 child->addChild(grandChild2); |
2110 child->addChild(grandChild3); | 2096 child->addChild(grandChild3); |
2111 | 2097 |
2112 WebTransformationMatrix identityMatrix; | 2098 gfx::Transform identityMatrix; |
2113 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2099 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2114 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2100 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2115 setLayerPropertiesForTesting(grandChild1.get(), identityMatrix, identityMatr
ix, gfx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); | 2101 setLayerPropertiesForTesting(grandChild1.get(), identityMatrix, identityMatr
ix, gfx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); |
2116 setLayerPropertiesForTesting(grandChild2.get(), identityMatrix, identityMatr
ix, gfx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); | 2102 setLayerPropertiesForTesting(grandChild2.get(), identityMatrix, identityMatr
ix, gfx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); |
2117 setLayerPropertiesForTesting(grandChild3.get(), identityMatrix, identityMatr
ix, gfx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); | 2103 setLayerPropertiesForTesting(grandChild3.get(), identityMatrix, identityMatr
ix, gfx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); |
2118 | 2104 |
2119 child->setMasksToBounds(true); | 2105 child->setMasksToBounds(true); |
2120 executeCalculateDrawTransformsAndVisibility(root.get()); | 2106 executeCalculateDrawTransformsAndVisibility(root.get()); |
2121 | 2107 |
2122 ASSERT_FALSE(child->renderSurface()); | 2108 ASSERT_FALSE(child->renderSurface()); |
(...skipping 21 matching lines...) Expand all Loading... |
2144 scoped_refptr<Layer> root = Layer::create(); | 2130 scoped_refptr<Layer> root = Layer::create(); |
2145 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 2131 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
2146 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2132 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2147 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2133 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2148 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2134 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2149 root->addChild(renderSurface1); | 2135 root->addChild(renderSurface1); |
2150 renderSurface1->addChild(child1); | 2136 renderSurface1->addChild(child1); |
2151 renderSurface1->addChild(child2); | 2137 renderSurface1->addChild(child2); |
2152 renderSurface1->addChild(child3); | 2138 renderSurface1->addChild(child3); |
2153 | 2139 |
2154 WebTransformationMatrix identityMatrix; | 2140 gfx::Transform identityMatrix; |
2155 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2141 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2156 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); | 2142 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); |
2157 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); | 2143 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); |
2158 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); | 2144 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); |
2159 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); | 2145 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); |
2160 | 2146 |
2161 renderSurface1->setForceRenderSurface(true); | 2147 renderSurface1->setForceRenderSurface(true); |
2162 executeCalculateDrawTransformsAndVisibility(root.get()); | 2148 executeCalculateDrawTransformsAndVisibility(root.get()); |
2163 | 2149 |
2164 ASSERT_TRUE(renderSurface1->renderSurface()); | 2150 ASSERT_TRUE(renderSurface1->renderSurface()); |
(...skipping 23 matching lines...) Expand all Loading... |
2188 scoped_refptr<Layer> root = Layer::create(); | 2174 scoped_refptr<Layer> root = Layer::create(); |
2189 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 2175 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
2190 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2176 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2191 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2177 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2192 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2178 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2193 root->addChild(renderSurface1); | 2179 root->addChild(renderSurface1); |
2194 renderSurface1->addChild(child1); | 2180 renderSurface1->addChild(child1); |
2195 renderSurface1->addChild(child2); | 2181 renderSurface1->addChild(child2); |
2196 renderSurface1->addChild(child3); | 2182 renderSurface1->addChild(child3); |
2197 | 2183 |
2198 WebTransformationMatrix identityMatrix; | 2184 gfx::Transform identityMatrix; |
2199 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2185 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2200 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); | 2186 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); |
2201 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); | 2187 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); |
2202 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); | 2188 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); |
2203 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); | 2189 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); |
2204 | 2190 |
2205 root->setMasksToBounds(true); | 2191 root->setMasksToBounds(true); |
2206 renderSurface1->setForceRenderSurface(true); | 2192 renderSurface1->setForceRenderSurface(true); |
2207 executeCalculateDrawTransformsAndVisibility(root.get()); | 2193 executeCalculateDrawTransformsAndVisibility(root.get()); |
2208 | 2194 |
(...skipping 29 matching lines...) Expand all Loading... |
2238 scoped_refptr<Layer> renderSurface2 = Layer::create(); | 2224 scoped_refptr<Layer> renderSurface2 = Layer::create(); |
2239 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2225 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2240 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2226 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2241 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2227 scoped_refptr<LayerWithForcedDrawsContent> child3 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2242 root->addChild(renderSurface1); | 2228 root->addChild(renderSurface1); |
2243 renderSurface1->addChild(renderSurface2); | 2229 renderSurface1->addChild(renderSurface2); |
2244 renderSurface2->addChild(child1); | 2230 renderSurface2->addChild(child1); |
2245 renderSurface2->addChild(child2); | 2231 renderSurface2->addChild(child2); |
2246 renderSurface2->addChild(child3); | 2232 renderSurface2->addChild(child3); |
2247 | 2233 |
2248 WebTransformationMatrix identityMatrix; | 2234 gfx::Transform identityMatrix; |
2249 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2235 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2250 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); | 2236 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); |
2251 setLayerPropertiesForTesting(renderSurface2.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(7, 13), false); | 2237 setLayerPropertiesForTesting(renderSurface2.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(7, 13), false); |
2252 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); | 2238 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); |
2253 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); | 2239 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); |
2254 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); | 2240 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); |
2255 | 2241 |
2256 root->setMasksToBounds(true); | 2242 root->setMasksToBounds(true); |
2257 renderSurface1->setForceRenderSurface(true); | 2243 renderSurface1->setForceRenderSurface(true); |
2258 renderSurface2->setForceRenderSurface(true); | 2244 renderSurface2->setForceRenderSurface(true); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2293 { | 2279 { |
2294 // Layers that have non-axis aligned bounds (due to transforms) have an expa
nded, | 2280 // Layers that have non-axis aligned bounds (due to transforms) have an expa
nded, |
2295 // axis-aligned drawableContentRect and visibleContentRect. | 2281 // axis-aligned drawableContentRect and visibleContentRect. |
2296 | 2282 |
2297 scoped_refptr<Layer> root = Layer::create(); | 2283 scoped_refptr<Layer> root = Layer::create(); |
2298 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 2284 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
2299 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2285 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2300 root->addChild(renderSurface1); | 2286 root->addChild(renderSurface1); |
2301 renderSurface1->addChild(child1); | 2287 renderSurface1->addChild(child1); |
2302 | 2288 |
2303 WebTransformationMatrix identityMatrix; | 2289 gfx::Transform identityMatrix; |
2304 WebTransformationMatrix childRotation; | 2290 gfx::Transform childRotation; |
2305 childRotation.rotate(45); | 2291 childRotation.Rotate(45); |
2306 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2292 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2307 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); | 2293 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); |
2308 setLayerPropertiesForTesting(child1.get(), childRotation, identityMatrix, gf
x::PointF(0.5, 0.5), gfx::PointF(25, 25), gfx::Size(50, 50), false); | 2294 setLayerPropertiesForTesting(child1.get(), childRotation, identityMatrix, gf
x::PointF(0.5, 0.5), gfx::PointF(25, 25), gfx::Size(50, 50), false); |
2309 | 2295 |
2310 renderSurface1->setForceRenderSurface(true); | 2296 renderSurface1->setForceRenderSurface(true); |
2311 executeCalculateDrawTransformsAndVisibility(root.get()); | 2297 executeCalculateDrawTransformsAndVisibility(root.get()); |
2312 | 2298 |
2313 ASSERT_TRUE(renderSurface1->renderSurface()); | 2299 ASSERT_TRUE(renderSurface1->renderSurface()); |
2314 | 2300 |
2315 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), root->renderSurface()->drawableCon
tentRect()); | 2301 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), root->renderSurface()->drawableCon
tentRect()); |
(...skipping 17 matching lines...) Expand all Loading... |
2333 { | 2319 { |
2334 // Layers that have non-axis aligned bounds (due to transforms) have an expa
nded, | 2320 // Layers that have non-axis aligned bounds (due to transforms) have an expa
nded, |
2335 // axis-aligned drawableContentRect and visibleContentRect. | 2321 // axis-aligned drawableContentRect and visibleContentRect. |
2336 | 2322 |
2337 scoped_refptr<Layer> root = Layer::create(); | 2323 scoped_refptr<Layer> root = Layer::create(); |
2338 scoped_refptr<Layer> renderSurface1 = Layer::create(); | 2324 scoped_refptr<Layer> renderSurface1 = Layer::create(); |
2339 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2325 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2340 root->addChild(renderSurface1); | 2326 root->addChild(renderSurface1); |
2341 renderSurface1->addChild(child1); | 2327 renderSurface1->addChild(child1); |
2342 | 2328 |
2343 WebTransformationMatrix identityMatrix; | 2329 gfx::Transform identityMatrix; |
2344 WebTransformationMatrix childRotation; | 2330 gfx::Transform childRotation; |
2345 childRotation.rotate(45); | 2331 childRotation.Rotate(45); |
2346 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(50, 50), false); | 2332 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(50, 50), false); |
2347 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); | 2333 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(3, 4), false); |
2348 setLayerPropertiesForTesting(child1.get(), childRotation, identityMatrix, gf
x::PointF(0.5, 0.5), gfx::PointF(25, 25), gfx::Size(50, 50), false); | 2334 setLayerPropertiesForTesting(child1.get(), childRotation, identityMatrix, gf
x::PointF(0.5, 0.5), gfx::PointF(25, 25), gfx::Size(50, 50), false); |
2349 | 2335 |
2350 root->setMasksToBounds(true); | 2336 root->setMasksToBounds(true); |
2351 renderSurface1->setForceRenderSurface(true); | 2337 renderSurface1->setForceRenderSurface(true); |
2352 executeCalculateDrawTransformsAndVisibility(root.get()); | 2338 executeCalculateDrawTransformsAndVisibility(root.get()); |
2353 | 2339 |
2354 ASSERT_TRUE(renderSurface1->renderSurface()); | 2340 ASSERT_TRUE(renderSurface1->renderSurface()); |
2355 | 2341 |
(...skipping 21 matching lines...) Expand all Loading... |
2377 scoped_refptr<ContentLayer> renderSurface2 = createDrawableContentLayer(&cli
ent); | 2363 scoped_refptr<ContentLayer> renderSurface2 = createDrawableContentLayer(&cli
ent); |
2378 scoped_refptr<ContentLayer> child1 = createDrawableContentLayer(&client); | 2364 scoped_refptr<ContentLayer> child1 = createDrawableContentLayer(&client); |
2379 scoped_refptr<ContentLayer> child2 = createDrawableContentLayer(&client); | 2365 scoped_refptr<ContentLayer> child2 = createDrawableContentLayer(&client); |
2380 scoped_refptr<ContentLayer> child3 = createDrawableContentLayer(&client); | 2366 scoped_refptr<ContentLayer> child3 = createDrawableContentLayer(&client); |
2381 root->addChild(renderSurface1); | 2367 root->addChild(renderSurface1); |
2382 renderSurface1->addChild(renderSurface2); | 2368 renderSurface1->addChild(renderSurface2); |
2383 renderSurface2->addChild(child1); | 2369 renderSurface2->addChild(child1); |
2384 renderSurface2->addChild(child2); | 2370 renderSurface2->addChild(child2); |
2385 renderSurface2->addChild(child3); | 2371 renderSurface2->addChild(child3); |
2386 | 2372 |
2387 WebTransformationMatrix identityMatrix; | 2373 gfx::Transform identityMatrix; |
2388 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2374 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, gfx
::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2389 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(3, 4), false); | 2375 setLayerPropertiesForTesting(renderSurface1.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(3, 4), false); |
2390 setLayerPropertiesForTesting(renderSurface2.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(7, 13), false); | 2376 setLayerPropertiesForTesting(renderSurface2.get(), identityMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(7, 13), false); |
2391 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); | 2377 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(5, 5), gfx::Size(50, 50), false); |
2392 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); | 2378 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(75, 75), gfx::Size(50, 50), false); |
2393 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); | 2379 setLayerPropertiesForTesting(child3.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(125, 125), gfx::Size(50, 50), false); |
2394 | 2380 |
2395 const double deviceScaleFactor = 2; | 2381 const double deviceScaleFactor = 2; |
2396 root->setContentsScale(deviceScaleFactor); | 2382 root->setContentsScale(deviceScaleFactor); |
2397 renderSurface1->setContentsScale(deviceScaleFactor); | 2383 renderSurface1->setContentsScale(deviceScaleFactor); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2432 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child2->visibleContentRect()); | 2418 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child2->visibleContentRect()); |
2433 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child3->visibleContentRect()); | 2419 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child3->visibleContentRect()); |
2434 } | 2420 } |
2435 | 2421 |
2436 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithoutPreserves3d) | 2422 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithoutPreserves3d) |
2437 { | 2423 { |
2438 // Verify the behavior of back-face culling when there are no preserve-3d la
yers. Note | 2424 // Verify the behavior of back-face culling when there are no preserve-3d la
yers. Note |
2439 // that 3d transforms still apply in this case, but they are "flattened" to
each | 2425 // that 3d transforms still apply in this case, but they are "flattened" to
each |
2440 // parent layer according to current W3C spec. | 2426 // parent layer according to current W3C spec. |
2441 | 2427 |
2442 const WebTransformationMatrix identityMatrix; | 2428 const gfx::Transform identityMatrix; |
2443 scoped_refptr<Layer> parent = Layer::create(); | 2429 scoped_refptr<Layer> parent = Layer::create(); |
2444 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChild = make_scoped_re
fptr(new LayerWithForcedDrawsContent()); | 2430 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChild = make_scoped_re
fptr(new LayerWithForcedDrawsContent()); |
2445 scoped_refptr<LayerWithForcedDrawsContent> backFacingChild = make_scoped_ref
ptr(new LayerWithForcedDrawsContent()); | 2431 scoped_refptr<LayerWithForcedDrawsContent> backFacingChild = make_scoped_ref
ptr(new LayerWithForcedDrawsContent()); |
2446 scoped_refptr<LayerWithForcedDrawsContent> frontFacingSurface = make_scoped_
refptr(new LayerWithForcedDrawsContent()); | 2432 scoped_refptr<LayerWithForcedDrawsContent> frontFacingSurface = make_scoped_
refptr(new LayerWithForcedDrawsContent()); |
2447 scoped_refptr<LayerWithForcedDrawsContent> backFacingSurface = make_scoped_r
efptr(new LayerWithForcedDrawsContent()); | 2433 scoped_refptr<LayerWithForcedDrawsContent> backFacingSurface = make_scoped_r
efptr(new LayerWithForcedDrawsContent()); |
2448 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfFrontFacingSurf
ace = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2434 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfFrontFacingSurf
ace = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2449 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfFrontFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2435 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfFrontFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2450 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfBackFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2436 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfBackFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2451 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfBackFacingSurfac
e = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2437 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfBackFacingSurfac
e = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2452 | 2438 |
2453 parent->addChild(frontFacingChild); | 2439 parent->addChild(frontFacingChild); |
2454 parent->addChild(backFacingChild); | 2440 parent->addChild(backFacingChild); |
2455 parent->addChild(frontFacingSurface); | 2441 parent->addChild(frontFacingSurface); |
2456 parent->addChild(backFacingSurface); | 2442 parent->addChild(backFacingSurface); |
2457 frontFacingSurface->addChild(frontFacingChildOfFrontFacingSurface); | 2443 frontFacingSurface->addChild(frontFacingChildOfFrontFacingSurface); |
2458 frontFacingSurface->addChild(backFacingChildOfFrontFacingSurface); | 2444 frontFacingSurface->addChild(backFacingChildOfFrontFacingSurface); |
2459 backFacingSurface->addChild(frontFacingChildOfBackFacingSurface); | 2445 backFacingSurface->addChild(frontFacingChildOfBackFacingSurface); |
2460 backFacingSurface->addChild(backFacingChildOfBackFacingSurface); | 2446 backFacingSurface->addChild(backFacingChildOfBackFacingSurface); |
2461 | 2447 |
2462 // Nothing is double-sided | 2448 // Nothing is double-sided |
2463 frontFacingChild->setDoubleSided(false); | 2449 frontFacingChild->setDoubleSided(false); |
2464 backFacingChild->setDoubleSided(false); | 2450 backFacingChild->setDoubleSided(false); |
2465 frontFacingSurface->setDoubleSided(false); | 2451 frontFacingSurface->setDoubleSided(false); |
2466 backFacingSurface->setDoubleSided(false); | 2452 backFacingSurface->setDoubleSided(false); |
2467 frontFacingChildOfFrontFacingSurface->setDoubleSided(false); | 2453 frontFacingChildOfFrontFacingSurface->setDoubleSided(false); |
2468 backFacingChildOfFrontFacingSurface->setDoubleSided(false); | 2454 backFacingChildOfFrontFacingSurface->setDoubleSided(false); |
2469 frontFacingChildOfBackFacingSurface->setDoubleSided(false); | 2455 frontFacingChildOfBackFacingSurface->setDoubleSided(false); |
2470 backFacingChildOfBackFacingSurface->setDoubleSided(false); | 2456 backFacingChildOfBackFacingSurface->setDoubleSided(false); |
2471 | 2457 |
2472 WebTransformationMatrix backfaceMatrix; | 2458 gfx::Transform backfaceMatrix; |
2473 backfaceMatrix.translate(50, 50); | 2459 backfaceMatrix.Translate(50, 50); |
2474 backfaceMatrix.rotate3d(0, 1, 0, 180); | 2460 MathUtil::rotateAxisAngle(&backfaceMatrix, 0, 1, 0, 180); |
2475 backfaceMatrix.translate(-50, -50); | 2461 backfaceMatrix.Translate(-50, -50); |
2476 | 2462 |
2477 // Having a descendant and opacity will force these to have render surfaces. | 2463 // Having a descendant and opacity will force these to have render surfaces. |
2478 frontFacingSurface->setOpacity(0.5); | 2464 frontFacingSurface->setOpacity(0.5); |
2479 backFacingSurface->setOpacity(0.5); | 2465 backFacingSurface->setOpacity(0.5); |
2480 | 2466 |
2481 // Nothing preserves 3d. According to current W3C CSS Transforms spec, these
layers | 2467 // Nothing preserves 3d. According to current W3C CSS gfx::Transforms spec,
these layers |
2482 // should blindly use their own local transforms to determine back-face cull
ing. | 2468 // should blindly use their own local transforms to determine back-face cull
ing. |
2483 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2469 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2484 setLayerPropertiesForTesting(frontFacingChild.get(), identityMatrix, identit
yMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2470 setLayerPropertiesForTesting(frontFacingChild.get(), identityMatrix, identit
yMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2485 setLayerPropertiesForTesting(backFacingChild.get(), backfaceMatrix, identity
Matrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2471 setLayerPropertiesForTesting(backFacingChild.get(), backfaceMatrix, identity
Matrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2486 setLayerPropertiesForTesting(frontFacingSurface.get(), identityMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2472 setLayerPropertiesForTesting(frontFacingSurface.get(), identityMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2487 setLayerPropertiesForTesting(backFacingSurface.get(), backfaceMatrix, identi
tyMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2473 setLayerPropertiesForTesting(backFacingSurface.get(), backfaceMatrix, identi
tyMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2488 setLayerPropertiesForTesting(frontFacingChildOfFrontFacingSurface.get(), ide
ntityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100
, 100), false); | 2474 setLayerPropertiesForTesting(frontFacingChildOfFrontFacingSurface.get(), ide
ntityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100
, 100), false); |
2489 setLayerPropertiesForTesting(backFacingChildOfFrontFacingSurface.get(), back
faceMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); | 2475 setLayerPropertiesForTesting(backFacingChildOfFrontFacingSurface.get(), back
faceMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); |
2490 setLayerPropertiesForTesting(frontFacingChildOfBackFacingSurface.get(), iden
tityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); | 2476 setLayerPropertiesForTesting(frontFacingChildOfBackFacingSurface.get(), iden
tityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); |
2491 setLayerPropertiesForTesting(backFacingChildOfBackFacingSurface.get(), backf
aceMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); | 2477 setLayerPropertiesForTesting(backFacingChildOfBackFacingSurface.get(), backf
aceMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2524 | 2510 |
2525 // Verify backFacingSurface's layerList; its own layer should be culled from
the surface list. | 2511 // Verify backFacingSurface's layerList; its own layer should be culled from
the surface list. |
2526 ASSERT_EQ(1u, renderSurfaceLayerList[2]->renderSurface()->layerList().size()
); | 2512 ASSERT_EQ(1u, renderSurfaceLayerList[2]->renderSurface()->layerList().size()
); |
2527 EXPECT_EQ(frontFacingChildOfBackFacingSurface->id(), renderSurfaceLayerList[
2]->renderSurface()->layerList()[0]->id()); | 2513 EXPECT_EQ(frontFacingChildOfBackFacingSurface->id(), renderSurfaceLayerList[
2]->renderSurface()->layerList()[0]->id()); |
2528 } | 2514 } |
2529 | 2515 |
2530 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3d) | 2516 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3d) |
2531 { | 2517 { |
2532 // Verify the behavior of back-face culling when preserves-3d transform styl
e is used. | 2518 // Verify the behavior of back-face culling when preserves-3d transform styl
e is used. |
2533 | 2519 |
2534 const WebTransformationMatrix identityMatrix; | 2520 const gfx::Transform identityMatrix; |
2535 scoped_refptr<Layer> parent = Layer::create(); | 2521 scoped_refptr<Layer> parent = Layer::create(); |
2536 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChild = make_scoped_re
fptr(new LayerWithForcedDrawsContent()); | 2522 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChild = make_scoped_re
fptr(new LayerWithForcedDrawsContent()); |
2537 scoped_refptr<LayerWithForcedDrawsContent> backFacingChild = make_scoped_ref
ptr(new LayerWithForcedDrawsContent()); | 2523 scoped_refptr<LayerWithForcedDrawsContent> backFacingChild = make_scoped_ref
ptr(new LayerWithForcedDrawsContent()); |
2538 scoped_refptr<LayerWithForcedDrawsContent> frontFacingSurface = make_scoped_
refptr(new LayerWithForcedDrawsContent()); | 2524 scoped_refptr<LayerWithForcedDrawsContent> frontFacingSurface = make_scoped_
refptr(new LayerWithForcedDrawsContent()); |
2539 scoped_refptr<LayerWithForcedDrawsContent> backFacingSurface = make_scoped_r
efptr(new LayerWithForcedDrawsContent()); | 2525 scoped_refptr<LayerWithForcedDrawsContent> backFacingSurface = make_scoped_r
efptr(new LayerWithForcedDrawsContent()); |
2540 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfFrontFacingSurf
ace = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2526 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfFrontFacingSurf
ace = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2541 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfFrontFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2527 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfFrontFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2542 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfBackFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2528 scoped_refptr<LayerWithForcedDrawsContent> frontFacingChildOfBackFacingSurfa
ce = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2543 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfBackFacingSurfac
e = make_scoped_refptr(new LayerWithForcedDrawsContent()); | 2529 scoped_refptr<LayerWithForcedDrawsContent> backFacingChildOfBackFacingSurfac
e = make_scoped_refptr(new LayerWithForcedDrawsContent()); |
2544 scoped_refptr<LayerWithForcedDrawsContent> dummyReplicaLayer1 = make_scoped_
refptr(new LayerWithForcedDrawsContent()); | 2530 scoped_refptr<LayerWithForcedDrawsContent> dummyReplicaLayer1 = make_scoped_
refptr(new LayerWithForcedDrawsContent()); |
(...skipping 11 matching lines...) Expand all Loading... |
2556 // Nothing is double-sided | 2542 // Nothing is double-sided |
2557 frontFacingChild->setDoubleSided(false); | 2543 frontFacingChild->setDoubleSided(false); |
2558 backFacingChild->setDoubleSided(false); | 2544 backFacingChild->setDoubleSided(false); |
2559 frontFacingSurface->setDoubleSided(false); | 2545 frontFacingSurface->setDoubleSided(false); |
2560 backFacingSurface->setDoubleSided(false); | 2546 backFacingSurface->setDoubleSided(false); |
2561 frontFacingChildOfFrontFacingSurface->setDoubleSided(false); | 2547 frontFacingChildOfFrontFacingSurface->setDoubleSided(false); |
2562 backFacingChildOfFrontFacingSurface->setDoubleSided(false); | 2548 backFacingChildOfFrontFacingSurface->setDoubleSided(false); |
2563 frontFacingChildOfBackFacingSurface->setDoubleSided(false); | 2549 frontFacingChildOfBackFacingSurface->setDoubleSided(false); |
2564 backFacingChildOfBackFacingSurface->setDoubleSided(false); | 2550 backFacingChildOfBackFacingSurface->setDoubleSided(false); |
2565 | 2551 |
2566 WebTransformationMatrix backfaceMatrix; | 2552 gfx::Transform backfaceMatrix; |
2567 backfaceMatrix.translate(50, 50); | 2553 backfaceMatrix.Translate(50, 50); |
2568 backfaceMatrix.rotate3d(0, 1, 0, 180); | 2554 MathUtil::rotateAxisAngle(&backfaceMatrix, 0, 1, 0, 180); |
2569 backfaceMatrix.translate(-50, -50); | 2555 backfaceMatrix.Translate(-50, -50); |
2570 | 2556 |
2571 // Opacity will not force creation of renderSurfaces in this case because of
the | 2557 // Opacity will not force creation of renderSurfaces in this case because of
the |
2572 // preserve-3d transform style. Instead, an example of when a surface would
be | 2558 // preserve-3d transform style. Instead, an example of when a surface would
be |
2573 // created with preserve-3d is when there is a replica layer. | 2559 // created with preserve-3d is when there is a replica layer. |
2574 frontFacingSurface->setReplicaLayer(dummyReplicaLayer1.get()); | 2560 frontFacingSurface->setReplicaLayer(dummyReplicaLayer1.get()); |
2575 backFacingSurface->setReplicaLayer(dummyReplicaLayer2.get()); | 2561 backFacingSurface->setReplicaLayer(dummyReplicaLayer2.get()); |
2576 | 2562 |
2577 // Each surface creates its own new 3d rendering context (as defined by W3C
spec). | 2563 // Each surface creates its own new 3d rendering context (as defined by W3C
spec). |
2578 // According to current W3C CSS Transforms spec, layers in a 3d rendering co
ntext | 2564 // According to current W3C CSS gfx::Transforms spec, layers in a 3d renderi
ng context |
2579 // should use the transform with respect to that context. This 3d rendering
context | 2565 // should use the transform with respect to that context. This 3d rendering
context |
2580 // occurs when (a) parent's transform style is flat and (b) the layer's tran
sform | 2566 // occurs when (a) parent's transform style is flat and (b) the layer's tran
sform |
2581 // style is preserve-3d. | 2567 // style is preserve-3d. |
2582 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); // parent tran
sform style is flat. | 2568 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); // parent tran
sform style is flat. |
2583 setLayerPropertiesForTesting(frontFacingChild.get(), identityMatrix, identit
yMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2569 setLayerPropertiesForTesting(frontFacingChild.get(), identityMatrix, identit
yMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2584 setLayerPropertiesForTesting(backFacingChild.get(), backfaceMatrix, identity
Matrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2570 setLayerPropertiesForTesting(backFacingChild.get(), backfaceMatrix, identity
Matrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2585 setLayerPropertiesForTesting(frontFacingSurface.get(), identityMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); //
surface transform style is preserve-3d. | 2571 setLayerPropertiesForTesting(frontFacingSurface.get(), identityMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); //
surface transform style is preserve-3d. |
2586 setLayerPropertiesForTesting(backFacingSurface.get(), backfaceMatrix, identi
tyMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); // s
urface transform style is preserve-3d. | 2572 setLayerPropertiesForTesting(backFacingSurface.get(), backfaceMatrix, identi
tyMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); // s
urface transform style is preserve-3d. |
2587 setLayerPropertiesForTesting(frontFacingChildOfFrontFacingSurface.get(), ide
ntityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100
, 100), false); | 2573 setLayerPropertiesForTesting(frontFacingChildOfFrontFacingSurface.get(), ide
ntityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100
, 100), false); |
2588 setLayerPropertiesForTesting(backFacingChildOfFrontFacingSurface.get(), back
faceMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); | 2574 setLayerPropertiesForTesting(backFacingChildOfFrontFacingSurface.get(), back
faceMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100,
100), false); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2621 | 2607 |
2622 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithAnimatingTransforms) | 2608 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithAnimatingTransforms) |
2623 { | 2609 { |
2624 // Verify that layers are appropriately culled when their back face is showi
ng and | 2610 // Verify that layers are appropriately culled when their back face is showi
ng and |
2625 // they are not double sided, while animations are going on. | 2611 // they are not double sided, while animations are going on. |
2626 // | 2612 // |
2627 // Layers that are animating do not get culled on the main thread, as their
transforms should be | 2613 // Layers that are animating do not get culled on the main thread, as their
transforms should be |
2628 // treated as "unknown" so we can not be sure that their back face is really
showing. | 2614 // treated as "unknown" so we can not be sure that their back face is really
showing. |
2629 // | 2615 // |
2630 | 2616 |
2631 const WebTransformationMatrix identityMatrix; | 2617 const gfx::Transform identityMatrix; |
2632 scoped_refptr<Layer> parent = Layer::create(); | 2618 scoped_refptr<Layer> parent = Layer::create(); |
2633 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); | 2619 scoped_refptr<LayerWithForcedDrawsContent> child = make_scoped_refptr(new La
yerWithForcedDrawsContent()); |
2634 scoped_refptr<LayerWithForcedDrawsContent> animatingSurface = make_scoped_re
fptr(new LayerWithForcedDrawsContent()); | 2620 scoped_refptr<LayerWithForcedDrawsContent> animatingSurface = make_scoped_re
fptr(new LayerWithForcedDrawsContent()); |
2635 scoped_refptr<LayerWithForcedDrawsContent> childOfAnimatingSurface = make_sc
oped_refptr(new LayerWithForcedDrawsContent()); | 2621 scoped_refptr<LayerWithForcedDrawsContent> childOfAnimatingSurface = make_sc
oped_refptr(new LayerWithForcedDrawsContent()); |
2636 scoped_refptr<LayerWithForcedDrawsContent> animatingChild = make_scoped_refp
tr(new LayerWithForcedDrawsContent()); | 2622 scoped_refptr<LayerWithForcedDrawsContent> animatingChild = make_scoped_refp
tr(new LayerWithForcedDrawsContent()); |
2637 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2623 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2638 | 2624 |
2639 parent->addChild(child); | 2625 parent->addChild(child); |
2640 parent->addChild(animatingSurface); | 2626 parent->addChild(animatingSurface); |
2641 animatingSurface->addChild(childOfAnimatingSurface); | 2627 animatingSurface->addChild(childOfAnimatingSurface); |
2642 parent->addChild(animatingChild); | 2628 parent->addChild(animatingChild); |
2643 parent->addChild(child2); | 2629 parent->addChild(child2); |
2644 | 2630 |
2645 // Nothing is double-sided | 2631 // Nothing is double-sided |
2646 child->setDoubleSided(false); | 2632 child->setDoubleSided(false); |
2647 child2->setDoubleSided(false); | 2633 child2->setDoubleSided(false); |
2648 animatingSurface->setDoubleSided(false); | 2634 animatingSurface->setDoubleSided(false); |
2649 childOfAnimatingSurface->setDoubleSided(false); | 2635 childOfAnimatingSurface->setDoubleSided(false); |
2650 animatingChild->setDoubleSided(false); | 2636 animatingChild->setDoubleSided(false); |
2651 | 2637 |
2652 WebTransformationMatrix backfaceMatrix; | 2638 gfx::Transform backfaceMatrix; |
2653 backfaceMatrix.translate(50, 50); | 2639 backfaceMatrix.Translate(50, 50); |
2654 backfaceMatrix.rotate3d(0, 1, 0, 180); | 2640 MathUtil::rotateAxisAngle(&backfaceMatrix, 0, 1, 0, 180); |
2655 backfaceMatrix.translate(-50, -50); | 2641 backfaceMatrix.Translate(-50, -50); |
2656 | 2642 |
2657 // Make our render surface. | 2643 // Make our render surface. |
2658 animatingSurface->setForceRenderSurface(true); | 2644 animatingSurface->setForceRenderSurface(true); |
2659 | 2645 |
2660 // Animate the transform on the render surface. | 2646 // Animate the transform on the render surface. |
2661 addAnimatedTransformToController(*animatingSurface->layerAnimationController
(), 10, 30, 0); | 2647 addAnimatedTransformToController(*animatingSurface->layerAnimationController
(), 10, 30, 0); |
2662 // This is just an animating layer, not a surface. | 2648 // This is just an animating layer, not a surface. |
2663 addAnimatedTransformToController(*animatingChild->layerAnimationController()
, 10, 30, 0); | 2649 addAnimatedTransformToController(*animatingChild->layerAnimationController()
, 10, 30, 0); |
2664 | 2650 |
2665 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2651 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2701 EXPECT_EQ(animatingSurface->visibleContentRect(), gfx::Rect(gfx::Point(), an
imatingSurface->contentBounds())); | 2687 EXPECT_EQ(animatingSurface->visibleContentRect(), gfx::Rect(gfx::Point(), an
imatingSurface->contentBounds())); |
2702 // And layers in the subtree of the animating layer should have valid visibl
eContentRects also. | 2688 // And layers in the subtree of the animating layer should have valid visibl
eContentRects also. |
2703 EXPECT_EQ(childOfAnimatingSurface->visibleContentRect(), gfx::Rect(gfx::Poin
t(), childOfAnimatingSurface->contentBounds())); | 2689 EXPECT_EQ(childOfAnimatingSurface->visibleContentRect(), gfx::Rect(gfx::Poin
t(), childOfAnimatingSurface->contentBounds())); |
2704 } | 2690 } |
2705 | 2691 |
2706 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3dForFlatteningS
urface) | 2692 TEST(LayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3dForFlatteningS
urface) |
2707 { | 2693 { |
2708 // Verify the behavior of back-face culling for a renderSurface that is crea
ted | 2694 // Verify the behavior of back-face culling for a renderSurface that is crea
ted |
2709 // when it flattens its subtree, and its parent has preserves-3d. | 2695 // when it flattens its subtree, and its parent has preserves-3d. |
2710 | 2696 |
2711 const WebTransformationMatrix identityMatrix; | 2697 const gfx::Transform identityMatrix; |
2712 scoped_refptr<Layer> parent = Layer::create(); | 2698 scoped_refptr<Layer> parent = Layer::create(); |
2713 scoped_refptr<LayerWithForcedDrawsContent> frontFacingSurface = make_scoped_
refptr(new LayerWithForcedDrawsContent()); | 2699 scoped_refptr<LayerWithForcedDrawsContent> frontFacingSurface = make_scoped_
refptr(new LayerWithForcedDrawsContent()); |
2714 scoped_refptr<LayerWithForcedDrawsContent> backFacingSurface = make_scoped_r
efptr(new LayerWithForcedDrawsContent()); | 2700 scoped_refptr<LayerWithForcedDrawsContent> backFacingSurface = make_scoped_r
efptr(new LayerWithForcedDrawsContent()); |
2715 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2701 scoped_refptr<LayerWithForcedDrawsContent> child1 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2716 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); | 2702 scoped_refptr<LayerWithForcedDrawsContent> child2 = make_scoped_refptr(new L
ayerWithForcedDrawsContent()); |
2717 | 2703 |
2718 parent->addChild(frontFacingSurface); | 2704 parent->addChild(frontFacingSurface); |
2719 parent->addChild(backFacingSurface); | 2705 parent->addChild(backFacingSurface); |
2720 frontFacingSurface->addChild(child1); | 2706 frontFacingSurface->addChild(child1); |
2721 backFacingSurface->addChild(child2); | 2707 backFacingSurface->addChild(child2); |
2722 | 2708 |
2723 // RenderSurfaces are not double-sided | 2709 // RenderSurfaces are not double-sided |
2724 frontFacingSurface->setDoubleSided(false); | 2710 frontFacingSurface->setDoubleSided(false); |
2725 backFacingSurface->setDoubleSided(false); | 2711 backFacingSurface->setDoubleSided(false); |
2726 | 2712 |
2727 WebTransformationMatrix backfaceMatrix; | 2713 gfx::Transform backfaceMatrix; |
2728 backfaceMatrix.translate(50, 50); | 2714 backfaceMatrix.Translate(50, 50); |
2729 backfaceMatrix.rotate3d(0, 1, 0, 180); | 2715 MathUtil::rotateAxisAngle(&backfaceMatrix, 0, 1, 0, 180); |
2730 backfaceMatrix.translate(-50, -50); | 2716 backfaceMatrix.Translate(-50, -50); |
2731 | 2717 |
2732 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); // parent trans
form style is preserve3d. | 2718 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); // parent trans
form style is preserve3d. |
2733 setLayerPropertiesForTesting(frontFacingSurface.get(), identityMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); //
surface transform style is flat. | 2719 setLayerPropertiesForTesting(frontFacingSurface.get(), identityMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); //
surface transform style is flat. |
2734 setLayerPropertiesForTesting(backFacingSurface.get(), backfaceMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); //
surface transform style is flat. | 2720 setLayerPropertiesForTesting(backFacingSurface.get(), backfaceMatrix, ident
ityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); //
surface transform style is flat. |
2735 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2721 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2736 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 2722 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
2737 | 2723 |
2738 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 2724 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
2739 int dummyMaxTextureSize = 512; | 2725 int dummyMaxTextureSize = 512; |
2740 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
1, 1, dummyMaxTextureSize, renderSurfaceLayerList); | 2726 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
(...skipping 30 matching lines...) Expand all Loading... |
2771 | 2757 |
2772 testPoint = gfx::Point(10, 20); | 2758 testPoint = gfx::Point(10, 20); |
2773 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2759 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
2774 EXPECT_FALSE(resultLayer); | 2760 EXPECT_FALSE(resultLayer); |
2775 } | 2761 } |
2776 | 2762 |
2777 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleLayer) | 2763 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleLayer) |
2778 { | 2764 { |
2779 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 2765 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
2780 | 2766 |
2781 WebTransformationMatrix identityMatrix; | 2767 gfx::Transform identityMatrix; |
2782 gfx::PointF anchor(0, 0); | 2768 gfx::PointF anchor(0, 0); |
2783 gfx::PointF position(0, 0); | 2769 gfx::PointF position(0, 0); |
2784 gfx::Size bounds(100, 100); | 2770 gfx::Size bounds(100, 100); |
2785 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 2771 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
2786 root->setDrawsContent(true); | 2772 root->setDrawsContent(true); |
2787 | 2773 |
2788 std::vector<LayerImpl*> renderSurfaceLayerList; | 2774 std::vector<LayerImpl*> renderSurfaceLayerList; |
2789 int dummyMaxTextureSize = 512; | 2775 int dummyMaxTextureSize = 512; |
2790 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 2776 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
2791 | 2777 |
(...skipping 19 matching lines...) Expand all Loading... |
2811 testPoint = gfx::Point(99, 99); | 2797 testPoint = gfx::Point(99, 99); |
2812 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2798 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
2813 ASSERT_TRUE(resultLayer); | 2799 ASSERT_TRUE(resultLayer); |
2814 EXPECT_EQ(12345, resultLayer->id()); | 2800 EXPECT_EQ(12345, resultLayer->id()); |
2815 } | 2801 } |
2816 | 2802 |
2817 TEST(LayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) | 2803 TEST(LayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) |
2818 { | 2804 { |
2819 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 2805 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
2820 | 2806 |
2821 WebTransformationMatrix uninvertibleTransform; | 2807 gfx::Transform uninvertibleTransform; |
2822 uninvertibleTransform.setM11(0); | 2808 uninvertibleTransform.matrix().setDouble(0, 0, 0); |
2823 uninvertibleTransform.setM22(0); | 2809 uninvertibleTransform.matrix().setDouble(1, 1, 0); |
2824 uninvertibleTransform.setM33(0); | 2810 uninvertibleTransform.matrix().setDouble(2, 2, 0); |
2825 uninvertibleTransform.setM44(0); | 2811 uninvertibleTransform.matrix().setDouble(3, 3, 0); |
2826 ASSERT_FALSE(uninvertibleTransform.isInvertible()); | 2812 ASSERT_FALSE(uninvertibleTransform.IsInvertible()); |
2827 | 2813 |
2828 WebTransformationMatrix identityMatrix; | 2814 gfx::Transform identityMatrix; |
2829 gfx::PointF anchor(0, 0); | 2815 gfx::PointF anchor(0, 0); |
2830 gfx::PointF position(0, 0); | 2816 gfx::PointF position(0, 0); |
2831 gfx::Size bounds(100, 100); | 2817 gfx::Size bounds(100, 100); |
2832 setLayerPropertiesForTesting(root.get(), uninvertibleTransform, identityMatr
ix, anchor, position, bounds, false); | 2818 setLayerPropertiesForTesting(root.get(), uninvertibleTransform, identityMatr
ix, anchor, position, bounds, false); |
2833 root->setDrawsContent(true); | 2819 root->setDrawsContent(true); |
2834 | 2820 |
2835 std::vector<LayerImpl*> renderSurfaceLayerList; | 2821 std::vector<LayerImpl*> renderSurfaceLayerList; |
2836 int dummyMaxTextureSize = 512; | 2822 int dummyMaxTextureSize = 512; |
2837 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 2823 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
2838 | 2824 |
2839 // Sanity check the scenario we just created. | 2825 // Sanity check the scenario we just created. |
2840 ASSERT_EQ(1u, renderSurfaceLayerList.size()); | 2826 ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
2841 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); | 2827 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); |
2842 ASSERT_FALSE(root->screenSpaceTransform().isInvertible()); | 2828 ASSERT_FALSE(root->screenSpaceTransform().IsInvertible()); |
2843 | 2829 |
2844 // Hit testing any point should not hit the layer. If the invertible matrix
is | 2830 // Hit testing any point should not hit the layer. If the invertible matrix
is |
2845 // accidentally ignored and treated like an identity, then the hit testing w
ill | 2831 // accidentally ignored and treated like an identity, then the hit testing w
ill |
2846 // incorrectly hit the layer when it shouldn't. | 2832 // incorrectly hit the layer when it shouldn't. |
2847 gfx::Point testPoint(1, 1); | 2833 gfx::Point testPoint(1, 1); |
2848 LayerImpl* resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(test
Point, renderSurfaceLayerList); | 2834 LayerImpl* resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(test
Point, renderSurfaceLayerList); |
2849 EXPECT_FALSE(resultLayer); | 2835 EXPECT_FALSE(resultLayer); |
2850 | 2836 |
2851 testPoint = gfx::Point(10, 10); | 2837 testPoint = gfx::Point(10, 10); |
2852 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2838 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
(...skipping 17 matching lines...) Expand all Loading... |
2870 | 2856 |
2871 testPoint = gfx::Point(-1, -1); | 2857 testPoint = gfx::Point(-1, -1); |
2872 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2858 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
2873 EXPECT_FALSE(resultLayer); | 2859 EXPECT_FALSE(resultLayer); |
2874 } | 2860 } |
2875 | 2861 |
2876 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) | 2862 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) |
2877 { | 2863 { |
2878 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 2864 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
2879 | 2865 |
2880 WebTransformationMatrix identityMatrix; | 2866 gfx::Transform identityMatrix; |
2881 gfx::PointF anchor(0, 0); | 2867 gfx::PointF anchor(0, 0); |
2882 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. | 2868 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. |
2883 gfx::Size bounds(100, 100); | 2869 gfx::Size bounds(100, 100); |
2884 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 2870 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
2885 root->setDrawsContent(true); | 2871 root->setDrawsContent(true); |
2886 | 2872 |
2887 std::vector<LayerImpl*> renderSurfaceLayerList; | 2873 std::vector<LayerImpl*> renderSurfaceLayerList; |
2888 int dummyMaxTextureSize = 512; | 2874 int dummyMaxTextureSize = 512; |
2889 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 2875 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
2890 | 2876 |
(...skipping 20 matching lines...) Expand all Loading... |
2911 testPoint = gfx::Point(99, 99); | 2897 testPoint = gfx::Point(99, 99); |
2912 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2898 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
2913 ASSERT_TRUE(resultLayer); | 2899 ASSERT_TRUE(resultLayer); |
2914 EXPECT_EQ(12345, resultLayer->id()); | 2900 EXPECT_EQ(12345, resultLayer->id()); |
2915 } | 2901 } |
2916 | 2902 |
2917 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) | 2903 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) |
2918 { | 2904 { |
2919 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 2905 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
2920 | 2906 |
2921 WebTransformationMatrix identityMatrix; | 2907 gfx::Transform identityMatrix; |
2922 WebTransformationMatrix rotation45DegreesAboutCenter; | 2908 gfx::Transform rotation45DegreesAboutCenter; |
2923 rotation45DegreesAboutCenter.translate(50, 50); | 2909 rotation45DegreesAboutCenter.Translate(50, 50); |
2924 rotation45DegreesAboutCenter.rotate3d(0, 0, 45); | 2910 MathUtil::rotateEulerAngles(&rotation45DegreesAboutCenter, 0, 0, 45); |
2925 rotation45DegreesAboutCenter.translate(-50, -50); | 2911 rotation45DegreesAboutCenter.Translate(-50, -50); |
2926 gfx::PointF anchor(0, 0); | 2912 gfx::PointF anchor(0, 0); |
2927 gfx::PointF position(0, 0); | 2913 gfx::PointF position(0, 0); |
2928 gfx::Size bounds(100, 100); | 2914 gfx::Size bounds(100, 100); |
2929 setLayerPropertiesForTesting(root.get(), rotation45DegreesAboutCenter, ident
ityMatrix, anchor, position, bounds, false); | 2915 setLayerPropertiesForTesting(root.get(), rotation45DegreesAboutCenter, ident
ityMatrix, anchor, position, bounds, false); |
2930 root->setDrawsContent(true); | 2916 root->setDrawsContent(true); |
2931 | 2917 |
2932 std::vector<LayerImpl*> renderSurfaceLayerList; | 2918 std::vector<LayerImpl*> renderSurfaceLayerList; |
2933 int dummyMaxTextureSize = 512; | 2919 int dummyMaxTextureSize = 512; |
2934 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 2920 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
2935 | 2921 |
(...skipping 24 matching lines...) Expand all Loading... |
2960 | 2946 |
2961 testPoint = gfx::Point(-1, 50); | 2947 testPoint = gfx::Point(-1, 50); |
2962 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2948 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
2963 ASSERT_FALSE(resultLayer); | 2949 ASSERT_FALSE(resultLayer); |
2964 } | 2950 } |
2965 | 2951 |
2966 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) | 2952 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) |
2967 { | 2953 { |
2968 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 2954 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
2969 | 2955 |
2970 WebTransformationMatrix identityMatrix; | 2956 gfx::Transform identityMatrix; |
2971 | 2957 |
2972 // perspectiveProjectionAboutCenter * translationByZ is designed so that the
100 x 100 layer becomes 50 x 50, and remains centered at (50, 50). | 2958 // perspectiveProjectionAboutCenter * translationByZ is designed so that the
100 x 100 layer becomes 50 x 50, and remains centered at (50, 50). |
2973 WebTransformationMatrix perspectiveProjectionAboutCenter; | 2959 gfx::Transform perspectiveProjectionAboutCenter; |
2974 perspectiveProjectionAboutCenter.translate(50, 50); | 2960 perspectiveProjectionAboutCenter.Translate(50, 50); |
2975 perspectiveProjectionAboutCenter.applyPerspective(1); | 2961 perspectiveProjectionAboutCenter.ApplyPerspectiveDepth(1); |
2976 perspectiveProjectionAboutCenter.translate(-50, -50); | 2962 perspectiveProjectionAboutCenter.Translate(-50, -50); |
2977 WebTransformationMatrix translationByZ; | 2963 gfx::Transform translationByZ; |
2978 translationByZ.translate3d(0, 0, -1); | 2964 translationByZ.Translate3d(0, 0, -1); |
2979 | 2965 |
2980 gfx::PointF anchor(0, 0); | 2966 gfx::PointF anchor(0, 0); |
2981 gfx::PointF position(0, 0); | 2967 gfx::PointF position(0, 0); |
2982 gfx::Size bounds(100, 100); | 2968 gfx::Size bounds(100, 100); |
2983 setLayerPropertiesForTesting(root.get(), perspectiveProjectionAboutCenter *
translationByZ, identityMatrix, anchor, position, bounds, false); | 2969 setLayerPropertiesForTesting(root.get(), perspectiveProjectionAboutCenter *
translationByZ, identityMatrix, anchor, position, bounds, false); |
2984 root->setDrawsContent(true); | 2970 root->setDrawsContent(true); |
2985 | 2971 |
2986 std::vector<LayerImpl*> renderSurfaceLayerList; | 2972 std::vector<LayerImpl*> renderSurfaceLayerList; |
2987 int dummyMaxTextureSize = 512; | 2973 int dummyMaxTextureSize = 512; |
2988 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 2974 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3020 // test makes sure that hit testing works correctly accounts for the content
s scale. | 3006 // test makes sure that hit testing works correctly accounts for the content
s scale. |
3021 // A contentsScale that is not 1 effectively forces a non-identity transform
between | 3007 // A contentsScale that is not 1 effectively forces a non-identity transform
between |
3022 // layer's content space and layer's origin space. The hit testing code must
take this into account. | 3008 // layer's content space and layer's origin space. The hit testing code must
take this into account. |
3023 // | 3009 // |
3024 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If | 3010 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If |
3025 // contentsScale is ignored, then hit testing will mis-interpret the visible
ContentRect | 3011 // contentsScale is ignored, then hit testing will mis-interpret the visible
ContentRect |
3026 // as being larger than the actual bounds of the layer. | 3012 // as being larger than the actual bounds of the layer. |
3027 // | 3013 // |
3028 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3014 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3029 | 3015 |
3030 WebTransformationMatrix identityMatrix; | 3016 gfx::Transform identityMatrix; |
3031 gfx::PointF anchor(0, 0); | 3017 gfx::PointF anchor(0, 0); |
3032 | 3018 |
3033 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3019 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
3034 | 3020 |
3035 { | 3021 { |
3036 gfx::PointF position(25, 25); | 3022 gfx::PointF position(25, 25); |
3037 gfx::Size bounds(50, 50); | 3023 gfx::Size bounds(50, 50); |
3038 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(12345); | 3024 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(12345); |
3039 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 3025 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
3040 | 3026 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3079 testPoint = gfx::Point(74, 74); | 3065 testPoint = gfx::Point(74, 74); |
3080 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 3066 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
3081 ASSERT_TRUE(resultLayer); | 3067 ASSERT_TRUE(resultLayer); |
3082 EXPECT_EQ(12345, resultLayer->id()); | 3068 EXPECT_EQ(12345, resultLayer->id()); |
3083 } | 3069 } |
3084 | 3070 |
3085 TEST(LayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) | 3071 TEST(LayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) |
3086 { | 3072 { |
3087 // Test that hit-testing will only work for the visible portion of a layer,
and not | 3073 // Test that hit-testing will only work for the visible portion of a layer,
and not |
3088 // the entire layer bounds. Here we just test the simple axis-aligned case. | 3074 // the entire layer bounds. Here we just test the simple axis-aligned case. |
3089 WebTransformationMatrix identityMatrix; | 3075 gfx::Transform identityMatrix; |
3090 gfx::PointF anchor(0, 0); | 3076 gfx::PointF anchor(0, 0); |
3091 | 3077 |
3092 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3078 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3093 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3079 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
3094 | 3080 |
3095 { | 3081 { |
3096 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(123); | 3082 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(123); |
3097 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. | 3083 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. |
3098 gfx::Size bounds(50, 50); | 3084 gfx::Size bounds(50, 50); |
3099 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); | 3085 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3147 // algorithm needs to recognize that multiple parent layers may clip the lay
er, and | 3133 // algorithm needs to recognize that multiple parent layers may clip the lay
er, and |
3148 // should not actually hit those clipped areas. | 3134 // should not actually hit those clipped areas. |
3149 // | 3135 // |
3150 // The child and grandChild layers are both initialized to clip the rotatedL
eaf. The | 3136 // The child and grandChild layers are both initialized to clip the rotatedL
eaf. The |
3151 // child layer is rotated about the top-left corner, so that the root + chil
d clips | 3137 // child layer is rotated about the top-left corner, so that the root + chil
d clips |
3152 // combined create a triangle. The rotatedLeaf will only be visible where it
overlaps | 3138 // combined create a triangle. The rotatedLeaf will only be visible where it
overlaps |
3153 // this triangle. | 3139 // this triangle. |
3154 // | 3140 // |
3155 scoped_ptr<LayerImpl> root = LayerImpl::create(123); | 3141 scoped_ptr<LayerImpl> root = LayerImpl::create(123); |
3156 | 3142 |
3157 WebTransformationMatrix identityMatrix; | 3143 gfx::Transform identityMatrix; |
3158 gfx::PointF anchor(0, 0); | 3144 gfx::PointF anchor(0, 0); |
3159 gfx::PointF position(0, 0); | 3145 gfx::PointF position(0, 0); |
3160 gfx::Size bounds(100, 100); | 3146 gfx::Size bounds(100, 100); |
3161 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3147 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
3162 root->setMasksToBounds(true); | 3148 root->setMasksToBounds(true); |
3163 | 3149 |
3164 { | 3150 { |
3165 scoped_ptr<LayerImpl> child = LayerImpl::create(456); | 3151 scoped_ptr<LayerImpl> child = LayerImpl::create(456); |
3166 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(789); | 3152 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(789); |
3167 scoped_ptr<LayerImpl> rotatedLeaf = LayerImpl::create(2468); | 3153 scoped_ptr<LayerImpl> rotatedLeaf = LayerImpl::create(2468); |
3168 | 3154 |
3169 position = gfx::PointF(10, 10); | 3155 position = gfx::PointF(10, 10); |
3170 bounds = gfx::Size(80, 80); | 3156 bounds = gfx::Size(80, 80); |
3171 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3157 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
3172 child->setMasksToBounds(true); | 3158 child->setMasksToBounds(true); |
3173 | 3159 |
3174 WebTransformationMatrix rotation45DegreesAboutCorner; | 3160 gfx::Transform rotation45DegreesAboutCorner; |
3175 rotation45DegreesAboutCorner.rotate3d(0, 0, 45); | 3161 MathUtil::rotateEulerAngles(&rotation45DegreesAboutCorner, 0, 0, 45); |
3176 | 3162 |
3177 position = gfx::PointF(0, 0); // remember, positioned with respect to it
s parent which is already at 10, 10 | 3163 position = gfx::PointF(0, 0); // remember, positioned with respect to it
s parent which is already at 10, 10 |
3178 bounds = gfx::Size(200, 200); // to ensure it covers at least sqrt(2) *
100. | 3164 bounds = gfx::Size(200, 200); // to ensure it covers at least sqrt(2) *
100. |
3179 setLayerPropertiesForTesting(grandChild.get(), rotation45DegreesAboutCor
ner, identityMatrix, anchor, position, bounds, false); | 3165 setLayerPropertiesForTesting(grandChild.get(), rotation45DegreesAboutCor
ner, identityMatrix, anchor, position, bounds, false); |
3180 grandChild->setMasksToBounds(true); | 3166 grandChild->setMasksToBounds(true); |
3181 | 3167 |
3182 // Rotates about the center of the layer | 3168 // Rotates about the center of the layer |
3183 WebTransformationMatrix rotatedLeafTransform; | 3169 gfx::Transform rotatedLeafTransform; |
3184 rotatedLeafTransform.translate(-10, -10); // cancel out the grandParent'
s position | 3170 rotatedLeafTransform.Translate(-10, -10); // cancel out the grandParent'
s position |
3185 rotatedLeafTransform.rotate3d(0, 0, -45); // cancel out the corner 45-de
gree rotation of the parent. | 3171 MathUtil::rotateEulerAngles(&rotatedLeafTransform, 0, 0, -45); // cancel
out the corner 45-degree rotation of the parent. |
3186 rotatedLeafTransform.translate(50, 50); | 3172 rotatedLeafTransform.Translate(50, 50); |
3187 rotatedLeafTransform.rotate3d(0, 0, 45); | 3173 MathUtil::rotateEulerAngles(&rotatedLeafTransform, 0, 0, 45); |
3188 rotatedLeafTransform.translate(-50, -50); | 3174 rotatedLeafTransform.Translate(-50, -50); |
3189 position = gfx::PointF(0, 0); | 3175 position = gfx::PointF(0, 0); |
3190 bounds = gfx::Size(100, 100); | 3176 bounds = gfx::Size(100, 100); |
3191 setLayerPropertiesForTesting(rotatedLeaf.get(), rotatedLeafTransform, id
entityMatrix, anchor, position, bounds, false); | 3177 setLayerPropertiesForTesting(rotatedLeaf.get(), rotatedLeafTransform, id
entityMatrix, anchor, position, bounds, false); |
3192 rotatedLeaf->setDrawsContent(true); | 3178 rotatedLeaf->setDrawsContent(true); |
3193 | 3179 |
3194 grandChild->addChild(rotatedLeaf.Pass()); | 3180 grandChild->addChild(rotatedLeaf.Pass()); |
3195 child->addChild(grandChild.Pass()); | 3181 child->addChild(grandChild.Pass()); |
3196 root->addChild(child.Pass()); | 3182 root->addChild(child.Pass()); |
3197 } | 3183 } |
3198 | 3184 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3243 testPoint = gfx::Point(49, 51); | 3229 testPoint = gfx::Point(49, 51); |
3244 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 3230 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
3245 ASSERT_TRUE(resultLayer); | 3231 ASSERT_TRUE(resultLayer); |
3246 EXPECT_EQ(2468, resultLayer->id()); | 3232 EXPECT_EQ(2468, resultLayer->id()); |
3247 } | 3233 } |
3248 | 3234 |
3249 TEST(LayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) | 3235 TEST(LayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) |
3250 { | 3236 { |
3251 // This test checks that hit testing code does not accidentally clip to laye
r | 3237 // This test checks that hit testing code does not accidentally clip to laye
r |
3252 // bounds for a layer that actually does not clip. | 3238 // bounds for a layer that actually does not clip. |
3253 WebTransformationMatrix identityMatrix; | 3239 gfx::Transform identityMatrix; |
3254 gfx::PointF anchor(0, 0); | 3240 gfx::PointF anchor(0, 0); |
3255 | 3241 |
3256 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3242 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3257 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3243 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
3258 | 3244 |
3259 { | 3245 { |
3260 scoped_ptr<LayerImpl> intermediateLayer = LayerImpl::create(123); | 3246 scoped_ptr<LayerImpl> intermediateLayer = LayerImpl::create(123); |
3261 gfx::PointF position(10, 10); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. | 3247 gfx::PointF position(10, 10); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. |
3262 gfx::Size bounds(50, 50); | 3248 gfx::Size bounds(50, 50); |
3263 setLayerPropertiesForTesting(intermediateLayer.get(), identityMatrix, id
entityMatrix, anchor, position, bounds, false); | 3249 setLayerPropertiesForTesting(intermediateLayer.get(), identityMatrix, id
entityMatrix, anchor, position, bounds, false); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3304 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 3290 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
3305 ASSERT_TRUE(resultLayer); | 3291 ASSERT_TRUE(resultLayer); |
3306 EXPECT_EQ(456, resultLayer->id()); | 3292 EXPECT_EQ(456, resultLayer->id()); |
3307 } | 3293 } |
3308 | 3294 |
3309 | 3295 |
3310 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) | 3296 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) |
3311 { | 3297 { |
3312 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3298 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3313 | 3299 |
3314 WebTransformationMatrix identityMatrix; | 3300 gfx::Transform identityMatrix; |
3315 gfx::PointF anchor(0, 0); | 3301 gfx::PointF anchor(0, 0); |
3316 gfx::PointF position(0, 0); | 3302 gfx::PointF position(0, 0); |
3317 gfx::Size bounds(100, 100); | 3303 gfx::Size bounds(100, 100); |
3318 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3304 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
3319 root->setDrawsContent(true); | 3305 root->setDrawsContent(true); |
3320 | 3306 |
3321 { | 3307 { |
3322 // child 1 and child2 are initialized to overlap between x=50 and x=60. | 3308 // child 1 and child2 are initialized to overlap between x=50 and x=60. |
3323 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. | 3309 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. |
3324 // The expected stacking order is: | 3310 // The expected stacking order is: |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3407 } | 3393 } |
3408 | 3394 |
3409 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) | 3395 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
3410 { | 3396 { |
3411 // | 3397 // |
3412 // The geometry is set up similarly to the previous case, but | 3398 // The geometry is set up similarly to the previous case, but |
3413 // all layers are forced to be renderSurfaces now. | 3399 // all layers are forced to be renderSurfaces now. |
3414 // | 3400 // |
3415 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3401 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3416 | 3402 |
3417 WebTransformationMatrix identityMatrix; | 3403 gfx::Transform identityMatrix; |
3418 gfx::PointF anchor(0, 0); | 3404 gfx::PointF anchor(0, 0); |
3419 gfx::PointF position(0, 0); | 3405 gfx::PointF position(0, 0); |
3420 gfx::Size bounds(100, 100); | 3406 gfx::Size bounds(100, 100); |
3421 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3407 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
3422 root->setDrawsContent(true); | 3408 root->setDrawsContent(true); |
3423 | 3409 |
3424 { | 3410 { |
3425 // child 1 and child2 are initialized to overlap between x=50 and x=60. | 3411 // child 1 and child2 are initialized to overlap between x=50 and x=60. |
3426 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. | 3412 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. |
3427 // The expected stacking order is: | 3413 // The expected stacking order is: |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3529 | 3515 |
3530 testPoint = gfx::Point(10, 20); | 3516 testPoint = gfx::Point(10, 20); |
3531 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3517 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
3532 EXPECT_FALSE(resultLayer); | 3518 EXPECT_FALSE(resultLayer); |
3533 } | 3519 } |
3534 | 3520 |
3535 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
) | 3521 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
) |
3536 { | 3522 { |
3537 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 3523 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
3538 | 3524 |
3539 WebTransformationMatrix identityMatrix; | 3525 gfx::Transform identityMatrix; |
3540 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3526 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
3541 gfx::PointF anchor(0, 0); | 3527 gfx::PointF anchor(0, 0); |
3542 gfx::PointF position(0, 0); | 3528 gfx::PointF position(0, 0); |
3543 gfx::Size bounds(100, 100); | 3529 gfx::Size bounds(100, 100); |
3544 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3530 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
3545 root->setDrawsContent(true); | 3531 root->setDrawsContent(true); |
3546 | 3532 |
3547 std::vector<LayerImpl*> renderSurfaceLayerList; | 3533 std::vector<LayerImpl*> renderSurfaceLayerList; |
3548 int dummyMaxTextureSize = 512; | 3534 int dummyMaxTextureSize = 512; |
3549 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3535 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3585 testPoint = gfx::Point(59, 59); | 3571 testPoint = gfx::Point(59, 59); |
3586 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3572 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
3587 ASSERT_TRUE(resultLayer); | 3573 ASSERT_TRUE(resultLayer); |
3588 EXPECT_EQ(12345, resultLayer->id()); | 3574 EXPECT_EQ(12345, resultLayer->id()); |
3589 } | 3575 } |
3590 | 3576 |
3591 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForUninvertibl
eTransform) | 3577 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForUninvertibl
eTransform) |
3592 { | 3578 { |
3593 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 3579 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
3594 | 3580 |
3595 WebTransformationMatrix uninvertibleTransform; | 3581 gfx::Transform uninvertibleTransform; |
3596 uninvertibleTransform.setM11(0); | 3582 uninvertibleTransform.matrix().setDouble(0, 0, 0); |
3597 uninvertibleTransform.setM22(0); | 3583 uninvertibleTransform.matrix().setDouble(1, 1, 0); |
3598 uninvertibleTransform.setM33(0); | 3584 uninvertibleTransform.matrix().setDouble(2, 2, 0); |
3599 uninvertibleTransform.setM44(0); | 3585 uninvertibleTransform.matrix().setDouble(3, 3, 0); |
3600 ASSERT_FALSE(uninvertibleTransform.isInvertible()); | 3586 ASSERT_FALSE(uninvertibleTransform.IsInvertible()); |
3601 | 3587 |
3602 WebTransformationMatrix identityMatrix; | 3588 gfx::Transform identityMatrix; |
3603 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3589 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
3604 gfx::PointF anchor(0, 0); | 3590 gfx::PointF anchor(0, 0); |
3605 gfx::PointF position(0, 0); | 3591 gfx::PointF position(0, 0); |
3606 gfx::Size bounds(100, 100); | 3592 gfx::Size bounds(100, 100); |
3607 setLayerPropertiesForTesting(root.get(), uninvertibleTransform, identityMatr
ix, anchor, position, bounds, false); | 3593 setLayerPropertiesForTesting(root.get(), uninvertibleTransform, identityMatr
ix, anchor, position, bounds, false); |
3608 root->setDrawsContent(true); | 3594 root->setDrawsContent(true); |
3609 root->setTouchEventHandlerRegion(touchHandlerRegion); | 3595 root->setTouchEventHandlerRegion(touchHandlerRegion); |
3610 | 3596 |
3611 std::vector<LayerImpl*> renderSurfaceLayerList; | 3597 std::vector<LayerImpl*> renderSurfaceLayerList; |
3612 int dummyMaxTextureSize = 512; | 3598 int dummyMaxTextureSize = 512; |
3613 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3599 LayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1,
1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
3614 | 3600 |
3615 // Sanity check the scenario we just created. | 3601 // Sanity check the scenario we just created. |
3616 ASSERT_EQ(1u, renderSurfaceLayerList.size()); | 3602 ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
3617 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); | 3603 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); |
3618 ASSERT_FALSE(root->screenSpaceTransform().isInvertible()); | 3604 ASSERT_FALSE(root->screenSpaceTransform().IsInvertible()); |
3619 | 3605 |
3620 // Hit checking any point should not hit the touch handler region on the lay
er. If the invertible matrix is | 3606 // Hit checking any point should not hit the touch handler region on the lay
er. If the invertible matrix is |
3621 // accidentally ignored and treated like an identity, then the hit testing w
ill | 3607 // accidentally ignored and treated like an identity, then the hit testing w
ill |
3622 // incorrectly hit the layer when it shouldn't. | 3608 // incorrectly hit the layer when it shouldn't. |
3623 gfx::Point testPoint(1, 1); | 3609 gfx::Point testPoint(1, 1); |
3624 LayerImpl* resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTou
chHandlerRegion(testPoint, renderSurfaceLayerList); | 3610 LayerImpl* resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTou
chHandlerRegion(testPoint, renderSurfaceLayerList); |
3625 EXPECT_FALSE(resultLayer); | 3611 EXPECT_FALSE(resultLayer); |
3626 | 3612 |
3627 testPoint = gfx::Point(10, 10); | 3613 testPoint = gfx::Point(10, 10); |
3628 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3614 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
(...skipping 17 matching lines...) Expand all Loading... |
3646 | 3632 |
3647 testPoint = gfx::Point(-1, -1); | 3633 testPoint = gfx::Point(-1, -1); |
3648 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3634 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
3649 EXPECT_FALSE(resultLayer); | 3635 EXPECT_FALSE(resultLayer); |
3650 } | 3636 } |
3651 | 3637 |
3652 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSinglePosit
ionedLayer) | 3638 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSinglePosit
ionedLayer) |
3653 { | 3639 { |
3654 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); | 3640 scoped_ptr<LayerImpl> root = LayerImpl::create(12345); |
3655 | 3641 |
3656 WebTransformationMatrix identityMatrix; | 3642 gfx::Transform identityMatrix; |
3657 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3643 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
3658 gfx::PointF anchor(0, 0); | 3644 gfx::PointF anchor(0, 0); |
3659 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. | 3645 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. |
3660 gfx::Size bounds(100, 100); | 3646 gfx::Size bounds(100, 100); |
3661 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3647 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
3662 root->setDrawsContent(true); | 3648 root->setDrawsContent(true); |
3663 root->setTouchEventHandlerRegion(touchHandlerRegion); | 3649 root->setTouchEventHandlerRegion(touchHandlerRegion); |
3664 | 3650 |
3665 std::vector<LayerImpl*> renderSurfaceLayerList; | 3651 std::vector<LayerImpl*> renderSurfaceLayerList; |
3666 int dummyMaxTextureSize = 512; | 3652 int dummyMaxTextureSize = 512; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3704 // test makes sure that hit testing works correctly accounts for the content
s scale. | 3690 // test makes sure that hit testing works correctly accounts for the content
s scale. |
3705 // A contentsScale that is not 1 effectively forces a non-identity transform
between | 3691 // A contentsScale that is not 1 effectively forces a non-identity transform
between |
3706 // layer's content space and layer's origin space. The hit testing code must
take this into account. | 3692 // layer's content space and layer's origin space. The hit testing code must
take this into account. |
3707 // | 3693 // |
3708 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If | 3694 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If |
3709 // contentsScale is ignored, then hit checking will mis-interpret the visibl
eContentRect | 3695 // contentsScale is ignored, then hit checking will mis-interpret the visibl
eContentRect |
3710 // as being larger than the actual bounds of the layer. | 3696 // as being larger than the actual bounds of the layer. |
3711 // | 3697 // |
3712 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3698 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3713 | 3699 |
3714 WebTransformationMatrix identityMatrix; | 3700 gfx::Transform identityMatrix; |
3715 gfx::PointF anchor(0, 0); | 3701 gfx::PointF anchor(0, 0); |
3716 | 3702 |
3717 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3703 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
3718 | 3704 |
3719 { | 3705 { |
3720 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); | 3706 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); |
3721 gfx::PointF position(25, 25); | 3707 gfx::PointF position(25, 25); |
3722 gfx::Size bounds(50, 50); | 3708 gfx::Size bounds(50, 50); |
3723 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(12345); | 3709 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(12345); |
3724 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 3710 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3776 ASSERT_TRUE(resultLayer); | 3762 ASSERT_TRUE(resultLayer); |
3777 EXPECT_EQ(12345, resultLayer->id()); | 3763 EXPECT_EQ(12345, resultLayer->id()); |
3778 } | 3764 } |
3779 | 3765 |
3780 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
WithDeviceScale) | 3766 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
WithDeviceScale) |
3781 { | 3767 { |
3782 // The layer's deviceScalefactor and pageScaleFactor should scale the conten
tRect and we should | 3768 // The layer's deviceScalefactor and pageScaleFactor should scale the conten
tRect and we should |
3783 // be able to hit the touch handler region by scaling the points accordingly
. | 3769 // be able to hit the touch handler region by scaling the points accordingly
. |
3784 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3770 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3785 | 3771 |
3786 WebTransformationMatrix identityMatrix; | 3772 gfx::Transform identityMatrix; |
3787 gfx::PointF anchor(0, 0); | 3773 gfx::PointF anchor(0, 0); |
3788 // Set the bounds of the root layer big enough to fit the child when scaled. | 3774 // Set the bounds of the root layer big enough to fit the child when scaled. |
3789 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3775 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
3790 | 3776 |
3791 { | 3777 { |
3792 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); | 3778 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); |
3793 gfx::PointF position(25, 25); | 3779 gfx::PointF position(25, 25); |
3794 gfx::Size bounds(50, 50); | 3780 gfx::Size bounds(50, 50); |
3795 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(12345); | 3781 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(12345); |
3796 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 3782 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
3797 | 3783 |
3798 testLayer->setDrawsContent(true); | 3784 testLayer->setDrawsContent(true); |
3799 testLayer->setTouchEventHandlerRegion(touchHandlerRegion); | 3785 testLayer->setTouchEventHandlerRegion(touchHandlerRegion); |
3800 root->addChild(testLayer.Pass()); | 3786 root->addChild(testLayer.Pass()); |
3801 } | 3787 } |
3802 | 3788 |
3803 std::vector<LayerImpl*> renderSurfaceLayerList; | 3789 std::vector<LayerImpl*> renderSurfaceLayerList; |
3804 int dummyMaxTextureSize = 512; | 3790 int dummyMaxTextureSize = 512; |
3805 float deviceScaleFactor = 3.0f; | 3791 float deviceScaleFactor = 3.0f; |
3806 float pageScaleFactor = 5.0f; | 3792 float pageScaleFactor = 5.0f; |
3807 WebTransformationMatrix pageScaleTransform; | 3793 gfx::Transform pageScaleTransform; |
3808 pageScaleTransform.scale(pageScaleFactor); | 3794 pageScaleTransform.Scale(pageScaleFactor, pageScaleFactor); |
3809 root->setImplTransform(pageScaleTransform); // Applying the pageScaleFactor
through implTransform. | 3795 root->setImplTransform(pageScaleTransform); // Applying the pageScaleFactor
through implTransform. |
3810 gfx::Size scaledBoundsForRoot = gfx::ToCeiledSize(gfx::ScaleSize(root->bound
s(), deviceScaleFactor * pageScaleFactor)); | 3796 gfx::Size scaledBoundsForRoot = gfx::ToCeiledSize(gfx::ScaleSize(root->bound
s(), deviceScaleFactor * pageScaleFactor)); |
3811 LayerTreeHostCommon::calculateDrawTransforms(root.get(), scaledBoundsForRoot
, deviceScaleFactor, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); | 3797 LayerTreeHostCommon::calculateDrawTransforms(root.get(), scaledBoundsForRoot
, deviceScaleFactor, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
3812 | 3798 |
3813 // Sanity check the scenario we just created. | 3799 // Sanity check the scenario we just created. |
3814 // The visibleContentRect for testLayer is actually 100x100, even though its
layout size is 50x50, positioned at 25x25. | 3800 // The visibleContentRect for testLayer is actually 100x100, even though its
layout size is 50x50, positioned at 25x25. |
3815 LayerImpl* testLayer = root->children()[0]; | 3801 LayerImpl* testLayer = root->children()[0]; |
3816 ASSERT_EQ(1u, renderSurfaceLayerList.size()); | 3802 ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
3817 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); | 3803 ASSERT_EQ(1u, root->renderSurface()->layerList().size()); |
3818 | 3804 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3857 testPoint = gfx::ScalePoint(testPoint, deviceScaleFactor * pageScaleFactor); | 3843 testPoint = gfx::ScalePoint(testPoint, deviceScaleFactor * pageScaleFactor); |
3858 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3844 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
3859 ASSERT_TRUE(resultLayer); | 3845 ASSERT_TRUE(resultLayer); |
3860 EXPECT_EQ(12345, resultLayer->id()); | 3846 EXPECT_EQ(12345, resultLayer->id()); |
3861 } | 3847 } |
3862 | 3848 |
3863 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSimpleClipp
edLayer) | 3849 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSimpleClipp
edLayer) |
3864 { | 3850 { |
3865 // Test that hit-checking will only work for the visible portion of a layer,
and not | 3851 // Test that hit-checking will only work for the visible portion of a layer,
and not |
3866 // the entire layer bounds. Here we just test the simple axis-aligned case. | 3852 // the entire layer bounds. Here we just test the simple axis-aligned case. |
3867 WebTransformationMatrix identityMatrix; | 3853 gfx::Transform identityMatrix; |
3868 gfx::PointF anchor(0, 0); | 3854 gfx::PointF anchor(0, 0); |
3869 | 3855 |
3870 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3856 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3871 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3857 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
3872 | 3858 |
3873 { | 3859 { |
3874 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(123); | 3860 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(123); |
3875 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. | 3861 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. |
3876 gfx::Size bounds(50, 50); | 3862 gfx::Size bounds(50, 50); |
3877 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); | 3863 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3942 { | 3928 { |
3943 scoped_refptr<NoScaleContentLayer> toReturn = NoScaleContentLayer::create(de
legate); | 3929 scoped_refptr<NoScaleContentLayer> toReturn = NoScaleContentLayer::create(de
legate); |
3944 toReturn->setIsDrawable(true); | 3930 toReturn->setIsDrawable(true); |
3945 return toReturn; | 3931 return toReturn; |
3946 } | 3932 } |
3947 | 3933 |
3948 TEST(LayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) | 3934 TEST(LayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
3949 { | 3935 { |
3950 // Verify draw and screen space transforms of layers not in a surface. | 3936 // Verify draw and screen space transforms of layers not in a surface. |
3951 MockContentLayerClient delegate; | 3937 MockContentLayerClient delegate; |
3952 WebTransformationMatrix identityMatrix; | 3938 gfx::Transform identityMatrix; |
3953 | 3939 |
3954 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 3940 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
3955 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); | 3941 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); |
3956 | 3942 |
3957 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); | 3943 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); |
3958 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 3944 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
3959 | 3945 |
3960 scoped_refptr<ContentLayer> childEmpty = createDrawableContentLayer(&delegat
e); | 3946 scoped_refptr<ContentLayer> childEmpty = createDrawableContentLayer(&delegat
e); |
3961 setLayerPropertiesForTesting(childEmpty.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(0, 0), true); | 3947 setLayerPropertiesForTesting(childEmpty.get(), identityMatrix, identityMatri
x, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(0, 0), true); |
3962 | 3948 |
(...skipping 13 matching lines...) Expand all Loading... |
3976 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 3962 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
3977 | 3963 |
3978 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, parent); | 3964 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, parent); |
3979 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, child); | 3965 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, child); |
3980 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, childEmpty); | 3966 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, childEmpty); |
3981 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); | 3967 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); |
3982 | 3968 |
3983 EXPECT_EQ(1u, renderSurfaceLayerList.size()); | 3969 EXPECT_EQ(1u, renderSurfaceLayerList.size()); |
3984 | 3970 |
3985 // Verify parent transforms | 3971 // Verify parent transforms |
3986 WebTransformationMatrix expectedParentTransform; | 3972 gfx::Transform expectedParentTransform; |
3987 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->screenSpace
Transform()); | 3973 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->screenSpace
Transform()); |
3988 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->drawTransfo
rm()); | 3974 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->drawTransfo
rm()); |
3989 | 3975 |
3990 // Verify results of transformed parent rects | 3976 // Verify results of transformed parent rects |
3991 gfx::RectF parentContentBounds(gfx::PointF(), gfx::SizeF(parent->contentBoun
ds())); | 3977 gfx::RectF parentContentBounds(gfx::PointF(), gfx::SizeF(parent->contentBoun
ds())); |
3992 | 3978 |
3993 gfx::RectF parentDrawRect = MathUtil::mapClippedRect(parent->drawTransform()
, parentContentBounds); | 3979 gfx::RectF parentDrawRect = MathUtil::mapClippedRect(parent->drawTransform()
, parentContentBounds); |
3994 gfx::RectF parentScreenSpaceRect = MathUtil::mapClippedRect(parent->screenSp
aceTransform(), parentContentBounds); | 3980 gfx::RectF parentScreenSpaceRect = MathUtil::mapClippedRect(parent->screenSp
aceTransform(), parentContentBounds); |
3995 | 3981 |
3996 gfx::RectF expectedParentDrawRect(gfx::PointF(), parent->bounds()); | 3982 gfx::RectF expectedParentDrawRect(gfx::PointF(), parent->bounds()); |
3997 expectedParentDrawRect.Scale(deviceScaleFactor); | 3983 expectedParentDrawRect.Scale(deviceScaleFactor); |
3998 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentDrawRect); | 3984 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentDrawRect); |
3999 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentScreenSpaceRect); | 3985 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentScreenSpaceRect); |
4000 | 3986 |
4001 // Verify child and childEmpty transforms. They should match. | 3987 // Verify child and childEmpty transforms. They should match. |
4002 WebTransformationMatrix expectedChildTransform; | 3988 gfx::Transform expectedChildTransform; |
4003 expectedChildTransform.translate(deviceScaleFactor * child->position().x(),
deviceScaleFactor * child->position().y()); | 3989 expectedChildTransform.Translate(deviceScaleFactor * child->position().x(),
deviceScaleFactor * child->position().y()); |
4004 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 3990 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
4005 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->screenSpaceTr
ansform()); | 3991 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->screenSpaceTr
ansform()); |
4006 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, childEmpty->drawTran
sform()); | 3992 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, childEmpty->drawTran
sform()); |
4007 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, childEmpty->screenSp
aceTransform()); | 3993 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, childEmpty->screenSp
aceTransform()); |
4008 | 3994 |
4009 // Verify results of transformed child and childEmpty rects. They should mat
ch. | 3995 // Verify results of transformed child and childEmpty rects. They should mat
ch. |
4010 gfx::RectF childContentBounds(gfx::PointF(), gfx::SizeF(child->contentBounds
())); | 3996 gfx::RectF childContentBounds(gfx::PointF(), gfx::SizeF(child->contentBounds
())); |
4011 | 3997 |
4012 gfx::RectF childDrawRect = MathUtil::mapClippedRect(child->drawTransform(),
childContentBounds); | 3998 gfx::RectF childDrawRect = MathUtil::mapClippedRect(child->drawTransform(),
childContentBounds); |
4013 gfx::RectF childScreenSpaceRect = MathUtil::mapClippedRect(child->screenSpac
eTransform(), childContentBounds); | 3999 gfx::RectF childScreenSpaceRect = MathUtil::mapClippedRect(child->screenSpac
eTransform(), childContentBounds); |
4014 | 4000 |
4015 gfx::RectF childEmptyDrawRect = MathUtil::mapClippedRect(childEmpty->drawTra
nsform(), childContentBounds); | 4001 gfx::RectF childEmptyDrawRect = MathUtil::mapClippedRect(childEmpty->drawTra
nsform(), childContentBounds); |
4016 gfx::RectF childEmptyScreenSpaceRect = MathUtil::mapClippedRect(childEmpty->
screenSpaceTransform(), childContentBounds); | 4002 gfx::RectF childEmptyScreenSpaceRect = MathUtil::mapClippedRect(childEmpty->
screenSpaceTransform(), childContentBounds); |
4017 | 4003 |
4018 gfx::RectF expectedChildDrawRect(child->position(), child->bounds()); | 4004 gfx::RectF expectedChildDrawRect(child->position(), child->bounds()); |
4019 expectedChildDrawRect.Scale(deviceScaleFactor); | 4005 expectedChildDrawRect.Scale(deviceScaleFactor); |
4020 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childDrawRect); | 4006 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childDrawRect); |
4021 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childScreenSpaceRect); | 4007 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childScreenSpaceRect); |
4022 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childEmptyDrawRect); | 4008 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childEmptyDrawRect); |
4023 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childEmptyScreenSpaceRect); | 4009 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childEmptyScreenSpaceRect); |
4024 | 4010 |
4025 // Verify childNoScale transforms | 4011 // Verify childNoScale transforms |
4026 WebTransformationMatrix expectedChildNoScaleTransform = child->drawTransform
(); | 4012 gfx::Transform expectedChildNoScaleTransform = child->drawTransform(); |
4027 // All transforms operate on content rects. The child's content rect | 4013 // All transforms operate on content rects. The child's content rect |
4028 // incorporates device scale, but the childNoScale does not; add it here. | 4014 // incorporates device scale, but the childNoScale does not; add it here. |
4029 expectedChildNoScaleTransform.scale(deviceScaleFactor); | 4015 expectedChildNoScaleTransform.Scale(deviceScaleFactor, deviceScaleFactor); |
4030 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>drawTransform()); | 4016 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>drawTransform()); |
4031 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>screenSpaceTransform()); | 4017 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>screenSpaceTransform()); |
4032 } | 4018 } |
4033 | 4019 |
4034 TEST(LayerTreeHostCommonTest, verifyLayerTransformsInHighDPIAccurateScaleZeroChi
ldPosition) | 4020 TEST(LayerTreeHostCommonTest, verifyLayerTransformsInHighDPIAccurateScaleZeroChi
ldPosition) |
4035 { | 4021 { |
4036 // Verify draw and screen space transforms of layers not in a surface. | 4022 // Verify draw and screen space transforms of layers not in a surface. |
4037 MockContentLayerClient delegate; | 4023 MockContentLayerClient delegate; |
4038 WebTransformationMatrix identityMatrix; | 4024 gfx::Transform identityMatrix; |
4039 | 4025 |
4040 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4026 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4041 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(133, 133), true); | 4027 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(133, 133), true); |
4042 | 4028 |
4043 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); | 4029 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); |
4044 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 13), true); | 4030 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 13), true); |
4045 | 4031 |
4046 scoped_refptr<NoScaleContentLayer> childNoScale = createNoScaleDrawableConte
ntLayer(&delegate); | 4032 scoped_refptr<NoScaleContentLayer> childNoScale = createNoScaleDrawableConte
ntLayer(&delegate); |
4047 setLayerPropertiesForTesting(childNoScale.get(), identityMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 13), true); | 4033 setLayerPropertiesForTesting(childNoScale.get(), identityMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 13), true); |
4048 | 4034 |
4049 parent->addChild(child); | 4035 parent->addChild(child); |
4050 parent->addChild(childNoScale); | 4036 parent->addChild(childNoScale); |
4051 | 4037 |
4052 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 4038 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
4053 int dummyMaxTextureSize = 512; | 4039 int dummyMaxTextureSize = 512; |
4054 | 4040 |
4055 const float deviceScaleFactor = 1.7f; | 4041 const float deviceScaleFactor = 1.7f; |
4056 const float pageScaleFactor = 1; | 4042 const float pageScaleFactor = 1; |
4057 | 4043 |
4058 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4044 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4059 | 4045 |
4060 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, parent); | 4046 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, parent); |
4061 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, child); | 4047 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, child); |
4062 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); | 4048 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); |
4063 | 4049 |
4064 EXPECT_EQ(1u, renderSurfaceLayerList.size()); | 4050 EXPECT_EQ(1u, renderSurfaceLayerList.size()); |
4065 | 4051 |
4066 // Verify parent transforms | 4052 // Verify parent transforms |
4067 WebTransformationMatrix expectedParentTransform; | 4053 gfx::Transform expectedParentTransform; |
4068 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->screenSpace
Transform()); | 4054 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->screenSpace
Transform()); |
4069 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->drawTransfo
rm()); | 4055 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->drawTransfo
rm()); |
4070 | 4056 |
4071 // Verify results of transformed parent rects | 4057 // Verify results of transformed parent rects |
4072 gfx::RectF parentContentBounds(gfx::PointF(), gfx::SizeF(parent->contentBoun
ds())); | 4058 gfx::RectF parentContentBounds(gfx::PointF(), gfx::SizeF(parent->contentBoun
ds())); |
4073 | 4059 |
4074 gfx::RectF parentDrawRect = MathUtil::mapClippedRect(parent->drawTransform()
, parentContentBounds); | 4060 gfx::RectF parentDrawRect = MathUtil::mapClippedRect(parent->drawTransform()
, parentContentBounds); |
4075 gfx::RectF parentScreenSpaceRect = MathUtil::mapClippedRect(parent->screenSp
aceTransform(), parentContentBounds); | 4061 gfx::RectF parentScreenSpaceRect = MathUtil::mapClippedRect(parent->screenSp
aceTransform(), parentContentBounds); |
4076 | 4062 |
4077 gfx::RectF expectedParentDrawRect(gfx::PointF(), parent->bounds()); | 4063 gfx::RectF expectedParentDrawRect(gfx::PointF(), parent->bounds()); |
4078 expectedParentDrawRect.Scale(deviceScaleFactor); | 4064 expectedParentDrawRect.Scale(deviceScaleFactor); |
4079 expectedParentDrawRect.set_width(ceil(expectedParentDrawRect.width())); | 4065 expectedParentDrawRect.set_width(ceil(expectedParentDrawRect.width())); |
4080 expectedParentDrawRect.set_height(ceil(expectedParentDrawRect.height())); | 4066 expectedParentDrawRect.set_height(ceil(expectedParentDrawRect.height())); |
4081 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentDrawRect); | 4067 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentDrawRect); |
4082 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentScreenSpaceRect); | 4068 EXPECT_FLOAT_RECT_EQ(expectedParentDrawRect, parentScreenSpaceRect); |
4083 | 4069 |
4084 // Verify child transforms | 4070 // Verify child transforms |
4085 WebTransformationMatrix expectedChildTransform; | 4071 gfx::Transform expectedChildTransform; |
4086 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); | 4072 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->drawTransform
()); |
4087 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->screenSpaceTr
ansform()); | 4073 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildTransform, child->screenSpaceTr
ansform()); |
4088 | 4074 |
4089 // Verify results of transformed child rects | 4075 // Verify results of transformed child rects |
4090 gfx::RectF childContentBounds(gfx::PointF(), gfx::SizeF(child->contentBounds
())); | 4076 gfx::RectF childContentBounds(gfx::PointF(), gfx::SizeF(child->contentBounds
())); |
4091 | 4077 |
4092 gfx::RectF childDrawRect = MathUtil::mapClippedRect(child->drawTransform(),
childContentBounds); | 4078 gfx::RectF childDrawRect = MathUtil::mapClippedRect(child->drawTransform(),
childContentBounds); |
4093 gfx::RectF childScreenSpaceRect = MathUtil::mapClippedRect(child->screenSpac
eTransform(), childContentBounds); | 4079 gfx::RectF childScreenSpaceRect = MathUtil::mapClippedRect(child->screenSpac
eTransform(), childContentBounds); |
4094 | 4080 |
4095 gfx::RectF expectedChildDrawRect(gfx::PointF(), child->bounds()); | 4081 gfx::RectF expectedChildDrawRect(gfx::PointF(), child->bounds()); |
4096 expectedChildDrawRect.Scale(deviceScaleFactor); | 4082 expectedChildDrawRect.Scale(deviceScaleFactor); |
4097 expectedChildDrawRect.set_width(ceil(expectedChildDrawRect.width())); | 4083 expectedChildDrawRect.set_width(ceil(expectedChildDrawRect.width())); |
4098 expectedChildDrawRect.set_height(ceil(expectedChildDrawRect.height())); | 4084 expectedChildDrawRect.set_height(ceil(expectedChildDrawRect.height())); |
4099 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childDrawRect); | 4085 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childDrawRect); |
4100 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childScreenSpaceRect); | 4086 EXPECT_FLOAT_RECT_EQ(expectedChildDrawRect, childScreenSpaceRect); |
4101 | 4087 |
4102 // Verify childNoScale transforms | 4088 // Verify childNoScale transforms |
4103 WebTransformationMatrix expectedChildNoScaleTransform = child->drawTransform
(); | 4089 gfx::Transform expectedChildNoScaleTransform = child->drawTransform(); |
4104 // All transforms operate on content rects. The child's content rect | 4090 // All transforms operate on content rects. The child's content rect |
4105 // incorporates device scale, but the childNoScale does not; add it here. | 4091 // incorporates device scale, but the childNoScale does not; add it here. |
4106 expectedChildNoScaleTransform.scale(deviceScaleFactor); | 4092 expectedChildNoScaleTransform.Scale(deviceScaleFactor, deviceScaleFactor); |
4107 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>drawTransform()); | 4093 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>drawTransform()); |
4108 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>screenSpaceTransform()); | 4094 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale-
>screenSpaceTransform()); |
4109 } | 4095 } |
4110 | 4096 |
4111 TEST(LayerTreeHostCommonTest, verifyContentsScale) | 4097 TEST(LayerTreeHostCommonTest, verifyContentsScale) |
4112 { | 4098 { |
4113 MockContentLayerClient delegate; | 4099 MockContentLayerClient delegate; |
4114 WebTransformationMatrix identityMatrix; | 4100 gfx::Transform identityMatrix; |
4115 | 4101 |
4116 WebTransformationMatrix parentScaleMatrix; | 4102 gfx::Transform parentScaleMatrix; |
4117 const double initialParentScale = 1.75; | 4103 const double initialParentScale = 1.75; |
4118 parentScaleMatrix.scale(initialParentScale); | 4104 parentScaleMatrix.Scale(initialParentScale, initialParentScale); |
4119 | 4105 |
4120 WebTransformationMatrix childScaleMatrix; | 4106 gfx::Transform childScaleMatrix; |
4121 const double initialChildScale = 1.25; | 4107 const double initialChildScale = 1.25; |
4122 childScaleMatrix.scale(initialChildScale); | 4108 childScaleMatrix.Scale(initialChildScale, initialChildScale); |
4123 | 4109 |
4124 float fixedRasterScale = 2.5; | 4110 float fixedRasterScale = 2.5; |
4125 | 4111 |
4126 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4112 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4127 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); | 4113 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); |
4128 | 4114 |
4129 scoped_refptr<ContentLayer> childScale = createDrawableContentLayer(&delegat
e); | 4115 scoped_refptr<ContentLayer> childScale = createDrawableContentLayer(&delegat
e); |
4130 setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 4116 setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
4131 | 4117 |
4132 scoped_refptr<ContentLayer> childEmpty = createDrawableContentLayer(&delegat
e); | 4118 scoped_refptr<ContentLayer> childEmpty = createDrawableContentLayer(&delegat
e); |
(...skipping 16 matching lines...) Expand all Loading... |
4149 parent->addChild(childNoScale); | 4135 parent->addChild(childNoScale); |
4150 parent->addChild(childNoAutoScale); | 4136 parent->addChild(childNoAutoScale); |
4151 | 4137 |
4152 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 4138 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
4153 int dummyMaxTextureSize = 512; | 4139 int dummyMaxTextureSize = 512; |
4154 | 4140 |
4155 double deviceScaleFactor = 2.5; | 4141 double deviceScaleFactor = 2.5; |
4156 double pageScaleFactor = 1.5; | 4142 double pageScaleFactor = 1.5; |
4157 | 4143 |
4158 // FIXME: Remove this when pageScaleFactor is applied in the compositor. | 4144 // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
4159 WebTransformationMatrix pageScaleMatrix; | 4145 gfx::Transform pageScaleMatrix; |
4160 pageScaleMatrix.scale(pageScaleFactor); | 4146 pageScaleMatrix.Scale(pageScaleFactor, pageScaleFactor); |
4161 parent->setSublayerTransform(pageScaleMatrix); | 4147 parent->setSublayerTransform(pageScaleMatrix); |
4162 | 4148 |
4163 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4149 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4164 | 4150 |
4165 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); | 4151 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); |
4166 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childScale); | 4152 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childScale); |
4167 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childEmpty); | 4153 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childEmpty); |
4168 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); | 4154 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); |
4169 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * fixedRasterSc
ale, childNoAutoScale); | 4155 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * fixedRasterSc
ale, childNoAutoScale); |
4170 | 4156 |
4171 // The parent is scaled up and shouldn't need to scale during draw. The chil
d that can scale its contents should | 4157 // The parent is scaled up and shouldn't need to scale during draw. The chil
d that can scale its contents should |
4172 // also not need to scale during draw. This shouldn't change if the child ha
s empty bounds. The other children should. | 4158 // also not need to scale during draw. This shouldn't change if the child ha
s empty bounds. The other children should. |
4173 EXPECT_FLOAT_EQ(1, parent->drawTransform().m11()); | 4159 EXPECT_FLOAT_EQ(1, parent->drawTransform().matrix().getDouble(0, 0)); |
4174 EXPECT_FLOAT_EQ(1, parent->drawTransform().m22()); | 4160 EXPECT_FLOAT_EQ(1, parent->drawTransform().matrix().getDouble(1, 1)); |
4175 EXPECT_FLOAT_EQ(1, childScale->drawTransform().m11()); | 4161 EXPECT_FLOAT_EQ(1, childScale->drawTransform().matrix().getDouble(0, 0)); |
4176 EXPECT_FLOAT_EQ(1, childScale->drawTransform().m22()); | 4162 EXPECT_FLOAT_EQ(1, childScale->drawTransform().matrix().getDouble(1, 1)); |
4177 EXPECT_FLOAT_EQ(1, childEmpty->drawTransform().m11()); | 4163 EXPECT_FLOAT_EQ(1, childEmpty->drawTransform().matrix().getDouble(0, 0)); |
4178 EXPECT_FLOAT_EQ(1, childEmpty->drawTransform().m22()); | 4164 EXPECT_FLOAT_EQ(1, childEmpty->drawTransform().matrix().getDouble(1, 1)); |
4179 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, childNoScale->drawTransform().m11()); | 4165 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, childNoScale->drawTransform().matrix().getDouble(0, 0)); |
4180 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, childNoScale->drawTransform().m22()); | 4166 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, childNoScale->drawTransform().matrix().getDouble(1, 1)); |
4181 EXPECT_FLOAT_EQ(initialParentScale * initialChildScale / fixedRasterScale, c
hildNoAutoScale->drawTransform().m11()); | 4167 EXPECT_FLOAT_EQ(initialParentScale * initialChildScale / fixedRasterScale, c
hildNoAutoScale->drawTransform().matrix().getDouble(0, 0)); |
4182 EXPECT_FLOAT_EQ(initialParentScale * initialChildScale / fixedRasterScale, c
hildNoAutoScale->drawTransform().m22()); | 4168 EXPECT_FLOAT_EQ(initialParentScale * initialChildScale / fixedRasterScale, c
hildNoAutoScale->drawTransform().matrix().getDouble(1, 1)); |
4183 | 4169 |
4184 // If the transform changes, we expect the contentsScale to remain unchanged
. | 4170 // If the transform changes, we expect the contentsScale to remain unchanged
. |
4185 childScale->setTransform(identityMatrix); | 4171 childScale->setTransform(identityMatrix); |
4186 childEmpty->setTransform(identityMatrix); | 4172 childEmpty->setTransform(identityMatrix); |
4187 | 4173 |
4188 renderSurfaceLayerList.clear(); | 4174 renderSurfaceLayerList.clear(); |
4189 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4175 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4190 | 4176 |
4191 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); | 4177 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); |
4192 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childScale); | 4178 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childScale); |
4193 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childEmpty); | 4179 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childEmpty); |
4194 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); | 4180 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); |
4195 | 4181 |
4196 // But if the deviceScaleFactor or pageScaleFactor changes, then it should b
e updated, but using the initial transform. | 4182 // But if the deviceScaleFactor or pageScaleFactor changes, then it should b
e updated, but using the initial transform. |
4197 deviceScaleFactor = 2.25; | 4183 deviceScaleFactor = 2.25; |
4198 pageScaleFactor = 1.25; | 4184 pageScaleFactor = 1.25; |
4199 | 4185 |
4200 // FIXME: Remove this when pageScaleFactor is applied in the compositor. | 4186 // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
4201 pageScaleMatrix = identityMatrix; | 4187 pageScaleMatrix = identityMatrix; |
4202 pageScaleMatrix.scale(pageScaleFactor); | 4188 pageScaleMatrix.Scale(pageScaleFactor, pageScaleFactor); |
4203 parent->setSublayerTransform(pageScaleMatrix); | 4189 parent->setSublayerTransform(pageScaleMatrix); |
4204 | 4190 |
4205 renderSurfaceLayerList.clear(); | 4191 renderSurfaceLayerList.clear(); |
4206 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4192 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4207 | 4193 |
4208 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); | 4194 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); |
4209 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childScale); | 4195 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childScale); |
4210 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childEmpty); | 4196 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, childEmpty); |
4211 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); | 4197 EXPECT_CONTENTS_SCALE_EQ(1, childNoScale); |
4212 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * fixedRasterSc
ale, childNoAutoScale); | 4198 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * fixedRasterSc
ale, childNoAutoScale); |
4213 } | 4199 } |
4214 | 4200 |
4215 TEST(LayerTreeHostCommonTest, verifySmallContentsScale) | 4201 TEST(LayerTreeHostCommonTest, verifySmallContentsScale) |
4216 { | 4202 { |
4217 MockContentLayerClient delegate; | 4203 MockContentLayerClient delegate; |
4218 WebTransformationMatrix identityMatrix; | 4204 gfx::Transform identityMatrix; |
4219 | 4205 |
4220 WebTransformationMatrix parentScaleMatrix; | 4206 gfx::Transform parentScaleMatrix; |
4221 const double initialParentScale = 1.75; | 4207 const double initialParentScale = 1.75; |
4222 parentScaleMatrix.scale(initialParentScale); | 4208 parentScaleMatrix.Scale(initialParentScale, initialParentScale); |
4223 | 4209 |
4224 WebTransformationMatrix childScaleMatrix; | 4210 gfx::Transform childScaleMatrix; |
4225 const double initialChildScale = 0.25; | 4211 const double initialChildScale = 0.25; |
4226 childScaleMatrix.scale(initialChildScale); | 4212 childScaleMatrix.Scale(initialChildScale, initialChildScale); |
4227 | 4213 |
4228 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4214 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4229 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); | 4215 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); |
4230 | 4216 |
4231 scoped_refptr<ContentLayer> childScale = createDrawableContentLayer(&delegat
e); | 4217 scoped_refptr<ContentLayer> childScale = createDrawableContentLayer(&delegat
e); |
4232 setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 4218 setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
4233 | 4219 |
4234 // FIXME: Remove this when pageScaleFactor is applied in the compositor. | 4220 // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
4235 // Page scale should not apply to the parent. | 4221 // Page scale should not apply to the parent. |
4236 parent->setBoundsContainPageScale(true); | 4222 parent->setBoundsContainPageScale(true); |
4237 | 4223 |
4238 parent->addChild(childScale); | 4224 parent->addChild(childScale); |
4239 | 4225 |
4240 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 4226 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
4241 int dummyMaxTextureSize = 512; | 4227 int dummyMaxTextureSize = 512; |
4242 | 4228 |
4243 double deviceScaleFactor = 2.5; | 4229 double deviceScaleFactor = 2.5; |
4244 double pageScaleFactor = 0.01; | 4230 double pageScaleFactor = 0.01; |
4245 | 4231 |
4246 // FIXME: Remove this when pageScaleFactor is applied in the compositor. | 4232 // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
4247 WebTransformationMatrix pageScaleMatrix; | 4233 gfx::Transform pageScaleMatrix; |
4248 pageScaleMatrix.scale(pageScaleFactor); | 4234 pageScaleMatrix.Scale(pageScaleFactor, pageScaleFactor); |
4249 parent->setSublayerTransform(pageScaleMatrix); | 4235 parent->setSublayerTransform(pageScaleMatrix); |
4250 | 4236 |
4251 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4237 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4252 | 4238 |
4253 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); | 4239 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); |
4254 // The child's scale is < 1, so we should not save and use that scale factor
. | 4240 // The child's scale is < 1, so we should not save and use that scale factor
. |
4255 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * 1, childScale
); | 4241 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * 1, childScale
); |
4256 | 4242 |
4257 // When chilld's total scale becomes >= 1, we should save and use that scale
factor. | 4243 // When chilld's total scale becomes >= 1, we should save and use that scale
factor. |
4258 childScaleMatrix.makeIdentity(); | 4244 childScaleMatrix.MakeIdentity(); |
4259 const double finalChildScale = 0.75; | 4245 const double finalChildScale = 0.75; |
4260 childScaleMatrix.scale(finalChildScale); | 4246 childScaleMatrix.Scale(finalChildScale, finalChildScale); |
4261 childScale->setTransform(childScaleMatrix); | 4247 childScale->setTransform(childScaleMatrix); |
4262 | 4248 |
4263 renderSurfaceLayerList.clear(); | 4249 renderSurfaceLayerList.clear(); |
4264 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4250 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4265 | 4251 |
4266 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); | 4252 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); |
4267 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * finalChildScale, childScale); | 4253 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * finalChildScale, childScale); |
4268 } | 4254 } |
4269 | 4255 |
4270 TEST(LayerTreeHostCommonTest, verifyContentsScaleForSurfaces) | 4256 TEST(LayerTreeHostCommonTest, verifyContentsScaleForSurfaces) |
4271 { | 4257 { |
4272 MockContentLayerClient delegate; | 4258 MockContentLayerClient delegate; |
4273 WebTransformationMatrix identityMatrix; | 4259 gfx::Transform identityMatrix; |
4274 | 4260 |
4275 WebTransformationMatrix parentScaleMatrix; | 4261 gfx::Transform parentScaleMatrix; |
4276 const double initialParentScale = 2; | 4262 const double initialParentScale = 2; |
4277 parentScaleMatrix.scale(initialParentScale); | 4263 parentScaleMatrix.Scale(initialParentScale, initialParentScale); |
4278 | 4264 |
4279 WebTransformationMatrix childScaleMatrix; | 4265 gfx::Transform childScaleMatrix; |
4280 const double initialChildScale = 3; | 4266 const double initialChildScale = 3; |
4281 childScaleMatrix.scale(initialChildScale); | 4267 childScaleMatrix.Scale(initialChildScale, initialChildScale); |
4282 | 4268 |
4283 float fixedRasterScale = 4; | 4269 float fixedRasterScale = 4; |
4284 | 4270 |
4285 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4271 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4286 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); | 4272 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); |
4287 | 4273 |
4288 scoped_refptr<ContentLayer> surfaceScale = createDrawableContentLayer(&deleg
ate); | 4274 scoped_refptr<ContentLayer> surfaceScale = createDrawableContentLayer(&deleg
ate); |
4289 setLayerPropertiesForTesting(surfaceScale.get(), childScaleMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 4275 setLayerPropertiesForTesting(surfaceScale.get(), childScaleMatrix, identityM
atrix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
4290 | 4276 |
4291 scoped_refptr<ContentLayer> surfaceScaleChildScale = createDrawableContentLa
yer(&delegate); | 4277 scoped_refptr<ContentLayer> surfaceScaleChildScale = createDrawableContentLa
yer(&delegate); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4334 surfaceNoAutoScale->addChild(surfaceNoAutoScaleChildScale); | 4320 surfaceNoAutoScale->addChild(surfaceNoAutoScaleChildScale); |
4335 surfaceNoAutoScale->addChild(surfaceNoAutoScaleChildNoScale); | 4321 surfaceNoAutoScale->addChild(surfaceNoAutoScaleChildNoScale); |
4336 | 4322 |
4337 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 4323 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
4338 int dummyMaxTextureSize = 512; | 4324 int dummyMaxTextureSize = 512; |
4339 | 4325 |
4340 double deviceScaleFactor = 5; | 4326 double deviceScaleFactor = 5; |
4341 double pageScaleFactor = 7; | 4327 double pageScaleFactor = 7; |
4342 | 4328 |
4343 // FIXME: Remove this when pageScaleFactor is applied in the compositor. | 4329 // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
4344 WebTransformationMatrix pageScaleMatrix; | 4330 gfx::Transform pageScaleMatrix; |
4345 pageScaleMatrix.scale(pageScaleFactor); | 4331 pageScaleMatrix.Scale(pageScaleFactor, pageScaleFactor); |
4346 parent->setSublayerTransform(pageScaleMatrix); | 4332 parent->setSublayerTransform(pageScaleMatrix); |
4347 | 4333 |
4348 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); | 4334 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList
); |
4349 | 4335 |
4350 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); | 4336 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * initialParentScale, parent); |
4351 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, surfaceScale); | 4337 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale, surfaceScale); |
4352 EXPECT_CONTENTS_SCALE_EQ(1, surfaceNoScale); | 4338 EXPECT_CONTENTS_SCALE_EQ(1, surfaceNoScale); |
4353 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * fixedRasterSc
ale, surfaceNoAutoScale); | 4339 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * fixedRasterSc
ale, surfaceNoAutoScale); |
4354 | 4340 |
4355 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale * initialChildScale, surfaceScaleChildScale); | 4341 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale * initialChildScale, surfaceScaleChildScale); |
4356 EXPECT_CONTENTS_SCALE_EQ(1, surfaceScaleChildNoScale); | 4342 EXPECT_CONTENTS_SCALE_EQ(1, surfaceScaleChildNoScale); |
4357 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale * initialChildScale, surfaceNoScaleChildScale); | 4343 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale * initialChildScale, surfaceNoScaleChildScale); |
4358 EXPECT_CONTENTS_SCALE_EQ(1, surfaceNoScaleChildNoScale); | 4344 EXPECT_CONTENTS_SCALE_EQ(1, surfaceNoScaleChildNoScale); |
4359 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale * initialChildScale, surfaceNoAutoScaleChildScale); | 4345 EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor * initialParent
Scale * initialChildScale * initialChildScale, surfaceNoAutoScaleChildScale); |
4360 EXPECT_CONTENTS_SCALE_EQ(1, surfaceNoAutoScaleChildNoScale); | 4346 EXPECT_CONTENTS_SCALE_EQ(1, surfaceNoAutoScaleChildNoScale); |
4361 | 4347 |
4362 // The parent is scaled up and shouldn't need to scale during draw. | 4348 // The parent is scaled up and shouldn't need to scale during draw. |
4363 EXPECT_FLOAT_EQ(1, parent->drawTransform().m11()); | 4349 EXPECT_FLOAT_EQ(1, parent->drawTransform().matrix().getDouble(0, 0)); |
4364 EXPECT_FLOAT_EQ(1, parent->drawTransform().m22()); | 4350 EXPECT_FLOAT_EQ(1, parent->drawTransform().matrix().getDouble(1, 1)); |
4365 | 4351 |
4366 // RenderSurfaces should always be 1:1 with their target. | 4352 // RenderSurfaces should always be 1:1 with their target. |
4367 EXPECT_FLOAT_EQ(1, surfaceScale->renderSurface()->drawTransform().m11()); | 4353 EXPECT_FLOAT_EQ(1, surfaceScale->renderSurface()->drawTransform().matrix().g
etDouble(0, 0)); |
4368 EXPECT_FLOAT_EQ(1, surfaceScale->renderSurface()->drawTransform().m22()); | 4354 EXPECT_FLOAT_EQ(1, surfaceScale->renderSurface()->drawTransform().matrix().g
etDouble(1, 1)); |
4369 | 4355 |
4370 // The surfaceScale can apply contents scale so the layer shouldn't need to
scale during draw. | 4356 // The surfaceScale can apply contents scale so the layer shouldn't need to
scale during draw. |
4371 EXPECT_FLOAT_EQ(1, surfaceScale->drawTransform().m11()); | 4357 EXPECT_FLOAT_EQ(1, surfaceScale->drawTransform().matrix().getDouble(0, 0)); |
4372 EXPECT_FLOAT_EQ(1, surfaceScale->drawTransform().m22()); | 4358 EXPECT_FLOAT_EQ(1, surfaceScale->drawTransform().matrix().getDouble(1, 1)); |
4373 | 4359 |
4374 // The surfaceScaleChildScale can apply contents scale so it shouldn't need
to scale during draw. | 4360 // The surfaceScaleChildScale can apply contents scale so it shouldn't need
to scale during draw. |
4375 EXPECT_FLOAT_EQ(1, surfaceScaleChildScale->drawTransform().m11()); | 4361 EXPECT_FLOAT_EQ(1, surfaceScaleChildScale->drawTransform().matrix().getDoubl
e(0, 0)); |
4376 EXPECT_FLOAT_EQ(1, surfaceScaleChildScale->drawTransform().m22()); | 4362 EXPECT_FLOAT_EQ(1, surfaceScaleChildScale->drawTransform().matrix().getDoubl
e(1, 1)); |
4377 | 4363 |
4378 // The surfaceScaleChildNoScale can not apply contents scale, so it needs to
be scaled during draw. | 4364 // The surfaceScaleChildNoScale can not apply contents scale, so it needs to
be scaled during draw. |
4379 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceScaleChildNoScale->drawTransform().
m11()); | 4365 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceScaleChildNoScale->drawTransform().
matrix().getDouble(0, 0)); |
4380 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceScaleChildNoScale->drawTransform().
m22()); | 4366 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceScaleChildNoScale->drawTransform().
matrix().getDouble(1, 1)); |
4381 | 4367 |
4382 // RenderSurfaces should always be 1:1 with their target. | 4368 // RenderSurfaces should always be 1:1 with their target. |
4383 EXPECT_FLOAT_EQ(1, surfaceNoScale->renderSurface()->drawTransform().m11()); | 4369 EXPECT_FLOAT_EQ(1, surfaceNoScale->renderSurface()->drawTransform().matrix()
.getDouble(0, 0)); |
4384 EXPECT_FLOAT_EQ(1, surfaceNoScale->renderSurface()->drawTransform().m22()); | 4370 EXPECT_FLOAT_EQ(1, surfaceNoScale->renderSurface()->drawTransform().matrix()
.getDouble(1, 1)); |
4385 | 4371 |
4386 // The surfaceNoScale layer can not apply contents scale, so it needs to be
scaled during draw. | 4372 // The surfaceNoScale layer can not apply contents scale, so it needs to be
scaled during draw. |
4387 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, surfaceNoScale->drawTransform().m11()); | 4373 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, surfaceNoScale->drawTransform().matrix().getDouble(0, 0)); |
4388 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, surfaceNoScale->drawTransform().m22()); | 4374 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale, surfaceNoScale->drawTransform().matrix().getDouble(1, 1)); |
4389 | 4375 |
4390 // The surfaceScaleChildScale can apply contents scale so it shouldn't need
to scale during draw. | 4376 // The surfaceScaleChildScale can apply contents scale so it shouldn't need
to scale during draw. |
4391 EXPECT_FLOAT_EQ(1, surfaceNoScaleChildScale->drawTransform().m11()); | 4377 EXPECT_FLOAT_EQ(1, surfaceNoScaleChildScale->drawTransform().matrix().getDou
ble(0, 0)); |
4392 EXPECT_FLOAT_EQ(1, surfaceNoScaleChildScale->drawTransform().m22()); | 4378 EXPECT_FLOAT_EQ(1, surfaceNoScaleChildScale->drawTransform().matrix().getDou
ble(1, 1)); |
4393 | 4379 |
4394 // The surfaceScaleChildNoScale can not apply contents scale, so it needs to
be scaled during draw. | 4380 // The surfaceScaleChildNoScale can not apply contents scale, so it needs to
be scaled during draw. |
4395 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoScaleChildNoScale->drawTransform(
).m11()); | 4381 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoScaleChildNoScale->drawTransform(
).matrix().getDouble(0, 0)); |
4396 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoScaleChildNoScale->drawTransform(
).m22()); | 4382 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoScaleChildNoScale->drawTransform(
).matrix().getDouble(1, 1)); |
4397 | 4383 |
4398 // RenderSurfaces should always be 1:1 with their target. | 4384 // RenderSurfaces should always be 1:1 with their target. |
4399 EXPECT_FLOAT_EQ(1, surfaceNoAutoScale->renderSurface()->drawTransform().m11(
)); | 4385 EXPECT_FLOAT_EQ(1, surfaceNoAutoScale->renderSurface()->drawTransform().matr
ix().getDouble(0, 0)); |
4400 EXPECT_FLOAT_EQ(1, surfaceNoAutoScale->renderSurface()->drawTransform().m22(
)); | 4386 EXPECT_FLOAT_EQ(1, surfaceNoAutoScale->renderSurface()->drawTransform().matr
ix().getDouble(1, 1)); |
4401 | 4387 |
4402 // The surfaceNoAutoScale layer has a fixed contents scale, so it needs to b
e scaled during draw. | 4388 // The surfaceNoAutoScale layer has a fixed contents scale, so it needs to b
e scaled during draw. |
4403 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale / (deviceScaleFactor * pageScaleFactor * fixedRasterScale), sur
faceNoAutoScale->drawTransform().m11()); | 4389 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale / (deviceScaleFactor * pageScaleFactor * fixedRasterScale), sur
faceNoAutoScale->drawTransform().matrix().getDouble(0, 0)); |
4404 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale / (deviceScaleFactor * pageScaleFactor * fixedRasterScale), sur
faceNoAutoScale->drawTransform().m22()); | 4390 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale / (deviceScaleFactor * pageScaleFactor * fixedRasterScale), sur
faceNoAutoScale->drawTransform().matrix().getDouble(1, 1)); |
4405 | 4391 |
4406 // The surfaceScaleChildScale can apply contents scale so it shouldn't need
to scale during draw. | 4392 // The surfaceScaleChildScale can apply contents scale so it shouldn't need
to scale during draw. |
4407 EXPECT_FLOAT_EQ(1, surfaceNoAutoScaleChildScale->drawTransform().m11()); | 4393 EXPECT_FLOAT_EQ(1, surfaceNoAutoScaleChildScale->drawTransform().matrix().ge
tDouble(0, 0)); |
4408 EXPECT_FLOAT_EQ(1, surfaceNoAutoScaleChildScale->drawTransform().m22()); | 4394 EXPECT_FLOAT_EQ(1, surfaceNoAutoScaleChildScale->drawTransform().matrix().ge
tDouble(1, 1)); |
4409 | 4395 |
4410 // The surfaceScaleChildNoScale can not apply contents scale, so it needs to
be scaled during draw. | 4396 // The surfaceScaleChildNoScale can not apply contents scale, so it needs to
be scaled during draw. |
4411 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoAutoScaleChildNoScale->drawTransf
orm().m11()); | 4397 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoAutoScaleChildNoScale->drawTransf
orm().matrix().getDouble(0, 0)); |
4412 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoAutoScaleChildNoScale->drawTransf
orm().m22()); | 4398 EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * i
nitialChildScale * initialChildScale, surfaceNoAutoScaleChildNoScale->drawTransf
orm().matrix().getDouble(1, 1)); |
4413 } | 4399 } |
4414 | 4400 |
4415 TEST(LayerTreeHostCommonTest, verifyContentsScaleForAnimatingLayer) | 4401 TEST(LayerTreeHostCommonTest, verifyContentsScaleForAnimatingLayer) |
4416 { | 4402 { |
4417 MockContentLayerClient delegate; | 4403 MockContentLayerClient delegate; |
4418 WebTransformationMatrix identityMatrix; | 4404 gfx::Transform identityMatrix; |
4419 | 4405 |
4420 WebTransformationMatrix parentScaleMatrix; | 4406 gfx::Transform parentScaleMatrix; |
4421 const double initialParentScale = 1.75; | 4407 const double initialParentScale = 1.75; |
4422 parentScaleMatrix.scale(initialParentScale); | 4408 parentScaleMatrix.Scale(initialParentScale, initialParentScale); |
4423 | 4409 |
4424 WebTransformationMatrix childScaleMatrix; | 4410 gfx::Transform childScaleMatrix; |
4425 const double initialChildScale = 1.25; | 4411 const double initialChildScale = 1.25; |
4426 childScaleMatrix.scale(initialChildScale); | 4412 childScaleMatrix.Scale(initialChildScale, initialChildScale); |
4427 | 4413 |
4428 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4414 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4429 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); | 4415 setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true); |
4430 | 4416 |
4431 scoped_refptr<ContentLayer> childScale = createDrawableContentLayer(&delegat
e); | 4417 scoped_refptr<ContentLayer> childScale = createDrawableContentLayer(&delegat
e); |
4432 setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 4418 setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMat
rix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
4433 | 4419 |
4434 parent->addChild(childScale); | 4420 parent->addChild(childScale); |
4435 | 4421 |
4436 // Now put an animating transform on child. | 4422 // Now put an animating transform on child. |
(...skipping 15 matching lines...) Expand all Loading... |
4452 | 4438 |
4453 EXPECT_CONTENTS_SCALE_EQ(initialParentScale, parent); | 4439 EXPECT_CONTENTS_SCALE_EQ(initialParentScale, parent); |
4454 // The layers with animating transforms should not compute a contentsScale o
ther than 1 until they finish animating. | 4440 // The layers with animating transforms should not compute a contentsScale o
ther than 1 until they finish animating. |
4455 EXPECT_CONTENTS_SCALE_EQ(initialParentScale * initialChildScale, childScale)
; | 4441 EXPECT_CONTENTS_SCALE_EQ(initialParentScale * initialChildScale, childScale)
; |
4456 } | 4442 } |
4457 | 4443 |
4458 | 4444 |
4459 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPI) | 4445 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPI) |
4460 { | 4446 { |
4461 MockContentLayerClient delegate; | 4447 MockContentLayerClient delegate; |
4462 WebTransformationMatrix identityMatrix; | 4448 gfx::Transform identityMatrix; |
4463 | 4449 |
4464 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4450 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4465 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(30, 30), true); | 4451 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(30, 30), true); |
4466 | 4452 |
4467 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); | 4453 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); |
4468 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 4454 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
4469 | 4455 |
4470 WebTransformationMatrix replicaTransform; | 4456 gfx::Transform replicaTransform; |
4471 replicaTransform.scaleNonUniform(1, -1); | 4457 replicaTransform.Scale(1, -1); |
4472 scoped_refptr<ContentLayer> replica = createDrawableContentLayer(&delegate); | 4458 scoped_refptr<ContentLayer> replica = createDrawableContentLayer(&delegate); |
4473 setLayerPropertiesForTesting(replica.get(), replicaTransform, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); | 4459 setLayerPropertiesForTesting(replica.get(), replicaTransform, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true); |
4474 | 4460 |
4475 // This layer should end up in the same surface as child, with the same draw | 4461 // This layer should end up in the same surface as child, with the same draw |
4476 // and screen space transforms. | 4462 // and screen space transforms. |
4477 scoped_refptr<ContentLayer> duplicateChildNonOwner = createDrawableContentLa
yer(&delegate); | 4463 scoped_refptr<ContentLayer> duplicateChildNonOwner = createDrawableContentLa
yer(&delegate); |
4478 setLayerPropertiesForTesting(duplicateChildNonOwner.get(), identityMatrix, i
dentityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 10), true); | 4464 setLayerPropertiesForTesting(duplicateChildNonOwner.get(), identityMatrix, i
dentityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(10, 10), true); |
4479 | 4465 |
4480 parent->addChild(child); | 4466 parent->addChild(child); |
4481 child->addChild(duplicateChildNonOwner); | 4467 child->addChild(duplicateChildNonOwner); |
4482 child->setReplicaLayer(replica.get()); | 4468 child->setReplicaLayer(replica.get()); |
4483 | 4469 |
4484 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 4470 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
4485 int dummyMaxTextureSize = 512; | 4471 int dummyMaxTextureSize = 512; |
4486 | 4472 |
4487 const double deviceScaleFactor = 1.5; | 4473 const double deviceScaleFactor = 1.5; |
4488 parent->setContentsScale(deviceScaleFactor); | 4474 parent->setContentsScale(deviceScaleFactor); |
4489 child->setContentsScale(deviceScaleFactor); | 4475 child->setContentsScale(deviceScaleFactor); |
4490 duplicateChildNonOwner->setContentsScale(deviceScaleFactor); | 4476 duplicateChildNonOwner->setContentsScale(deviceScaleFactor); |
4491 replica->setContentsScale(deviceScaleFactor); | 4477 replica->setContentsScale(deviceScaleFactor); |
4492 | 4478 |
4493 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, 1, dummyMaxTextureSize, renderSurfaceLayerList); | 4479 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
4494 | 4480 |
4495 // We should have two render surfaces. The root's render surface and child's | 4481 // We should have two render surfaces. The root's render surface and child's |
4496 // render surface (it needs one because it has a replica layer). | 4482 // render surface (it needs one because it has a replica layer). |
4497 EXPECT_EQ(2u, renderSurfaceLayerList.size()); | 4483 EXPECT_EQ(2u, renderSurfaceLayerList.size()); |
4498 | 4484 |
4499 WebTransformationMatrix expectedParentTransform; | 4485 gfx::Transform expectedParentTransform; |
4500 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->screenSpace
Transform()); | 4486 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->screenSpace
Transform()); |
4501 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->drawTransfo
rm()); | 4487 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentTransform, parent->drawTransfo
rm()); |
4502 | 4488 |
4503 WebTransformationMatrix expectedDrawTransform; | 4489 gfx::Transform expectedDrawTransform; |
4504 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedDrawTransform, child->drawTransform(
)); | 4490 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedDrawTransform, child->drawTransform(
)); |
4505 | 4491 |
4506 WebTransformationMatrix expectedScreenSpaceTransform; | 4492 gfx::Transform expectedScreenSpaceTransform; |
4507 expectedScreenSpaceTransform.translate(deviceScaleFactor * child->position()
.x(), deviceScaleFactor * child->position().y()); | 4493 expectedScreenSpaceTransform.Translate(deviceScaleFactor * child->position()
.x(), deviceScaleFactor * child->position().y()); |
4508 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedScreenSpaceTransform, child->screenS
paceTransform()); | 4494 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedScreenSpaceTransform, child->screenS
paceTransform()); |
4509 | 4495 |
4510 WebTransformationMatrix expectedDuplicateChildDrawTransform = child->drawTra
nsform(); | 4496 gfx::Transform expectedDuplicateChildDrawTransform = child->drawTransform(); |
4511 EXPECT_TRANSFORMATION_MATRIX_EQ(child->drawTransform(), duplicateChildNonOwn
er->drawTransform()); | 4497 EXPECT_TRANSFORMATION_MATRIX_EQ(child->drawTransform(), duplicateChildNonOwn
er->drawTransform()); |
4512 EXPECT_TRANSFORMATION_MATRIX_EQ(child->screenSpaceTransform(), duplicateChil
dNonOwner->screenSpaceTransform()); | 4498 EXPECT_TRANSFORMATION_MATRIX_EQ(child->screenSpaceTransform(), duplicateChil
dNonOwner->screenSpaceTransform()); |
4513 EXPECT_RECT_EQ(child->drawableContentRect(), duplicateChildNonOwner->drawabl
eContentRect()); | 4499 EXPECT_RECT_EQ(child->drawableContentRect(), duplicateChildNonOwner->drawabl
eContentRect()); |
4514 EXPECT_EQ(child->contentBounds(), duplicateChildNonOwner->contentBounds()); | 4500 EXPECT_EQ(child->contentBounds(), duplicateChildNonOwner->contentBounds()); |
4515 | 4501 |
4516 WebTransformationMatrix expectedRenderSurfaceDrawTransform; | 4502 gfx::Transform expectedRenderSurfaceDrawTransform; |
4517 expectedRenderSurfaceDrawTransform.translate(deviceScaleFactor * child->posi
tion().x(), deviceScaleFactor * child->position().y()); | 4503 expectedRenderSurfaceDrawTransform.Translate(deviceScaleFactor * child->posi
tion().x(), deviceScaleFactor * child->position().y()); |
4518 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedRenderSurfaceDrawTransform, child->r
enderSurface()->drawTransform()); | 4504 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedRenderSurfaceDrawTransform, child->r
enderSurface()->drawTransform()); |
4519 | 4505 |
4520 WebTransformationMatrix expectedSurfaceDrawTransform; | 4506 gfx::Transform expectedSurfaceDrawTransform; |
4521 expectedSurfaceDrawTransform.translate(deviceScaleFactor * 2, deviceScaleFac
tor * 2); | 4507 expectedSurfaceDrawTransform.Translate(deviceScaleFactor * 2, deviceScaleFac
tor * 2); |
4522 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, child->renderS
urface()->drawTransform()); | 4508 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceDrawTransform, child->renderS
urface()->drawTransform()); |
4523 | 4509 |
4524 WebTransformationMatrix expectedSurfaceScreenSpaceTransform; | 4510 gfx::Transform expectedSurfaceScreenSpaceTransform; |
4525 expectedSurfaceScreenSpaceTransform.translate(deviceScaleFactor * 2, deviceS
caleFactor * 2); | 4511 expectedSurfaceScreenSpaceTransform.Translate(deviceScaleFactor * 2, deviceS
caleFactor * 2); |
4526 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceScreenSpaceTransform, child->
renderSurface()->screenSpaceTransform()); | 4512 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedSurfaceScreenSpaceTransform, child->
renderSurface()->screenSpaceTransform()); |
4527 | 4513 |
4528 WebTransformationMatrix expectedReplicaDrawTransform; | 4514 gfx::Transform expectedReplicaDrawTransform; |
4529 expectedReplicaDrawTransform.setM22(-1); | 4515 expectedReplicaDrawTransform.matrix().setDouble(1, 1, -1); |
4530 expectedReplicaDrawTransform.setM41(6); | 4516 expectedReplicaDrawTransform.matrix().setDouble(0, 3, 6); |
4531 expectedReplicaDrawTransform.setM42(6); | 4517 expectedReplicaDrawTransform.matrix().setDouble(1, 3, 6); |
4532 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaDrawTransform, child->renderS
urface()->replicaDrawTransform()); | 4518 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaDrawTransform, child->renderS
urface()->replicaDrawTransform()); |
4533 | 4519 |
4534 WebTransformationMatrix expectedReplicaScreenSpaceTransform; | 4520 gfx::Transform expectedReplicaScreenSpaceTransform; |
4535 expectedReplicaScreenSpaceTransform.setM22(-1); | 4521 expectedReplicaScreenSpaceTransform.matrix().setDouble(1, 1, -1); |
4536 expectedReplicaScreenSpaceTransform.setM41(6); | 4522 expectedReplicaScreenSpaceTransform.matrix().setDouble(0, 3, 6); |
4537 expectedReplicaScreenSpaceTransform.setM42(6); | 4523 expectedReplicaScreenSpaceTransform.matrix().setDouble(1, 3, 6); |
4538 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaScreenSpaceTransform, child->
renderSurface()->replicaScreenSpaceTransform()); | 4524 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaScreenSpaceTransform, child->
renderSurface()->replicaScreenSpaceTransform()); |
4539 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaScreenSpaceTransform, child->
renderSurface()->replicaScreenSpaceTransform()); | 4525 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaScreenSpaceTransform, child->
renderSurface()->replicaScreenSpaceTransform()); |
4540 } | 4526 } |
4541 | 4527 |
4542 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPIAccurateScal
eZeroPosition) | 4528 TEST(LayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPIAccurateScal
eZeroPosition) |
4543 { | 4529 { |
4544 MockContentLayerClient delegate; | 4530 MockContentLayerClient delegate; |
4545 WebTransformationMatrix identityMatrix; | 4531 gfx::Transform identityMatrix; |
4546 | 4532 |
4547 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); | 4533 scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate); |
4548 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(33, 31), true); | 4534 setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, g
fx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(33, 31), true); |
4549 | 4535 |
4550 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); | 4536 scoped_refptr<ContentLayer> child = createDrawableContentLayer(&delegate); |
4551 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 11), true); | 4537 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, gf
x::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 11), true); |
4552 | 4538 |
4553 WebTransformationMatrix replicaTransform; | 4539 gfx::Transform replicaTransform; |
4554 replicaTransform.scaleNonUniform(1, -1); | 4540 replicaTransform.Scale(1, -1); |
4555 scoped_refptr<ContentLayer> replica = createDrawableContentLayer(&delegate); | 4541 scoped_refptr<ContentLayer> replica = createDrawableContentLayer(&delegate); |
4556 setLayerPropertiesForTesting(replica.get(), replicaTransform, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 11), true); | 4542 setLayerPropertiesForTesting(replica.get(), replicaTransform, identityMatrix
, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 11), true); |
4557 | 4543 |
4558 // This layer should end up in the same surface as child, with the same draw | 4544 // This layer should end up in the same surface as child, with the same draw |
4559 // and screen space transforms. | 4545 // and screen space transforms. |
4560 scoped_refptr<ContentLayer> duplicateChildNonOwner = createDrawableContentLa
yer(&delegate); | 4546 scoped_refptr<ContentLayer> duplicateChildNonOwner = createDrawableContentLa
yer(&delegate); |
4561 setLayerPropertiesForTesting(duplicateChildNonOwner.get(), identityMatrix, i
dentityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 11), true); | 4547 setLayerPropertiesForTesting(duplicateChildNonOwner.get(), identityMatrix, i
dentityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(13, 11), true); |
4562 | 4548 |
4563 parent->addChild(child); | 4549 parent->addChild(child); |
4564 child->addChild(duplicateChildNonOwner); | 4550 child->addChild(duplicateChildNonOwner); |
4565 child->setReplicaLayer(replica.get()); | 4551 child->setReplicaLayer(replica.get()); |
4566 | 4552 |
4567 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; | 4553 std::vector<scoped_refptr<Layer> > renderSurfaceLayerList; |
4568 int dummyMaxTextureSize = 512; | 4554 int dummyMaxTextureSize = 512; |
4569 | 4555 |
4570 const float deviceScaleFactor = 1.7f; | 4556 const float deviceScaleFactor = 1.7f; |
4571 parent->setContentsScale(deviceScaleFactor); | 4557 parent->setContentsScale(deviceScaleFactor); |
4572 child->setContentsScale(deviceScaleFactor); | 4558 child->setContentsScale(deviceScaleFactor); |
4573 duplicateChildNonOwner->setContentsScale(deviceScaleFactor); | 4559 duplicateChildNonOwner->setContentsScale(deviceScaleFactor); |
4574 replica->setContentsScale(deviceScaleFactor); | 4560 replica->setContentsScale(deviceScaleFactor); |
4575 | 4561 |
4576 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, 1, dummyMaxTextureSize, renderSurfaceLayerList); | 4562 LayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(),
deviceScaleFactor, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
4577 | 4563 |
4578 // We should have two render surfaces. The root's render surface and child's | 4564 // We should have two render surfaces. The root's render surface and child's |
4579 // render surface (it needs one because it has a replica layer). | 4565 // render surface (it needs one because it has a replica layer). |
4580 EXPECT_EQ(2u, renderSurfaceLayerList.size()); | 4566 EXPECT_EQ(2u, renderSurfaceLayerList.size()); |
4581 | 4567 |
4582 WebTransformationMatrix identityTransform; | 4568 gfx::Transform identityTransform; |
4583 | 4569 |
4584 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, parent->screenSpaceTransf
orm()); | 4570 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, parent->screenSpaceTransf
orm()); |
4585 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, parent->drawTransform()); | 4571 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, parent->drawTransform()); |
4586 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->drawTransform()); | 4572 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->drawTransform()); |
4587 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->screenSpaceTransfo
rm()); | 4573 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->screenSpaceTransfo
rm()); |
4588 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, duplicateChildNonOwner->d
rawTransform()); | 4574 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, duplicateChildNonOwner->d
rawTransform()); |
4589 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, duplicateChildNonOwner->s
creenSpaceTransform()); | 4575 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, duplicateChildNonOwner->s
creenSpaceTransform()); |
4590 EXPECT_RECT_EQ(child->drawableContentRect(), duplicateChildNonOwner->drawabl
eContentRect()); | 4576 EXPECT_RECT_EQ(child->drawableContentRect(), duplicateChildNonOwner->drawabl
eContentRect()); |
4591 EXPECT_EQ(child->contentBounds(), duplicateChildNonOwner->contentBounds()); | 4577 EXPECT_EQ(child->contentBounds(), duplicateChildNonOwner->contentBounds()); |
4592 | 4578 |
4593 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->renderSurface()->d
rawTransform()); | 4579 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->renderSurface()->d
rawTransform()); |
4594 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->renderSurface()->d
rawTransform()); | 4580 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->renderSurface()->d
rawTransform()); |
4595 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->renderSurface()->s
creenSpaceTransform()); | 4581 EXPECT_TRANSFORMATION_MATRIX_EQ(identityTransform, child->renderSurface()->s
creenSpaceTransform()); |
4596 | 4582 |
4597 WebTransformationMatrix expectedReplicaDrawTransform; | 4583 gfx::Transform expectedReplicaDrawTransform; |
4598 expectedReplicaDrawTransform.setM22(-1); | 4584 expectedReplicaDrawTransform.matrix().setDouble(1, 1, -1); |
4599 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaDrawTransform, child->renderS
urface()->replicaDrawTransform()); | 4585 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaDrawTransform, child->renderS
urface()->replicaDrawTransform()); |
4600 | 4586 |
4601 WebTransformationMatrix expectedReplicaScreenSpaceTransform; | 4587 gfx::Transform expectedReplicaScreenSpaceTransform; |
4602 expectedReplicaScreenSpaceTransform.setM22(-1); | 4588 expectedReplicaScreenSpaceTransform.matrix().setDouble(1, 1, -1); |
4603 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaScreenSpaceTransform, child->
renderSurface()->replicaScreenSpaceTransform()); | 4589 EXPECT_TRANSFORMATION_MATRIX_EQ(expectedReplicaScreenSpaceTransform, child->
renderSurface()->replicaScreenSpaceTransform()); |
4604 } | 4590 } |
4605 | 4591 |
4606 TEST(LayerTreeHostCommonTest, verifySubtreeSearch) | 4592 TEST(LayerTreeHostCommonTest, verifySubtreeSearch) |
4607 { | 4593 { |
4608 scoped_refptr<Layer> root = Layer::create(); | 4594 scoped_refptr<Layer> root = Layer::create(); |
4609 scoped_refptr<Layer> child = Layer::create(); | 4595 scoped_refptr<Layer> child = Layer::create(); |
4610 scoped_refptr<Layer> grandChild = Layer::create(); | 4596 scoped_refptr<Layer> grandChild = Layer::create(); |
4611 scoped_refptr<Layer> maskLayer = Layer::create(); | 4597 scoped_refptr<Layer> maskLayer = Layer::create(); |
4612 scoped_refptr<Layer> replicaLayer = Layer::create(); | 4598 scoped_refptr<Layer> replicaLayer = Layer::create(); |
4613 | 4599 |
4614 grandChild->setReplicaLayer(replicaLayer.get()); | 4600 grandChild->setReplicaLayer(replicaLayer.get()); |
4615 child->addChild(grandChild.get()); | 4601 child->addChild(grandChild.get()); |
4616 child->setMaskLayer(maskLayer.get()); | 4602 child->setMaskLayer(maskLayer.get()); |
4617 root->addChild(child.get()); | 4603 root->addChild(child.get()); |
4618 | 4604 |
4619 int nonexistentId = -1; | 4605 int nonexistentId = -1; |
4620 EXPECT_EQ(root, LayerTreeHostCommon::findLayerInSubtree(root.get(), root->id
())); | 4606 EXPECT_EQ(root, LayerTreeHostCommon::findLayerInSubtree(root.get(), root->id
())); |
4621 EXPECT_EQ(child, LayerTreeHostCommon::findLayerInSubtree(root.get(), child->
id())); | 4607 EXPECT_EQ(child, LayerTreeHostCommon::findLayerInSubtree(root.get(), child->
id())); |
4622 EXPECT_EQ(grandChild, LayerTreeHostCommon::findLayerInSubtree(root.get(), gr
andChild->id())); | 4608 EXPECT_EQ(grandChild, LayerTreeHostCommon::findLayerInSubtree(root.get(), gr
andChild->id())); |
4623 EXPECT_EQ(maskLayer, LayerTreeHostCommon::findLayerInSubtree(root.get(), mas
kLayer->id())); | 4609 EXPECT_EQ(maskLayer, LayerTreeHostCommon::findLayerInSubtree(root.get(), mas
kLayer->id())); |
4624 EXPECT_EQ(replicaLayer, LayerTreeHostCommon::findLayerInSubtree(root.get(),
replicaLayer->id())); | 4610 EXPECT_EQ(replicaLayer, LayerTreeHostCommon::findLayerInSubtree(root.get(),
replicaLayer->id())); |
4625 EXPECT_EQ(0, LayerTreeHostCommon::findLayerInSubtree(root.get(), nonexistent
Id)); | 4611 EXPECT_EQ(0, LayerTreeHostCommon::findLayerInSubtree(root.get(), nonexistent
Id)); |
4626 } | 4612 } |
4627 | 4613 |
4628 } // namespace | 4614 } // namespace |
4629 } // namespace cc | 4615 } // namespace cc |
OLD | NEW |