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

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

Issue 816543004: Update from https://crrev.com/308996 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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/single_thread_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 "testing/gtest/include/gtest/gtest.h"
9
10 namespace cc {
11
12 TEST(PropertyTreeTest, ComputeTransformRoot) {
13 TransformTree tree;
14 TransformNode& root = *tree.Node(0);
15 root.data.to_parent.Translate(2, 2);
16 root.data.from_parent.Translate(-2, -2);
17 tree.UpdateScreenSpaceTransform(0);
18
19 gfx::Transform expected;
20 gfx::Transform transform;
21 bool success = tree.ComputeTransform(0, 0, &transform);
22 EXPECT_TRUE(success);
23 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
24
25 transform.MakeIdentity();
26 expected.Translate(2, 2);
27 success = tree.ComputeTransform(0, -1, &transform);
28 EXPECT_TRUE(success);
29 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
30
31 transform.MakeIdentity();
32 expected.MakeIdentity();
33 expected.Translate(-2, -2);
34 success = tree.ComputeTransform(-1, 0, &transform);
35 EXPECT_TRUE(success);
36 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
37 }
38
39 TEST(PropertyTreeTest, ComputeTransformChild) {
40 TransformTree tree;
41 TransformNode& root = *tree.Node(0);
42 root.data.to_parent.Translate(2, 2);
43 root.data.from_parent.Translate(-2, -2);
44 tree.UpdateScreenSpaceTransform(0);
45
46 TransformNode child;
47 child.data.to_parent.Translate(3, 3);
48 child.data.from_parent.Translate(-3, -3);
49
50 tree.Insert(child, 0);
51 tree.UpdateScreenSpaceTransform(1);
52
53 gfx::Transform expected;
54 gfx::Transform transform;
55
56 expected.Translate(3, 3);
57 bool success = tree.ComputeTransform(1, 0, &transform);
58 EXPECT_TRUE(success);
59 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
60
61 transform.MakeIdentity();
62 expected.MakeIdentity();
63 expected.Translate(-3, -3);
64 success = tree.ComputeTransform(0, 1, &transform);
65 EXPECT_TRUE(success);
66 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
67
68 transform.MakeIdentity();
69 expected.MakeIdentity();
70 expected.Translate(5, 5);
71 success = tree.ComputeTransform(1, -1, &transform);
72 EXPECT_TRUE(success);
73 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
74
75 transform.MakeIdentity();
76 expected.MakeIdentity();
77 expected.Translate(-5, -5);
78 success = tree.ComputeTransform(-1, 1, &transform);
79 EXPECT_TRUE(success);
80 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
81 }
82
83 TEST(PropertyTreeTest, ComputeTransformSibling) {
84 TransformTree tree;
85 TransformNode& root = *tree.Node(0);
86 root.data.to_parent.Translate(2, 2);
87 root.data.from_parent.Translate(-2, -2);
88 tree.UpdateScreenSpaceTransform(0);
89
90 TransformNode child;
91 child.data.to_parent.Translate(3, 3);
92 child.data.from_parent.Translate(-3, -3);
93
94 TransformNode sibling;
95 sibling.data.to_parent.Translate(7, 7);
96 sibling.data.from_parent.Translate(-7, -7);
97
98 tree.Insert(child, 0);
99 tree.Insert(sibling, 0);
100
101 tree.UpdateScreenSpaceTransform(1);
102 tree.UpdateScreenSpaceTransform(2);
103
104 gfx::Transform expected;
105 gfx::Transform transform;
106
107 expected.Translate(4, 4);
108 bool success = tree.ComputeTransform(2, 1, &transform);
109 EXPECT_TRUE(success);
110 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
111
112 transform.MakeIdentity();
113 expected.MakeIdentity();
114 expected.Translate(-4, -4);
115 success = tree.ComputeTransform(1, 2, &transform);
116 EXPECT_TRUE(success);
117 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
118 }
119
120 TEST(PropertyTreeTest, ComputeTransformSiblingSingularAncestor) {
121 // In this test, we have the following tree:
122 // root
123 // + singular
124 // + child
125 // + sibling
126 // Now singular has a singular transform, so we cannot use screen space
127 // transforms to compute change of basis transforms between |child| and
128 // |sibling|.
129 TransformTree tree;
130 TransformNode& root = *tree.Node(0);
131 root.data.to_parent.Translate(2, 2);
132 root.data.from_parent.Translate(-2, -2);
133 tree.UpdateScreenSpaceTransform(0);
134
135 TransformNode singular;
136 singular.data.to_parent.matrix().set(2, 2, 0.0);
137 singular.data.is_invertible = false;
138 singular.data.ancestors_are_invertible = false;
139
140 TransformNode child;
141 child.data.to_parent.Translate(3, 3);
142 child.data.from_parent.Translate(-3, -3);
143 child.data.ancestors_are_invertible = false;
144
145 TransformNode sibling;
146 sibling.data.to_parent.Translate(7, 7);
147 sibling.data.from_parent.Translate(-7, -7);
148 sibling.data.ancestors_are_invertible = false;
149
150 tree.Insert(singular, 0);
151 tree.Insert(child, 1);
152 tree.Insert(sibling, 1);
153
154 tree.UpdateScreenSpaceTransform(1);
155 tree.UpdateScreenSpaceTransform(2);
156 tree.UpdateScreenSpaceTransform(3);
157
158 gfx::Transform expected;
159 gfx::Transform transform;
160
161 expected.Translate(4, 4);
162 bool success = tree.ComputeTransform(3, 2, &transform);
163 EXPECT_TRUE(success);
164 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
165
166 transform.MakeIdentity();
167 expected.MakeIdentity();
168 expected.Translate(-4, -4);
169 success = tree.ComputeTransform(2, 3, &transform);
170 EXPECT_TRUE(success);
171 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
172 }
173
174 TEST(PropertyTreeTest, MultiplicationOrder) {
175 TransformTree tree;
176 TransformNode& root = *tree.Node(0);
177 root.data.to_parent.Translate(2, 2);
178 root.data.from_parent.Translate(-2, -2);
179 tree.UpdateScreenSpaceTransform(0);
180
181 TransformNode child;
182 child.data.to_parent.Scale(2, 2);
183 child.data.from_parent.Scale(0.5, 0.5);
184
185 tree.Insert(child, 0);
186 tree.UpdateScreenSpaceTransform(1);
187
188 gfx::Transform expected;
189 expected.Translate(2, 2);
190 expected.Scale(2, 2);
191
192 gfx::Transform transform;
193 gfx::Transform inverse;
194
195 bool success = tree.ComputeTransform(1, -1, &transform);
196 EXPECT_TRUE(success);
197 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
198
199 success = tree.ComputeTransform(-1, 1, &inverse);
200 EXPECT_TRUE(success);
201
202 transform = transform * inverse;
203 expected.MakeIdentity();
204 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform);
205 }
206
207 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree_builder.cc ('k') | cc/trees/single_thread_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698