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

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: comments 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..45f5f0211509e787e1ca2fb38b03b7e90f713738 100644
--- a/cc/trees/property_tree.cc
+++ b/cc/trees/property_tree.cc
@@ -1986,20 +1986,33 @@ 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);
+ bool success = transform_tree.ComputeTransform(
+ transform_id, target_transform_id, transform);
+ if (verify_transform_tree_calculations &&
+ transform_id > target_transform_id) {
+ gfx::Transform to_target;
+ to_target.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)
+ to_target.matrix().postScale(
+ 1.0f / effect_node->surface_contents_scale.x(),
+ 1.0f / effect_node->surface_contents_scale.y(), 1.0f);
+ DCHECK(to_target.ApproximatelyEqual(*transform));
+ }
+ return success;
}
bool PropertyTrees::ComputeTransformFromTarget(
@@ -2009,20 +2022,31 @@ 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);
+ bool success = transform_tree.ComputeTransform(target_transform_id,
+ transform_id, transform);
+ if (verify_transform_tree_calculations &&
+ transform_id < target_transform_id) {
+ auto draw_transforms = GetDrawTransforms(transform_id, effect_id);
+ gfx::Transform from_target;
+ from_target.ConcatTransform(draw_transforms.from_target);
+ from_target.Scale(effect_node->surface_contents_scale.x(),
+ effect_node->surface_contents_scale.y());
+ DCHECK(from_target.ApproximatelyEqual(*transform) ||
+ !draw_transforms.invertible);
+ }
+ return success;
}
} // 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