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 |