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 = |