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 |