Chromium Code Reviews| 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 |