| Index: cc/trees/property_tree_builder.cc
|
| diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
|
| index e65cd75526305312fccca5e8a0c56b58813a8bf1..fd4d0c1cc8e213394be3bb33ccf7cfa95764fea7 100644
|
| --- a/cc/trees/property_tree_builder.cc
|
| +++ b/cc/trees/property_tree_builder.cc
|
| @@ -38,6 +38,7 @@ struct DataForRecursion {
|
| int clip_tree_parent;
|
| int effect_tree_parent;
|
| int scroll_tree_parent;
|
| + int closest_ancestor_with_cache_render_surface;
|
| int closest_ancestor_with_copy_request;
|
| const LayerType* page_scale_layer;
|
| const LayerType* inner_viewport_scroll_layer;
|
| @@ -589,6 +590,14 @@ static inline bool DoubleSided(LayerImpl* layer) {
|
| return layer->test_properties()->double_sided;
|
| }
|
|
|
| +static inline bool CacheRenderSurface(Layer* layer) {
|
| + return layer->cache_render_surface();
|
| +}
|
| +
|
| +static inline bool CacheRenderSurface(LayerImpl* layer) {
|
| + return layer->test_properties()->cache_render_surface;
|
| +}
|
| +
|
| static inline bool ForceRenderSurface(Layer* layer) {
|
| return layer->force_render_surface_for_testing();
|
| }
|
| @@ -795,6 +804,10 @@ bool ShouldCreateRenderSurface(LayerType* layer,
|
| if (ForceRenderSurface(layer))
|
| return true;
|
|
|
| + // If we cache it.
|
| + if (CacheRenderSurface(layer))
|
| + return true;
|
| +
|
| // If we'll make a copy of the layer's contents.
|
| if (HasCopyRequest(layer))
|
| return true;
|
| @@ -901,6 +914,7 @@ bool AddEffectNodeIfNeeded(
|
| node->blend_mode = BlendMode(layer);
|
| node->unscaled_mask_target_size = layer->bounds();
|
| node->has_render_surface = should_create_render_surface;
|
| + node->cache_render_surface = CacheRenderSurface(layer);
|
| node->has_copy_request = HasCopyRequest(layer);
|
| node->filters = Filters(layer);
|
| node->background_filters = BackgroundFilters(layer);
|
| @@ -913,6 +927,10 @@ bool AddEffectNodeIfNeeded(
|
| node->is_currently_animating_filter = FilterIsAnimating(layer);
|
| node->effect_changed = PropertyChanged(layer);
|
| node->subtree_has_copy_request = SubtreeHasCopyRequest(layer);
|
| + node->closest_ancestor_with_cache_render_surface_id =
|
| + CacheRenderSurface(layer)
|
| + ? node_id
|
| + : data_from_ancestor.closest_ancestor_with_cache_render_surface;
|
| node->closest_ancestor_with_copy_request_id =
|
| HasCopyRequest(layer)
|
| ? node_id
|
| @@ -946,6 +964,8 @@ bool AddEffectNodeIfNeeded(
|
| node->clip_id = ClipTree::kViewportNodeId;
|
| }
|
|
|
| + data_for_children->closest_ancestor_with_cache_render_surface =
|
| + node->closest_ancestor_with_cache_render_surface_id;
|
| data_for_children->closest_ancestor_with_copy_request =
|
| node->closest_ancestor_with_copy_request_id;
|
| data_for_children->effect_tree_parent = node_id;
|
| @@ -1236,6 +1256,8 @@ void BuildPropertyTreesTopLevelInternal(
|
| data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId;
|
| data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId;
|
| data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId;
|
| + data_for_recursion.closest_ancestor_with_cache_render_surface =
|
| + EffectTree::kInvalidNodeId;
|
| data_for_recursion.closest_ancestor_with_copy_request =
|
| EffectTree::kInvalidNodeId;
|
| data_for_recursion.page_scale_layer = page_scale_layer;
|
|
|