| 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 "cc/trees/draw_property_utils.h" | 8 #include "cc/trees/draw_property_utils.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 74 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 75 | 75 |
| 76 transform.MakeIdentity(); | 76 transform.MakeIdentity(); |
| 77 expected.MakeIdentity(); | 77 expected.MakeIdentity(); |
| 78 expected.Translate(-5, -5); | 78 expected.Translate(-5, -5); |
| 79 success = tree.ComputeTransform(-1, 1, &transform); | 79 success = tree.ComputeTransform(-1, 1, &transform); |
| 80 EXPECT_TRUE(success); | 80 EXPECT_TRUE(success); |
| 81 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 81 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 82 } | 82 } |
| 83 | 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) { | 84 TEST(PropertyTreeTest, TransformsWithFlattening) { |
| 173 TransformTree tree; | 85 TransformTree tree; |
| 174 | 86 |
| 175 int grand_parent = tree.Insert(TransformNode(), 0); | 87 int grand_parent = tree.Insert(TransformNode(), 0); |
| 176 tree.Node(grand_parent)->data.content_target_id = grand_parent; | 88 tree.Node(grand_parent)->data.content_target_id = grand_parent; |
| 177 tree.Node(grand_parent)->data.target_id = grand_parent; | 89 tree.Node(grand_parent)->data.target_id = grand_parent; |
| 178 | 90 |
| 179 gfx::Transform rotation_about_x; | 91 gfx::Transform rotation_about_x; |
| 180 rotation_about_x.RotateAboutXAxis(15); | 92 rotation_about_x.RotateAboutXAxis(15); |
| 181 | 93 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 EXPECT_TRUE(success); | 206 EXPECT_TRUE(success); |
| 295 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 207 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 296 | 208 |
| 297 // To compute this would require inverting the 0 matrix, so we cannot | 209 // To compute this would require inverting the 0 matrix, so we cannot |
| 298 // succeed. | 210 // succeed. |
| 299 success = tree.ComputeTransform(0, 1, &inverse); | 211 success = tree.ComputeTransform(0, 1, &inverse); |
| 300 EXPECT_FALSE(success); | 212 EXPECT_FALSE(success); |
| 301 } | 213 } |
| 302 | 214 |
| 303 } // namespace cc | 215 } // namespace cc |
| OLD | NEW |