Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4035)

Unified Diff: cc/trees/property_tree_builder.cc

Issue 2846653002: cc : Stop pushing layers from hidden subtrees at commit
Patch Set: fix cc_unittests after rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698