Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: cc/trees/property_tree_unittest.cc

Issue 1057283003: Remove parts of //cc we aren't using (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/property_tree_builder.cc ('k') | cc/trees/proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/trees/property_tree.h"
6
7 #include "cc/test/geometry_test_utils.h"
8 #include "cc/trees/draw_property_utils.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace cc {
12
13 TEST(PropertyTreeTest, ComputeTransformRoot) {
14 TransformTree tree;
15 TransformNode& root = *tree.Node(0);
16 root.data.local.Translate(2, 2);
17 root.data.target_id = 0;
18 tree.UpdateTransforms(0);
19
20 gfx::Transform expected;
21 gfx::Transform transform;
22 bool success = tree.ComputeTransform(0, 0, &transform);
23 EXPECT_TRUE(success);
24 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
25
26 transform.MakeIdentity();
27 expected.Translate(2, 2);
28 success = tree.ComputeTransform(0, -1, &transform);
29 EXPECT_TRUE(success);
30 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
31
32 transform.MakeIdentity();
33 expected.MakeIdentity();
34 expected.Translate(-2, -2);
35 success = tree.ComputeTransform(-1, 0, &transform);
36 EXPECT_TRUE(success);
37 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
38 }
39
40 TEST(PropertyTreeTest, ComputeTransformChild) {
41 TransformTree tree;
42 TransformNode& root = *tree.Node(0);
43 root.data.local.Translate(2, 2);
44 root.data.target_id = 0;
45 tree.UpdateTransforms(0);
46
47 TransformNode child;
48 child.data.local.Translate(3, 3);
49 child.data.target_id = 0;
50
51 tree.Insert(child, 0);
52 tree.UpdateTransforms(1);
53
54 gfx::Transform expected;
55 gfx::Transform transform;
56
57 expected.Translate(3, 3);
58 bool success = tree.ComputeTransform(1, 0, &transform);
59 EXPECT_TRUE(success);
60 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
61
62 transform.MakeIdentity();
63 expected.MakeIdentity();
64 expected.Translate(-3, -3);
65 success = tree.ComputeTransform(0, 1, &transform);
66 EXPECT_TRUE(success);
67 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
68
69 transform.MakeIdentity();
70 expected.MakeIdentity();
71 expected.Translate(5, 5);
72 success = tree.ComputeTransform(1, -1, &transform);
73 EXPECT_TRUE(success);
74 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
75
76 transform.MakeIdentity();
77 expected.MakeIdentity();
78 expected.Translate(-5, -5);
79 success = tree.ComputeTransform(-1, 1, &transform);
80 EXPECT_TRUE(success);
81 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
82 }
83
84 TEST(PropertyTreeTest, ComputeTransformSibling) {
85 TransformTree tree;
86 TransformNode& root = *tree.Node(0);
87 root.data.local.Translate(2, 2);
88 root.data.target_id = 0;
89 tree.UpdateTransforms(0);
90
91 TransformNode child;
92 child.data.local.Translate(3, 3);
93 child.data.target_id = 0;
94
95 TransformNode sibling;
96 sibling.data.local.Translate(7, 7);
97 sibling.data.target_id = 0;
98
99 tree.Insert(child, 0);
100 tree.Insert(sibling, 0);
101
102 tree.UpdateTransforms(1);
103 tree.UpdateTransforms(2);
104
105 gfx::Transform expected;
106 gfx::Transform transform;
107
108 expected.Translate(4, 4);
109 bool success = tree.ComputeTransform(2, 1, &transform);
110 EXPECT_TRUE(success);
111 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
112
113 transform.MakeIdentity();
114 expected.MakeIdentity();
115 expected.Translate(-4, -4);
116 success = tree.ComputeTransform(1, 2, &transform);
117 EXPECT_TRUE(success);
118 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
119 }
120
121 TEST(PropertyTreeTest, ComputeTransformSiblingSingularAncestor) {
122 // In this test, we have the following tree:
123 // root
124 // + singular
125 // + child
126 // + sibling
127 // Now singular has a singular transform, so we cannot use screen space
128 // transforms to compute change of basis transforms between |child| and
129 // |sibling|.
130 TransformTree tree;
131 TransformNode& root = *tree.Node(0);
132 root.data.local.Translate(2, 2);
133 root.data.target_id = 0;
134 tree.UpdateTransforms(0);
135
136 TransformNode singular;
137 singular.data.local.matrix().set(2, 2, 0.0);
138 singular.data.target_id = 0;
139
140 TransformNode child;
141 child.data.local.Translate(3, 3);
142 child.data.target_id = 0;
143
144 TransformNode sibling;
145 sibling.data.local.Translate(7, 7);
146 sibling.data.target_id = 0;
147
148 tree.Insert(singular, 0);
149 tree.Insert(child, 1);
150 tree.Insert(sibling, 1);
151
152 tree.UpdateTransforms(1);
153 tree.UpdateTransforms(2);
154 tree.UpdateTransforms(3);
155
156 gfx::Transform expected;
157 gfx::Transform transform;
158
159 expected.Translate(4, 4);
160 bool success = tree.ComputeTransform(3, 2, &transform);
161 EXPECT_TRUE(success);
162 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
163
164 transform.MakeIdentity();
165 expected.MakeIdentity();
166 expected.Translate(-4, -4);
167 success = tree.ComputeTransform(2, 3, &transform);
168 EXPECT_TRUE(success);
169 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
170 }
171
172 TEST(PropertyTreeTest, TransformsWithFlattening) {
173 TransformTree tree;
174
175 int grand_parent = tree.Insert(TransformNode(), 0);
176 tree.Node(grand_parent)->data.content_target_id = grand_parent;
177 tree.Node(grand_parent)->data.target_id = grand_parent;
178
179 gfx::Transform rotation_about_x;
180 rotation_about_x.RotateAboutXAxis(15);
181
182 int parent = tree.Insert(TransformNode(), grand_parent);
183 tree.Node(parent)->data.needs_sublayer_scale = true;
184 tree.Node(parent)->data.target_id = grand_parent;
185 tree.Node(parent)->data.content_target_id = parent;
186 tree.Node(parent)->data.local = rotation_about_x;
187
188 int child = tree.Insert(TransformNode(), parent);
189 tree.Node(child)->data.target_id = parent;
190 tree.Node(child)->data.content_target_id = parent;
191 tree.Node(child)->data.flattens_inherited_transform = true;
192 tree.Node(child)->data.local = rotation_about_x;
193
194 int grand_child = tree.Insert(TransformNode(), child);
195 tree.Node(grand_child)->data.target_id = parent;
196 tree.Node(grand_child)->data.content_target_id = parent;
197 tree.Node(grand_child)->data.flattens_inherited_transform = true;
198 tree.Node(grand_child)->data.local = rotation_about_x;
199
200 ComputeTransforms(&tree);
201
202 gfx::Transform flattened_rotation_about_x = rotation_about_x;
203 flattened_rotation_about_x.FlattenTo2d();
204
205 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x,
206 tree.Node(child)->data.to_target);
207
208 EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_x * rotation_about_x,
209 tree.Node(child)->data.to_screen);
210
211 EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_x * rotation_about_x,
212 tree.Node(grand_child)->data.to_target);
213
214 EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_x *
215 flattened_rotation_about_x *
216 rotation_about_x,
217 tree.Node(grand_child)->data.to_screen);
218
219 gfx::Transform grand_child_to_child;
220 bool success =
221 tree.ComputeTransform(grand_child, child, &grand_child_to_child);
222 EXPECT_TRUE(success);
223 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x, grand_child_to_child);
224
225 // Remove flattening at grand_child, and recompute transforms.
226 tree.Node(grand_child)->data.flattens_inherited_transform = false;
227 ComputeTransforms(&tree);
228
229 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x * rotation_about_x,
230 tree.Node(grand_child)->data.to_target);
231
232 EXPECT_TRANSFORMATION_MATRIX_EQ(
233 flattened_rotation_about_x * rotation_about_x * rotation_about_x,
234 tree.Node(grand_child)->data.to_screen);
235
236 success = tree.ComputeTransform(grand_child, child, &grand_child_to_child);
237 EXPECT_TRUE(success);
238 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x, grand_child_to_child);
239 }
240
241 TEST(PropertyTreeTest, MultiplicationOrder) {
242 TransformTree tree;
243 TransformNode& root = *tree.Node(0);
244 root.data.local.Translate(2, 2);
245 root.data.target_id = 0;
246 tree.UpdateTransforms(0);
247
248 TransformNode child;
249 child.data.local.Scale(2, 2);
250 child.data.target_id = 0;
251
252 tree.Insert(child, 0);
253 tree.UpdateTransforms(1);
254
255 gfx::Transform expected;
256 expected.Translate(2, 2);
257 expected.Scale(2, 2);
258
259 gfx::Transform transform;
260 gfx::Transform inverse;
261
262 bool success = tree.ComputeTransform(1, -1, &transform);
263 EXPECT_TRUE(success);
264 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
265
266 success = tree.ComputeTransform(-1, 1, &inverse);
267 EXPECT_TRUE(success);
268
269 transform = transform * inverse;
270 expected.MakeIdentity();
271 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
272 }
273
274 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree_builder.cc ('k') | cc/trees/proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698