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

Unified Diff: cc/trees/property_tree.cc

Issue 2191983002: cc : Use dynamically calculated target space transforms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 5 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
« no previous file with comments | « cc/trees/layer_tree_host_common_unittest.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.cc
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
index f23bc969cedee91ff6adee4ad704770b6f5190f4..9c8a79d2ec68d498de4bc438fbba672b28a8f701 100644
--- a/cc/trees/property_tree.cc
+++ b/cc/trees/property_tree.cc
@@ -1986,20 +1986,34 @@ bool PropertyTrees::ComputeTransformToTarget(int transform_id,
transform->MakeIdentity();
int target_transform_id;
+ const EffectNode* effect_node = effect_tree.Node(effect_id);
if (effect_id == EffectTree::kInvalidNodeId) {
// This can happen when PaintArtifactCompositor builds property trees as
// it doesn't set effect ids on clip nodes. We want to compute transform
// to the root in this case.
target_transform_id = TransformTree::kRootNodeId;
} else {
- const EffectNode* effect_node = effect_tree.Node(effect_id);
DCHECK(effect_node->has_render_surface ||
effect_node->id == EffectTree::kRootNodeId);
target_transform_id = effect_node->transform_id;
}
- return transform_tree.ComputeTransform(transform_id, target_transform_id,
- transform);
+ if (!verify_transform_tree_calculations || transform_id < target_transform_id)
+ return transform_tree.ComputeTransform(transform_id, target_transform_id,
+ transform);
+ transform->ConcatTransform(
+ GetDrawTransforms(transform_id, effect_id).to_target);
+ if (effect_node->surface_contents_scale.x() != 0.f &&
+ effect_node->surface_contents_scale.y() != 0.f)
+ transform->matrix().postScale(
+ 1.0f / effect_node->surface_contents_scale.x(),
+ 1.0f / effect_node->surface_contents_scale.y(), 1.0f);
+#if DCHECK_IS_ON()
+ gfx::Transform expected;
+ transform_tree.ComputeTransform(transform_id, target_transform_id, &expected);
+ DCHECK(expected.ApproximatelyEqual(*transform));
ajuma 2016/07/29 18:03:18 Since this has a relatively large tolerance for er
jaydasika 2016/07/29 18:20:16 Done.
+#endif
+ return true;
}
bool PropertyTrees::ComputeTransformFromTarget(
@@ -2009,20 +2023,33 @@ bool PropertyTrees::ComputeTransformFromTarget(
transform->MakeIdentity();
int target_transform_id;
+ const EffectNode* effect_node = effect_tree.Node(effect_id);
if (effect_id == EffectTree::kInvalidNodeId) {
// This can happen when PaintArtifactCompositor builds property trees as
// it doesn't set effect ids on clip nodes. We want to compute transform
// to the root in this case.
target_transform_id = TransformTree::kRootNodeId;
} else {
- const EffectNode* effect_node = effect_tree.Node(effect_id);
DCHECK(effect_node->has_render_surface ||
effect_node->id == EffectTree::kRootNodeId);
target_transform_id = effect_node->transform_id;
}
- return transform_tree.ComputeTransform(target_transform_id, transform_id,
- transform);
+ if (!verify_transform_tree_calculations || transform_id > target_transform_id)
+ return transform_tree.ComputeTransform(target_transform_id, transform_id,
+ transform);
+
+ auto draw_transforms = GetDrawTransforms(transform_id, effect_id);
+ transform->ConcatTransform(draw_transforms.from_target);
+ transform->Scale(effect_node->surface_contents_scale.x(),
+ effect_node->surface_contents_scale.y());
ajuma 2016/07/29 18:03:18 Same comment here about setting |transform| to the
jaydasika 2016/07/29 18:20:16 Done.
+#if DCHECK_IS_ON()
+ gfx::Transform expected;
+ transform_tree.ComputeTransform(target_transform_id, transform_id, &expected);
+ DCHECK(expected.ApproximatelyEqual(*transform) ||
+ !draw_transforms.invertible);
+#endif
+ return draw_transforms.invertible;
}
} // namespace cc
« no previous file with comments | « cc/trees/layer_tree_host_common_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698