OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |