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

Side by Side Diff: cc/trees/property_tree_builder.cc

Issue 2846653002: cc : Stop pushing layers from hidden subtrees at commit
Patch Set: . 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/property_tree_builder.h" 5 #include "cc/trees/property_tree_builder.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 NumLayerOrDescendantsThatDrawContentRecursive(child_layer); 655 NumLayerOrDescendantsThatDrawContentRecursive(child_layer);
656 } 656 }
657 return num_descendants_that_draw_content; 657 return num_descendants_that_draw_content;
658 } 658 }
659 659
660 static inline float EffectiveOpacity(Layer* layer) { 660 static inline float EffectiveOpacity(Layer* layer) {
661 return layer->EffectiveOpacity(); 661 return layer->EffectiveOpacity();
662 } 662 }
663 663
664 static inline float EffectiveOpacity(LayerImpl* layer) { 664 static inline float EffectiveOpacity(LayerImpl* layer) {
665 return layer->test_properties()->hide_layer_and_subtree 665 return layer->test_properties()->opacity;
666 ? 0.f
667 : layer->test_properties()->opacity;
668 } 666 }
669 667
670 static inline float Opacity(Layer* layer) { 668 static inline float Opacity(Layer* layer) {
671 return layer->opacity(); 669 return layer->opacity();
672 } 670 }
673 671
674 static inline float Opacity(LayerImpl* layer) { 672 static inline float Opacity(LayerImpl* layer) {
675 return layer->test_properties()->opacity; 673 return layer->test_properties()->opacity;
676 } 674 }
677 675
(...skipping 19 matching lines...) Expand all
697 695
698 static inline const FilterOperations& BackgroundFilters(LayerImpl* layer) { 696 static inline const FilterOperations& BackgroundFilters(LayerImpl* layer) {
699 return layer->test_properties()->background_filters; 697 return layer->test_properties()->background_filters;
700 } 698 }
701 699
702 static inline bool HideLayerAndSubtree(Layer* layer) { 700 static inline bool HideLayerAndSubtree(Layer* layer) {
703 return layer->hide_layer_and_subtree(); 701 return layer->hide_layer_and_subtree();
704 } 702 }
705 703
706 static inline bool HideLayerAndSubtree(LayerImpl* layer) { 704 static inline bool HideLayerAndSubtree(LayerImpl* layer) {
707 return layer->test_properties()->hide_layer_and_subtree; 705 return false;
708 } 706 }
709 707
710 static inline bool AlwaysUseActiveTreeOpacity(Layer* layer) { 708 static inline bool AlwaysUseActiveTreeOpacity(Layer* layer) {
711 return layer->AlwaysUseActiveTreeOpacity(); 709 return layer->AlwaysUseActiveTreeOpacity();
712 } 710 }
713 711
714 static inline bool AlwaysUseActiveTreeOpacity(LayerImpl* layer) { 712 static inline bool AlwaysUseActiveTreeOpacity(LayerImpl* layer) {
715 return false; 713 return false;
716 } 714 }
717 715
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 copy_requests->push_back(std::move(request)); 844 copy_requests->push_back(std::move(request));
847 layer->test_properties()->copy_requests.clear(); 845 layer->test_properties()->copy_requests.clear();
848 } 846 }
849 847
850 static void SetSubtreeHasCopyRequest(Layer* layer, 848 static void SetSubtreeHasCopyRequest(Layer* layer,
851 bool subtree_has_copy_request) { 849 bool subtree_has_copy_request) {
852 layer->SetSubtreeHasCopyRequest(subtree_has_copy_request); 850 layer->SetSubtreeHasCopyRequest(subtree_has_copy_request);
853 } 851 }
854 852
855 static void SetSubtreeHasCopyRequest(LayerImpl* layer, 853 static void SetSubtreeHasCopyRequest(LayerImpl* layer,
856 bool subtree_has_copy_request) { 854 bool subtree_has_copy_request) {}
857 layer->test_properties()->subtree_has_copy_request = subtree_has_copy_request;
858 }
859 855
860 static bool SubtreeHasCopyRequest(Layer* layer) { 856 static bool SubtreeHasCopyRequest(Layer* layer) {
861 return layer->SubtreeHasCopyRequest(); 857 return layer->SubtreeHasCopyRequest();
862 } 858 }
863 859
864 static bool SubtreeHasCopyRequest(LayerImpl* layer) { 860 static bool SubtreeHasCopyRequest(LayerImpl* layer) {
865 return layer->test_properties()->subtree_has_copy_request; 861 return false;
866 } 862 }
867 863
868 template <typename LayerType> 864 template <typename LayerType>
869 bool UpdateSubtreeHasCopyRequestRecursive(LayerType* layer) { 865 bool UpdateSubtreeHasCopyRequestRecursive(LayerType* layer) {
870 bool subtree_has_copy_request = false; 866 bool subtree_has_copy_request = false;
871 if (HasCopyRequest(layer)) 867 if (HasCopyRequest(layer))
872 subtree_has_copy_request = true; 868 subtree_has_copy_request = true;
873 for (size_t i = 0; i < Children(layer).size(); ++i) { 869 for (size_t i = 0; i < Children(layer).size(); ++i) {
874 LayerType* current_child = ChildAt(layer, i); 870 LayerType* current_child = ChildAt(layer, i);
875 subtree_has_copy_request |= 871 subtree_has_copy_request |=
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 } 1128 }
1133 1129
1134 static void SetLayerPropertyChangedForChild(Layer* parent, Layer* child) { 1130 static void SetLayerPropertyChangedForChild(Layer* parent, Layer* child) {
1135 if (parent->subtree_property_changed()) 1131 if (parent->subtree_property_changed())
1136 child->SetSubtreePropertyChanged(); 1132 child->SetSubtreePropertyChanged();
1137 } 1133 }
1138 1134
1139 static void SetLayerPropertyChangedForChild(LayerImpl* parent, 1135 static void SetLayerPropertyChangedForChild(LayerImpl* parent,
1140 LayerImpl* child) {} 1136 LayerImpl* child) {}
1141 1137
1138 static bool SubtreeIsHidden(Layer* layer) {
1139 return !SubtreeHasCopyRequest(layer) && layer->parent() &&
1140 layer->hide_layer_and_subtree();
1141 }
1142
1143 static bool SubtreeIsHidden(LayerImpl* layer) {
1144 return false;
1145 }
1146
1147 static void SetIsHidden(Layer* layer, bool is_hidden) {
1148 layer->SetIsHidden(is_hidden);
1149 }
1150
1151 static void SetIsHidden(LayerImpl* layer, bool is_hidden) {}
1152
1153 template <typename LayerType>
1154 void AddPropertyTreeNodesIfNeeded(
1155 LayerType* layer,
1156 const DataForRecursion<LayerType>& data_from_parent,
1157 DataForRecursion<LayerType>* data_for_children) {
1158 DCHECK(!data_for_children->is_hidden);
1159 layer->set_property_tree_sequence_number(
1160 data_from_parent.property_trees->sequence_number);
1161 bool created_render_surface =
1162 AddEffectNodeIfNeeded(data_from_parent, layer, data_for_children);
1163
1164 if (created_render_surface)
1165 data_for_children->render_target = data_for_children->effect_tree_parent;
1166
1167 bool created_transform_node = AddTransformNodeIfNeeded(
1168 data_from_parent, layer, created_render_surface, data_for_children);
1169 AddClipNodeIfNeeded(data_from_parent, layer, created_transform_node,
1170 data_for_children);
1171
1172 AddScrollNodeIfNeeded(data_from_parent, layer, data_for_children);
1173
1174 SetBackfaceVisibilityTransform(layer, created_transform_node);
1175 SetSafeOpaqueBackgroundColor(data_from_parent, layer, data_for_children);
1176 }
1177
1142 template <typename LayerType> 1178 template <typename LayerType>
1143 void BuildPropertyTreesInternal( 1179 void BuildPropertyTreesInternal(
1144 LayerType* layer, 1180 LayerType* layer,
1145 const DataForRecursion<LayerType>& data_from_parent) { 1181 const DataForRecursion<LayerType>& data_from_parent) {
1146 layer->set_property_tree_sequence_number(
1147 data_from_parent.property_trees->sequence_number);
1148
1149 DataForRecursion<LayerType> data_for_children(data_from_parent); 1182 DataForRecursion<LayerType> data_for_children(data_from_parent);
1150 1183
1151 bool created_render_surface = 1184 data_for_children.is_hidden =
1152 AddEffectNodeIfNeeded(data_from_parent, layer, &data_for_children); 1185 data_from_parent.is_hidden || SubtreeIsHidden(layer);
1153 1186
1154 if (created_render_surface) 1187 SetIsHidden(layer, data_for_children.is_hidden);
1155 data_for_children.render_target = data_for_children.effect_tree_parent;
1156 1188
1157 bool created_transform_node = AddTransformNodeIfNeeded( 1189 // We do not create property tree nodes for hidden layers.
1158 data_from_parent, layer, created_render_surface, &data_for_children); 1190 if (!data_for_children.is_hidden)
1159 AddClipNodeIfNeeded(data_from_parent, layer, created_transform_node, 1191 AddPropertyTreeNodesIfNeeded(layer, data_from_parent, &data_for_children);
1160 &data_for_children);
1161
1162 AddScrollNodeIfNeeded(data_from_parent, layer, &data_for_children);
1163
1164 SetBackfaceVisibilityTransform(layer, created_transform_node);
1165 SetSafeOpaqueBackgroundColor(data_from_parent, layer, &data_for_children);
1166 1192
1167 for (size_t i = 0; i < Children(layer).size(); ++i) { 1193 for (size_t i = 0; i < Children(layer).size(); ++i) {
1168 LayerType* current_child = ChildAt(layer, i); 1194 LayerType* current_child = ChildAt(layer, i);
1169 SetLayerPropertyChangedForChild(layer, current_child); 1195 SetLayerPropertyChangedForChild(layer, current_child);
1170 if (!ScrollParent(current_child)) { 1196 if (!ScrollParent(current_child)) {
1171 BuildPropertyTreesInternal(current_child, data_for_children); 1197 BuildPropertyTreesInternal(current_child, data_for_children);
1172 } else { 1198 } else {
1173 // The child should be included in its scroll parent's list of scroll 1199 // The child should be included in its scroll parent's list of scroll
1174 // children. 1200 // children.
1175 DCHECK(ScrollChildren(ScrollParent(current_child))->count(current_child)); 1201 DCHECK(ScrollChildren(ScrollParent(current_child))->count(current_child));
1176 } 1202 }
1177 } 1203 }
1178 1204
1179 if (ScrollChildren(layer)) { 1205 if (ScrollChildren(layer)) {
1180 for (LayerType* scroll_child : *ScrollChildren(layer)) { 1206 for (LayerType* scroll_child : *ScrollChildren(layer)) {
1181 DCHECK_EQ(ScrollParent(scroll_child), layer); 1207 DCHECK_EQ(ScrollParent(scroll_child), layer);
1182 DCHECK(Parent(scroll_child)); 1208 DCHECK(Parent(scroll_child));
1183 data_for_children.effect_tree_parent = 1209 data_for_children.effect_tree_parent =
1184 Parent(scroll_child)->effect_tree_index(); 1210 Parent(scroll_child)->effect_tree_index();
1185 data_for_children.render_target = 1211 data_for_children.render_target =
1186 Parent(scroll_child)->effect_tree_index(); 1212 Parent(scroll_child)->effect_tree_index();
1187 BuildPropertyTreesInternal(scroll_child, data_for_children); 1213 BuildPropertyTreesInternal(scroll_child, data_for_children);
1188 } 1214 }
1189 } 1215 }
1190 1216
1191 if (MaskLayer(layer)) { 1217 if (!data_for_children.is_hidden && MaskLayer(layer)) {
1192 MaskLayer(layer)->set_property_tree_sequence_number( 1218 MaskLayer(layer)->set_property_tree_sequence_number(
1193 data_from_parent.property_trees->sequence_number); 1219 data_from_parent.property_trees->sequence_number);
1194 MaskLayer(layer)->set_offset_to_transform_parent( 1220 MaskLayer(layer)->set_offset_to_transform_parent(
1195 layer->offset_to_transform_parent()); 1221 layer->offset_to_transform_parent());
1196 MaskLayer(layer)->SetTransformTreeIndex(layer->transform_tree_index()); 1222 MaskLayer(layer)->SetTransformTreeIndex(layer->transform_tree_index());
1197 MaskLayer(layer)->SetClipTreeIndex(layer->clip_tree_index()); 1223 MaskLayer(layer)->SetClipTreeIndex(layer->clip_tree_index());
1198 MaskLayer(layer)->SetEffectTreeIndex(layer->effect_tree_index()); 1224 MaskLayer(layer)->SetEffectTreeIndex(layer->effect_tree_index());
1199 MaskLayer(layer)->SetScrollTreeIndex(layer->scroll_tree_index()); 1225 MaskLayer(layer)->SetScrollTreeIndex(layer->scroll_tree_index());
1200 } 1226 }
1201 } 1227 }
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1407 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1382 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1408 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1383 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1409 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1384 device_transform, property_trees, color); 1410 device_transform, property_trees, color);
1385 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1411 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1386 &render_surfaces, root_layer->layer_tree_impl()); 1412 &render_surfaces, root_layer->layer_tree_impl());
1387 property_trees->ResetCachedData(); 1413 property_trees->ResetCachedData();
1388 } 1414 }
1389 1415
1390 } // namespace cc 1416 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698