Chromium Code Reviews| 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( |