Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index fc53daf99b314b0c4d096eb16acb2a0f3d827e85..5174826f2af15359fc2e70f425425f03a7f0e804 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -154,18 +154,23 @@ void RecordCompositorSlowScrollMetric(InputHandler::ScrollInputType type, |
} |
} |
-// Return true if scrollable 'ancestor' is the same layer as 'child' or its |
+// Return true if scrollable node for 'ancestor' is the same as 'child' or an |
// ancestor along the scroll tree. |
bool IsScrolledBy(LayerImpl* child, LayerImpl* ancestor) { |
DCHECK(ancestor && ancestor->scrollable()); |
if (!child) |
return false; |
- ScrollTree& scroll_tree = |
- child->layer_tree_impl()->property_trees()->scroll_tree; |
+ auto* property_trees = child->layer_tree_impl()->property_trees(); |
+ auto ancestor_scroll_id = |
+ property_trees->layer_id_to_scroll_node_index.find(ancestor->id()); |
ajuma
2017/02/23 14:19:00
Is the idea that for SPv2, we'd potentially have m
pdr.
2017/02/23 19:19:18
Yeah, here's my mental model of a usecase and how
|
+ if (ancestor_scroll_id == property_trees->layer_id_to_scroll_node_index.end()) |
+ return false; |
+ |
+ ScrollTree& scroll_tree = property_trees->scroll_tree; |
for (ScrollNode* scroll_node = scroll_tree.Node(child->scroll_tree_index()); |
scroll_node; scroll_node = scroll_tree.parent(scroll_node)) { |
- if (scroll_node->owning_layer_id == ancestor->id()) |
+ if (scroll_node->id == ancestor_scroll_id->second) |
return true; |
} |
return false; |
@@ -2628,13 +2633,19 @@ static bool IsClosestScrollAncestor(LayerImpl* child, |
DCHECK(scroll_ancestor); |
if (!child) |
return false; |
- ScrollTree& scroll_tree = |
- child->layer_tree_impl()->property_trees()->scroll_tree; |
+ |
+ auto* property_trees = child->layer_tree_impl()->property_trees(); |
+ auto ancestor_scroll_id = |
+ property_trees->layer_id_to_scroll_node_index.find(scroll_ancestor->id()); |
+ if (ancestor_scroll_id == property_trees->layer_id_to_scroll_node_index.end()) |
+ return false; |
+ |
+ ScrollTree& scroll_tree = property_trees->scroll_tree; |
ScrollNode* scroll_node = scroll_tree.Node(child->scroll_tree_index()); |
for (; scroll_tree.parent(scroll_node); |
scroll_node = scroll_tree.parent(scroll_node)) { |
if (scroll_node->scrollable) |
- return scroll_node->owning_layer_id == scroll_ancestor->id(); |
+ return scroll_node->id == ancestor_scroll_id->second; |
} |
return false; |
} |