OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/trees/property_tree.h" | 5 #include "cc/trees/property_tree.h" |
6 | 6 |
7 #include "cc/test/geometry_test_utils.h" | 7 #include "cc/test/geometry_test_utils.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 namespace cc { | 10 namespace cc { |
11 | 11 |
12 TEST(PropertyTreeTest, ComputeTransformRoot) { | 12 TEST(PropertyTreeTest, ComputeTransformRoot) { |
13 TransformTree tree; | 13 TransformTree tree; |
14 TransformNode& root = *tree.Node(0); | 14 TransformNode& root = *tree.Node(0); |
15 root.data.to_parent.Translate(2, 2); | 15 root.data.local.Translate(2, 2); |
16 root.data.from_parent.Translate(-2, -2); | 16 root.data.target_id = 0; |
17 tree.UpdateScreenSpaceTransform(0); | 17 tree.UpdateTransforms(0); |
18 | 18 |
19 gfx::Transform expected; | 19 gfx::Transform expected; |
20 gfx::Transform transform; | 20 gfx::Transform transform; |
21 bool success = tree.ComputeTransform(0, 0, &transform); | 21 bool success = tree.ComputeTransform(0, 0, &transform); |
22 EXPECT_TRUE(success); | 22 EXPECT_TRUE(success); |
23 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 23 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
24 | 24 |
25 transform.MakeIdentity(); | 25 transform.MakeIdentity(); |
26 expected.Translate(2, 2); | 26 expected.Translate(2, 2); |
27 success = tree.ComputeTransform(0, -1, &transform); | 27 success = tree.ComputeTransform(0, -1, &transform); |
28 EXPECT_TRUE(success); | 28 EXPECT_TRUE(success); |
29 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 29 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
30 | 30 |
31 transform.MakeIdentity(); | 31 transform.MakeIdentity(); |
32 expected.MakeIdentity(); | 32 expected.MakeIdentity(); |
33 expected.Translate(-2, -2); | 33 expected.Translate(-2, -2); |
34 success = tree.ComputeTransform(-1, 0, &transform); | 34 success = tree.ComputeTransform(-1, 0, &transform); |
35 EXPECT_TRUE(success); | 35 EXPECT_TRUE(success); |
36 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 36 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
37 } | 37 } |
38 | 38 |
39 TEST(PropertyTreeTest, ComputeTransformChild) { | 39 TEST(PropertyTreeTest, ComputeTransformChild) { |
40 TransformTree tree; | 40 TransformTree tree; |
41 TransformNode& root = *tree.Node(0); | 41 TransformNode& root = *tree.Node(0); |
42 root.data.to_parent.Translate(2, 2); | 42 root.data.local.Translate(2, 2); |
43 root.data.from_parent.Translate(-2, -2); | 43 root.data.target_id = 0; |
44 tree.UpdateScreenSpaceTransform(0); | 44 tree.UpdateTransforms(0); |
45 | 45 |
46 TransformNode child; | 46 TransformNode child; |
47 child.data.to_parent.Translate(3, 3); | 47 child.data.local.Translate(3, 3); |
48 child.data.from_parent.Translate(-3, -3); | 48 child.data.target_id = 0; |
49 | 49 |
50 tree.Insert(child, 0); | 50 tree.Insert(child, 0); |
51 tree.UpdateScreenSpaceTransform(1); | 51 tree.UpdateTransforms(1); |
52 | 52 |
53 gfx::Transform expected; | 53 gfx::Transform expected; |
54 gfx::Transform transform; | 54 gfx::Transform transform; |
55 | 55 |
56 expected.Translate(3, 3); | 56 expected.Translate(3, 3); |
57 bool success = tree.ComputeTransform(1, 0, &transform); | 57 bool success = tree.ComputeTransform(1, 0, &transform); |
58 EXPECT_TRUE(success); | 58 EXPECT_TRUE(success); |
59 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 59 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
60 | 60 |
61 transform.MakeIdentity(); | 61 transform.MakeIdentity(); |
(...skipping 14 matching lines...) Expand all Loading... |
76 expected.MakeIdentity(); | 76 expected.MakeIdentity(); |
77 expected.Translate(-5, -5); | 77 expected.Translate(-5, -5); |
78 success = tree.ComputeTransform(-1, 1, &transform); | 78 success = tree.ComputeTransform(-1, 1, &transform); |
79 EXPECT_TRUE(success); | 79 EXPECT_TRUE(success); |
80 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 80 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
81 } | 81 } |
82 | 82 |
83 TEST(PropertyTreeTest, ComputeTransformSibling) { | 83 TEST(PropertyTreeTest, ComputeTransformSibling) { |
84 TransformTree tree; | 84 TransformTree tree; |
85 TransformNode& root = *tree.Node(0); | 85 TransformNode& root = *tree.Node(0); |
86 root.data.to_parent.Translate(2, 2); | 86 root.data.local.Translate(2, 2); |
87 root.data.from_parent.Translate(-2, -2); | 87 root.data.target_id = 0; |
88 tree.UpdateScreenSpaceTransform(0); | 88 tree.UpdateTransforms(0); |
89 | 89 |
90 TransformNode child; | 90 TransformNode child; |
91 child.data.to_parent.Translate(3, 3); | 91 child.data.local.Translate(3, 3); |
92 child.data.from_parent.Translate(-3, -3); | 92 child.data.target_id = 0; |
93 | 93 |
94 TransformNode sibling; | 94 TransformNode sibling; |
95 sibling.data.to_parent.Translate(7, 7); | 95 sibling.data.local.Translate(7, 7); |
96 sibling.data.from_parent.Translate(-7, -7); | 96 sibling.data.target_id = 0; |
97 | 97 |
98 tree.Insert(child, 0); | 98 tree.Insert(child, 0); |
99 tree.Insert(sibling, 0); | 99 tree.Insert(sibling, 0); |
100 | 100 |
101 tree.UpdateScreenSpaceTransform(1); | 101 tree.UpdateTransforms(1); |
102 tree.UpdateScreenSpaceTransform(2); | 102 tree.UpdateTransforms(2); |
103 | 103 |
104 gfx::Transform expected; | 104 gfx::Transform expected; |
105 gfx::Transform transform; | 105 gfx::Transform transform; |
106 | 106 |
107 expected.Translate(4, 4); | 107 expected.Translate(4, 4); |
108 bool success = tree.ComputeTransform(2, 1, &transform); | 108 bool success = tree.ComputeTransform(2, 1, &transform); |
109 EXPECT_TRUE(success); | 109 EXPECT_TRUE(success); |
110 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 110 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
111 | 111 |
112 transform.MakeIdentity(); | 112 transform.MakeIdentity(); |
113 expected.MakeIdentity(); | 113 expected.MakeIdentity(); |
114 expected.Translate(-4, -4); | 114 expected.Translate(-4, -4); |
115 success = tree.ComputeTransform(1, 2, &transform); | 115 success = tree.ComputeTransform(1, 2, &transform); |
116 EXPECT_TRUE(success); | 116 EXPECT_TRUE(success); |
117 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 117 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
118 } | 118 } |
119 | 119 |
120 TEST(PropertyTreeTest, ComputeTransformSiblingSingularAncestor) { | 120 TEST(PropertyTreeTest, ComputeTransformSiblingSingularAncestor) { |
121 // In this test, we have the following tree: | 121 // In this test, we have the following tree: |
122 // root | 122 // root |
123 // + singular | 123 // + singular |
124 // + child | 124 // + child |
125 // + sibling | 125 // + sibling |
126 // Now singular has a singular transform, so we cannot use screen space | 126 // Now singular has a singular transform, so we cannot use screen space |
127 // transforms to compute change of basis transforms between |child| and | 127 // transforms to compute change of basis transforms between |child| and |
128 // |sibling|. | 128 // |sibling|. |
129 TransformTree tree; | 129 TransformTree tree; |
130 TransformNode& root = *tree.Node(0); | 130 TransformNode& root = *tree.Node(0); |
131 root.data.to_parent.Translate(2, 2); | 131 root.data.local.Translate(2, 2); |
132 root.data.from_parent.Translate(-2, -2); | 132 root.data.target_id = 0; |
133 tree.UpdateScreenSpaceTransform(0); | 133 tree.UpdateTransforms(0); |
134 | 134 |
135 TransformNode singular; | 135 TransformNode singular; |
136 singular.data.to_parent.matrix().set(2, 2, 0.0); | 136 singular.data.local.matrix().set(2, 2, 0.0); |
137 singular.data.is_invertible = false; | 137 singular.data.target_id = 0; |
138 singular.data.ancestors_are_invertible = false; | |
139 | 138 |
140 TransformNode child; | 139 TransformNode child; |
141 child.data.to_parent.Translate(3, 3); | 140 child.data.local.Translate(3, 3); |
142 child.data.from_parent.Translate(-3, -3); | 141 child.data.target_id = 0; |
143 child.data.ancestors_are_invertible = false; | |
144 | 142 |
145 TransformNode sibling; | 143 TransformNode sibling; |
146 sibling.data.to_parent.Translate(7, 7); | 144 sibling.data.local.Translate(7, 7); |
147 sibling.data.from_parent.Translate(-7, -7); | 145 sibling.data.target_id = 0; |
148 sibling.data.ancestors_are_invertible = false; | |
149 | 146 |
150 tree.Insert(singular, 0); | 147 tree.Insert(singular, 0); |
151 tree.Insert(child, 1); | 148 tree.Insert(child, 1); |
152 tree.Insert(sibling, 1); | 149 tree.Insert(sibling, 1); |
153 | 150 |
154 tree.UpdateScreenSpaceTransform(1); | 151 tree.UpdateTransforms(1); |
155 tree.UpdateScreenSpaceTransform(2); | 152 tree.UpdateTransforms(2); |
156 tree.UpdateScreenSpaceTransform(3); | 153 tree.UpdateTransforms(3); |
157 | 154 |
158 gfx::Transform expected; | 155 gfx::Transform expected; |
159 gfx::Transform transform; | 156 gfx::Transform transform; |
160 | 157 |
161 expected.Translate(4, 4); | 158 expected.Translate(4, 4); |
162 bool success = tree.ComputeTransform(3, 2, &transform); | 159 bool success = tree.ComputeTransform(3, 2, &transform); |
163 EXPECT_TRUE(success); | 160 EXPECT_TRUE(success); |
164 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 161 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
165 | 162 |
166 transform.MakeIdentity(); | 163 transform.MakeIdentity(); |
167 expected.MakeIdentity(); | 164 expected.MakeIdentity(); |
168 expected.Translate(-4, -4); | 165 expected.Translate(-4, -4); |
169 success = tree.ComputeTransform(2, 3, &transform); | 166 success = tree.ComputeTransform(2, 3, &transform); |
170 EXPECT_TRUE(success); | 167 EXPECT_TRUE(success); |
171 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 168 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
172 } | 169 } |
173 | 170 |
174 TEST(PropertyTreeTest, MultiplicationOrder) { | 171 TEST(PropertyTreeTest, MultiplicationOrder) { |
175 TransformTree tree; | 172 TransformTree tree; |
176 TransformNode& root = *tree.Node(0); | 173 TransformNode& root = *tree.Node(0); |
177 root.data.to_parent.Translate(2, 2); | 174 root.data.local.Translate(2, 2); |
178 root.data.from_parent.Translate(-2, -2); | 175 root.data.target_id = 0; |
179 tree.UpdateScreenSpaceTransform(0); | 176 tree.UpdateTransforms(0); |
180 | 177 |
181 TransformNode child; | 178 TransformNode child; |
182 child.data.to_parent.Scale(2, 2); | 179 child.data.local.Scale(2, 2); |
183 child.data.from_parent.Scale(0.5, 0.5); | 180 child.data.target_id = 0; |
184 | 181 |
185 tree.Insert(child, 0); | 182 tree.Insert(child, 0); |
186 tree.UpdateScreenSpaceTransform(1); | 183 tree.UpdateTransforms(1); |
187 | 184 |
188 gfx::Transform expected; | 185 gfx::Transform expected; |
189 expected.Translate(2, 2); | 186 expected.Translate(2, 2); |
190 expected.Scale(2, 2); | 187 expected.Scale(2, 2); |
191 | 188 |
192 gfx::Transform transform; | 189 gfx::Transform transform; |
193 gfx::Transform inverse; | 190 gfx::Transform inverse; |
194 | 191 |
195 bool success = tree.ComputeTransform(1, -1, &transform); | 192 bool success = tree.ComputeTransform(1, -1, &transform); |
196 EXPECT_TRUE(success); | 193 EXPECT_TRUE(success); |
197 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 194 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
198 | 195 |
199 success = tree.ComputeTransform(-1, 1, &inverse); | 196 success = tree.ComputeTransform(-1, 1, &inverse); |
200 EXPECT_TRUE(success); | 197 EXPECT_TRUE(success); |
201 | 198 |
202 transform = transform * inverse; | 199 transform = transform * inverse; |
203 expected.MakeIdentity(); | 200 expected.MakeIdentity(); |
204 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 201 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
205 } | 202 } |
206 | 203 |
207 } // namespace cc | 204 } // namespace cc |
OLD | NEW |