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

Unified Diff: cc/trees/property_tree_unittest.cc

Issue 1060413002: cc: Re-use transforms from transform nodes when computing visible rects (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased 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 side-by-side diff with in-line comments
Download patch
« cc/trees/property_tree.cc ('K') | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/property_tree_unittest.cc
diff --git a/cc/trees/property_tree_unittest.cc b/cc/trees/property_tree_unittest.cc
index 8d15aa3e1f1358bcc3f8ea6d116c338cdd1e4a41..8eba77382654ea7f6b310e42d1582293ae3df863 100644
--- a/cc/trees/property_tree_unittest.cc
+++ b/cc/trees/property_tree_unittest.cc
@@ -212,4 +212,108 @@ TEST(PropertyTreeTest, ComputeTransformWithUninvertibleTransform) {
EXPECT_FALSE(success);
}
+TEST(PropertyTreeTest, ComputeTransformWithSublayerScale) {
+ TransformTree tree;
+ TransformNode& root = *tree.Node(0);
+ root.data.target_id = 0;
+ tree.UpdateTransforms(0);
+
+ TransformNode grand_parent;
+ grand_parent.data.local.Scale(2.f, 2.f);
+ grand_parent.data.target_id = 0;
+ grand_parent.data.needs_sublayer_scale = true;
+ int grand_parent_id = tree.Insert(grand_parent, 0);
+ tree.UpdateTransforms(grand_parent_id);
+
+ TransformNode parent;
+ parent.data.local.Translate(15.f, 15.f);
+ parent.data.target_id = grand_parent_id;
+ int parent_id = tree.Insert(parent, grand_parent_id);
+ tree.UpdateTransforms(parent_id);
+
+ TransformNode child;
+ child.data.local.Scale(3.f, 3.f);
+ child.data.target_id = grand_parent_id;
+ int child_id = tree.Insert(child, parent_id);
+ tree.UpdateTransforms(child_id);
+
+ TransformNode grand_child;
+ grand_child.data.local.Scale(5.f, 5.f);
+ grand_child.data.target_id = grand_parent_id;
+ grand_child.data.needs_sublayer_scale = true;
+ int grand_child_id = tree.Insert(grand_child, child_id);
+ tree.UpdateTransforms(grand_child_id);
+
+ EXPECT_EQ(gfx::Vector2dF(2.f, 2.f),
+ tree.Node(grand_parent_id)->data.sublayer_scale);
+ EXPECT_EQ(gfx::Vector2dF(30.f, 30.f),
+ tree.Node(grand_child_id)->data.sublayer_scale);
+
+ // Compute transform from grand_parent to grand_child.
+ gfx::Transform expected_transform_without_sublayer_scale;
+ expected_transform_without_sublayer_scale.Scale(1.f / 15.f, 1.f / 15.f);
+ expected_transform_without_sublayer_scale.Translate(-15.f, -15.f);
+
+ gfx::Transform expected_transform_with_dest_sublayer_scale;
+ expected_transform_with_dest_sublayer_scale.Scale(30.f, 30.f);
+ expected_transform_with_dest_sublayer_scale.Scale(1.f / 15.f, 1.f / 15.f);
+ expected_transform_with_dest_sublayer_scale.Translate(-15.f, -15.f);
+
+ gfx::Transform expected_transform_with_source_sublayer_scale;
+ expected_transform_with_source_sublayer_scale.Scale(1.f / 15.f, 1.f / 15.f);
+ expected_transform_with_source_sublayer_scale.Translate(-15.f, -15.f);
+ expected_transform_with_source_sublayer_scale.Scale(0.5f, 0.5f);
+
+ gfx::Transform transform;
+ bool success =
+ tree.ComputeTransform(grand_parent_id, grand_child_id, &transform);
+ EXPECT_TRUE(success);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform_without_sublayer_scale,
+ transform);
+
+ success = tree.ComputeTransformWithDestinationSublayerScale(
+ grand_parent_id, grand_child_id, &transform);
+ EXPECT_TRUE(success);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform_with_dest_sublayer_scale,
+ transform);
+
+ success = tree.ComputeTransformWithSourceSublayerScale(
+ grand_parent_id, grand_child_id, &transform);
+ EXPECT_TRUE(success);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform_with_source_sublayer_scale,
+ transform);
+
+ // Now compute transform from grand_child to grand_parent.
+ expected_transform_without_sublayer_scale.MakeIdentity();
+ expected_transform_without_sublayer_scale.Translate(15.f, 15.f);
+ expected_transform_without_sublayer_scale.Scale(15.f, 15.f);
+
+ expected_transform_with_dest_sublayer_scale.MakeIdentity();
+ expected_transform_with_dest_sublayer_scale.Scale(2.f, 2.f);
+ expected_transform_with_dest_sublayer_scale.Translate(15.f, 15.f);
+ expected_transform_with_dest_sublayer_scale.Scale(15.f, 15.f);
+
+ expected_transform_with_source_sublayer_scale.MakeIdentity();
+ expected_transform_with_source_sublayer_scale.Translate(15.f, 15.f);
+ expected_transform_with_source_sublayer_scale.Scale(15.f, 15.f);
+ expected_transform_with_source_sublayer_scale.Scale(1.f / 30.f, 1.f / 30.f);
+
+ success = tree.ComputeTransform(grand_child_id, grand_parent_id, &transform);
+ EXPECT_TRUE(success);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform_without_sublayer_scale,
+ transform);
+
+ success = tree.ComputeTransformWithDestinationSublayerScale(
+ grand_child_id, grand_parent_id, &transform);
+ EXPECT_TRUE(success);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform_with_dest_sublayer_scale,
+ transform);
+
+ success = tree.ComputeTransformWithSourceSublayerScale(
+ grand_child_id, grand_parent_id, &transform);
+ EXPECT_TRUE(success);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform_with_source_sublayer_scale,
+ transform);
+}
+
} // namespace cc
« cc/trees/property_tree.cc ('K') | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698