Index: cc/trees/property_tree.cc |
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc |
index b2ee4daa8170d1eab1bff1599f8802b688bec07e..c1c6e5da7521cc82fcca03d9db1b70e458930445 100644 |
--- a/cc/trees/property_tree.cc |
+++ b/cc/trees/property_tree.cc |
@@ -1951,6 +1951,10 @@ void PropertyTrees::SetAnimationScalesForTesting( |
bool PropertyTrees::GetToTarget(int transform_id, |
int effect_id, |
gfx::Transform* to_target) const { |
+ if (effect_id == EffectTree::kContentsRootNodeId) { |
+ *to_target = transform_tree.ToScreen(transform_id); |
+ return true; |
+ } |
DrawTransforms& transforms = GetDrawTransforms(transform_id, effect_id); |
if (transforms.to_valid) { |
*to_target = transforms.to_target; |
@@ -1969,6 +1973,12 @@ bool PropertyTrees::GetToTarget(int transform_id, |
bool PropertyTrees::GetFromTarget(int transform_id, |
int effect_id, |
gfx::Transform* from_target) const { |
+ const TransformNode* node = transform_tree.Node(transform_id); |
+ if (node->ancestors_are_invertible && |
+ effect_id == EffectTree::kContentsRootNodeId) { |
+ *from_target = transform_tree.FromScreen(transform_id); |
+ return true; |
+ } |
DrawTransforms& transforms = GetDrawTransforms(transform_id, effect_id); |
if (transforms.from_valid) { |
*from_target = transforms.from_target; |
@@ -2004,6 +2014,17 @@ DrawTransformData& PropertyTrees::FetchDrawTransformsDataFromCache( |
return data; |
} |
+ClipRectData* PropertyTrees::FetchClipRectFromCache(int clip_id, |
+ int target_id) { |
+ ClipNode* clip_node = clip_tree.Node(clip_id); |
+ for (auto& data : clip_node->cached_clip_rects) { |
+ if (data.target_id == target_id || data.target_id == -1) |
+ return &data; |
+ } |
+ clip_node->cached_clip_rects.push_back(ClipRectData()); |
+ return &clip_node->cached_clip_rects.back(); |
+} |
+ |
DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id, |
int effect_id) const { |
const EffectNode* effect_node = effect_tree.Node(effect_id); |