Index: cc/trees/property_tree_builder.cc |
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc |
index f539966fa199a80c8bbbbd6e473f4d8a360111bc..8d041ad4750cefa04d260f1927280841b6982c79 100644 |
--- a/cc/trees/property_tree_builder.cc |
+++ b/cc/trees/property_tree_builder.cc |
@@ -663,9 +663,7 @@ static inline float EffectiveOpacity(Layer* layer) { |
} |
static inline float EffectiveOpacity(LayerImpl* layer) { |
- return layer->test_properties()->hide_layer_and_subtree |
- ? 0.f |
- : layer->test_properties()->opacity; |
+ return layer->test_properties()->opacity; |
} |
static inline float Opacity(Layer* layer) { |
@@ -705,7 +703,7 @@ static inline bool HideLayerAndSubtree(Layer* layer) { |
} |
static inline bool HideLayerAndSubtree(LayerImpl* layer) { |
- return layer->test_properties()->hide_layer_and_subtree; |
+ return false; |
} |
static inline bool HasCopyRequest(Layer* layer) { |
@@ -845,16 +843,14 @@ static void SetSubtreeHasCopyRequest(Layer* layer, |
} |
static void SetSubtreeHasCopyRequest(LayerImpl* layer, |
- bool subtree_has_copy_request) { |
- layer->test_properties()->subtree_has_copy_request = subtree_has_copy_request; |
-} |
+ bool subtree_has_copy_request) {} |
static bool SubtreeHasCopyRequest(Layer* layer) { |
return layer->SubtreeHasCopyRequest(); |
} |
static bool SubtreeHasCopyRequest(LayerImpl* layer) { |
- return layer->test_properties()->subtree_has_copy_request; |
+ return false; |
} |
template <typename LayerType> |
@@ -1134,30 +1130,77 @@ static void SetLayerPropertyChangedForChild(Layer* parent, Layer* child) { |
static void SetLayerPropertyChangedForChild(LayerImpl* parent, |
LayerImpl* child) {} |
+static bool SubtreeIsHidden(Layer* layer) { |
+ return !SubtreeHasCopyRequest(layer) && layer->parent() && |
+ layer->hide_layer_and_subtree(); |
+} |
+ |
+static bool SubtreeIsHidden(LayerImpl* layer) { |
+ return false; |
+} |
+ |
+static void SetIsHidden(Layer* layer, bool is_hidden) { |
+ layer->SetIsHidden(is_hidden); |
+} |
+ |
+static void SetIsHidden(LayerImpl* layer, bool is_hidden) {} |
+ |
+static bool IsSurfaceLayer(Layer* layer) { |
+ return layer->IsSurfaceLayer(); |
+} |
+ |
+static bool IsSurfaceLayer(LayerImpl* layer) { |
+ return false; |
+} |
+ |
+static void AddHiddenSurfaceLayerId(Layer* layer) { |
+ layer->layer_tree_host()->AddHiddenSurfaceLayerId(layer); |
+} |
+ |
+static void AddHiddenSurfaceLayerId(LayerImpl* layer) {} |
+ |
template <typename LayerType> |
-void BuildPropertyTreesInternal( |
+void AddPropertyTreeNodesIfNeeded( |
LayerType* layer, |
- const DataForRecursion<LayerType>& data_from_parent) { |
+ const DataForRecursion<LayerType>& data_from_parent, |
+ DataForRecursion<LayerType>* data_for_children) { |
+ DCHECK(!data_for_children->is_hidden); |
layer->set_property_tree_sequence_number( |
data_from_parent.property_trees->sequence_number); |
- |
- DataForRecursion<LayerType> data_for_children(data_from_parent); |
- |
bool created_render_surface = |
- AddEffectNodeIfNeeded(data_from_parent, layer, &data_for_children); |
+ AddEffectNodeIfNeeded(data_from_parent, layer, data_for_children); |
if (created_render_surface) |
- data_for_children.render_target = data_for_children.effect_tree_parent; |
+ data_for_children->render_target = data_for_children->effect_tree_parent; |
bool created_transform_node = AddTransformNodeIfNeeded( |
- data_from_parent, layer, created_render_surface, &data_for_children); |
+ data_from_parent, layer, created_render_surface, data_for_children); |
AddClipNodeIfNeeded(data_from_parent, layer, created_transform_node, |
- &data_for_children); |
+ data_for_children); |
- AddScrollNodeIfNeeded(data_from_parent, layer, &data_for_children); |
+ AddScrollNodeIfNeeded(data_from_parent, layer, data_for_children); |
SetBackfaceVisibilityTransform(layer, created_transform_node); |
- SetSafeOpaqueBackgroundColor(data_from_parent, layer, &data_for_children); |
+ SetSafeOpaqueBackgroundColor(data_from_parent, layer, data_for_children); |
+} |
+ |
+template <typename LayerType> |
+void BuildPropertyTreesInternal( |
+ LayerType* layer, |
+ const DataForRecursion<LayerType>& data_from_parent) { |
+ DataForRecursion<LayerType> data_for_children(data_from_parent); |
+ |
+ data_for_children.is_hidden = |
+ data_from_parent.is_hidden || SubtreeIsHidden(layer); |
+ |
+ SetIsHidden(layer, data_for_children.is_hidden); |
+ |
+ // We do not create property tree nodes for hidden layers. |
+ if (!data_for_children.is_hidden) { |
+ AddPropertyTreeNodesIfNeeded(layer, data_from_parent, &data_for_children); |
+ } else if (IsSurfaceLayer(layer)) { |
+ AddHiddenSurfaceLayerId(layer); |
+ } |
for (size_t i = 0; i < Children(layer).size(); ++i) { |
LayerType* current_child = ChildAt(layer, i); |
@@ -1183,7 +1226,7 @@ void BuildPropertyTreesInternal( |
} |
} |
- if (MaskLayer(layer)) { |
+ if (!data_for_children.is_hidden && MaskLayer(layer)) { |
enne (OOO)
2017/05/19 22:27:05
Maybe this should early out after the loop through
jaydasika
2017/05/23 00:25:14
Done.
|
MaskLayer(layer)->set_property_tree_sequence_number( |
data_from_parent.property_trees->sequence_number); |
MaskLayer(layer)->set_offset_to_transform_parent( |