| Index: cc/trees/property_tree_builder.cc
|
| diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
|
| index a27bd3c8bf6e0d2575138592243cdb29d565bcf1..a8c01e240de7f5027e0db7cdf052b47a3fe90ab8 100644
|
| --- a/cc/trees/property_tree_builder.cc
|
| +++ b/cc/trees/property_tree_builder.cc
|
| @@ -197,6 +197,19 @@ void AddClipNodeIfNeeded(const DataForRecursion<LayerType>& data_from_ancestor,
|
| }
|
|
|
| template <typename LayerType>
|
| +static bool IsRootLayerOfNewRenderingContext(LayerType* layer) {
|
| + if (layer->parent())
|
| + return !layer->parent()->Is3dSorted() && layer->Is3dSorted();
|
| + return layer->Is3dSorted();
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +static bool EndsExisiting3dRenderingContext(LayerType* layer) {
|
| + return layer->parent() ? layer->parent()->Is3dSorted() && !layer->Is3dSorted()
|
| + : false;
|
| +}
|
| +
|
| +template <typename LayerType>
|
| bool AddTransformNodeIfNeeded(
|
| const DataForRecursion<LayerType>& data_from_ancestor,
|
| LayerType* layer,
|
| @@ -232,10 +245,16 @@ bool AddTransformNodeIfNeeded(
|
| layer->parent()->effect_tree_index() !=
|
| layer->scroll_parent()->effect_tree_index();
|
|
|
| + const bool is_root_of_new_rendering_context =
|
| + IsRootLayerOfNewRenderingContext(layer);
|
| + const bool ends_3d_rendering_context = EndsExisiting3dRenderingContext(layer);
|
| +
|
| bool requires_node = is_root || is_scrollable || has_significant_transform ||
|
| has_any_transform_animation || has_surface || is_fixed ||
|
| is_page_scale_layer || is_overscroll_elasticity_layer ||
|
| - scroll_child_has_different_target;
|
| + scroll_child_has_different_target ||
|
| + is_root_of_new_rendering_context ||
|
| + ends_3d_rendering_context;
|
|
|
| LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer);
|
| DCHECK(is_root || transform_parent);
|
| @@ -312,6 +331,8 @@ bool AddTransformNodeIfNeeded(
|
| node->data.scrolls = is_scrollable;
|
| node->data.flattens_inherited_transform = data_for_children->should_flatten;
|
|
|
| + node->data.is_3d_sorted = layer->Is3dSorted();
|
| +
|
| if (layer == data_from_ancestor.page_scale_layer)
|
| data_for_children->in_subtree_of_page_scale_layer = true;
|
| node->data.in_subtree_of_page_scale_layer =
|
|
|