Index: cc/trees/property_tree.cc |
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc |
index 58555f3017b82eb528340bcacb9510666308cfaf..2a3ab10f6317411f0144f7f4e3ecf52dbbd3cfba 100644 |
--- a/cc/trees/property_tree.cc |
+++ b/cc/trees/property_tree.cc |
@@ -784,6 +784,19 @@ float EffectTree::EffectiveOpacity(const EffectNode* node) const { |
return node->subtree_hidden ? 0.f : node->opacity; |
} |
+void EffectTree::UpdateClosestAncestorWithCopyRequestId( |
+ EffectNode* node, |
+ EffectNode* parent_node) { |
+ if (node->has_copy_request) |
+ node->closest_ancestor_with_copy_request_id = node->id; |
+ else if (parent_node) |
+ node->closest_ancestor_with_copy_request_id = |
+ parent_node->closest_ancestor_with_copy_request_id; |
+ else |
+ DCHECK_EQ(node->closest_ancestor_with_copy_request_id, |
+ EffectTree::kInvalidNodeId); |
+} |
+ |
void EffectTree::UpdateOpacities(EffectNode* node, EffectNode* parent_node) { |
node->screen_space_opacity = EffectiveOpacity(node); |
@@ -896,6 +909,7 @@ void EffectTree::UpdateEffects(int id) { |
EffectNode* node = Node(id); |
EffectNode* parent_node = parent(node); |
+ UpdateClosestAncestorWithCopyRequestId(node, parent_node); |
UpdateOpacities(node, parent_node); |
UpdateIsDrawn(node, parent_node); |
UpdateEffectChanged(node, parent_node); |
@@ -986,22 +1000,6 @@ void EffectTree::ClearCopyRequests() { |
set_needs_update(true); |
} |
-int EffectTree::ClosestAncestorWithCopyRequest(int id) const { |
- DCHECK_GE(id, EffectTree::kRootNodeId); |
- const EffectNode* node = Node(id); |
- while (node->id > EffectTree::kContentsRootNodeId) { |
- if (node->has_copy_request) |
- return node->id; |
- |
- node = parent(node); |
- } |
- |
- if (node->has_copy_request) |
- return node->id; |
- else |
- return EffectTree::kInvalidNodeId; |
-} |
- |
int EffectTree::LowestCommonAncestorWithRenderSurface(int id_1, |
int id_2) const { |
DCHECK(GetRenderSurface(id_1)); |