Chromium Code Reviews| Index: cc/trees/property_tree.cc |
| diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc |
| index ef0a2f32663e24fba6e2f4f5903ba248f0220806..a372541ed4391bfe5179c3cbc40826e1f18e06d9 100644 |
| --- a/cc/trees/property_tree.cc |
| +++ b/cc/trees/property_tree.cc |
| @@ -773,9 +773,8 @@ void EffectTree::UpdateBackfaceVisibility(EffectNode* node, |
| parent_transform_node->sorting_context_id == |
| transform_node->sorting_context_id) { |
| gfx::Transform surface_draw_transform; |
| - transform_tree.ComputeTransform( |
| - transform_node->id, transform_tree.TargetId(transform_node->id), |
| - &surface_draw_transform); |
| + property_trees()->ComputeTransformToTarget( |
| + transform_node->id, node->target_id, &surface_draw_transform); |
| node->hidden_by_backface_visibility = |
| surface_draw_transform.IsBackFaceVisible(); |
| } else { |
| @@ -1876,4 +1875,24 @@ gfx::Transform PropertyTrees::ToScreenSpaceTransformWithoutSurfaceContentsScale( |
| return screen_space_transform; |
| } |
| +bool PropertyTrees::ComputeTransformToTarget(int transform_id, |
| + int effect_id, |
| + gfx::Transform* transform) const { |
| + transform->MakeIdentity(); |
| + const EffectNode* effect_node = effect_tree.Node(effect_id); |
| + |
| + DCHECK(effect_node->has_render_surface || effect_node->id == 0); |
| + |
| + if (transform_id == effect_node->transform_id) |
| + return true; |
| + |
| + if (transform_id > effect_node->transform_id) { |
| + return transform_tree.CombineTransformsBetween( |
| + transform_id, effect_node->transform_id, transform); |
| + } |
| + |
| + return transform_tree.CombineInversesBetween( |
| + transform_id, effect_node->transform_id, transform); |
|
ajuma
2016/07/22 13:45:38
Do we also need to handle the case where the two t
jaydasika
2016/07/22 15:59:52
This function calls CombineTransforms(/Inverses)Be
|
| +} |
| + |
| } // namespace cc |