Index: cc/trees/draw_property_utils.cc |
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc |
index a591845f38b5c02e7e5bde6a6c134e076acbc110..9f3f3120109da91cf31ff25fabbc75aff2ea4b94 100644 |
--- a/cc/trees/draw_property_utils.cc |
+++ b/cc/trees/draw_property_utils.cc |
@@ -17,6 +17,7 @@ |
#include "cc/trees/layer_tree_impl.h" |
#include "cc/trees/property_tree.h" |
#include "cc/trees/property_tree_builder.h" |
+#include "cc/trees/scroll_node.h" |
#include "cc/trees/transform_node.h" |
#include "ui/gfx/geometry/rect_conversions.h" |
@@ -909,6 +910,23 @@ void ComputeClips(PropertyTrees* property_trees, |
clip_tree->set_needs_update(false); |
} |
+void UpdateScrollTree(ScrollTree* scroll_tree, |
+ const LayerTreeHost* layer_tree_host) { |
+ if (!scroll_tree->needs_update()) |
+ return; |
+ |
+ for (int i = ScrollTree::kRootNodeId; |
+ i < static_cast<int>(scroll_tree->size()); ++i) { |
+ ScrollNode* scroll_node = scroll_tree->Node(i); |
+ if (Layer* scroll_layer = |
+ layer_tree_host->LayerById(scroll_node->owning_layer_id)) { |
+ if (Layer* scroll_clip_layer = scroll_layer->scroll_clip_layer()) { |
+ scroll_node->scroll_clip_layer_bounds = scroll_clip_layer->bounds(); |
+ } |
+ } |
+ } |
+} |
+ |
void ComputeTransforms(TransformTree* transform_tree) { |
if (!transform_tree->needs_update()) |
return; |
@@ -1055,8 +1073,12 @@ void ComputeVisibleRects(LayerImpl* root_layer, |
can_render_to_separate_surface); |
} |
-void UpdatePropertyTrees(PropertyTrees* property_trees, |
+void UpdatePropertyTrees(LayerTreeHost* layer_tree_host, |
+ PropertyTrees* property_trees, |
bool can_render_to_separate_surface) { |
+ DCHECK(layer_tree_host); |
+ DCHECK(property_trees); |
+ DCHECK_EQ(layer_tree_host->property_trees(), property_trees); |
if (property_trees->non_root_surfaces_enabled != |
can_render_to_separate_surface) { |
property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; |
@@ -1066,6 +1088,7 @@ void UpdatePropertyTrees(PropertyTrees* property_trees, |
property_trees->clip_tree.set_needs_update(true); |
property_trees->effect_tree.set_needs_update(true); |
} |
+ UpdateScrollTree(&property_trees->scroll_tree, layer_tree_host); |
ComputeTransforms(&property_trees->transform_tree); |
// Computation of clips uses surface contents scale which is updated while |
// computing effects. So, ComputeEffects should be before ComputeClips. |