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 21 matching lines...) Expand all Loading... | |
32 | 32 |
33 template <typename LayerType> | 33 template <typename LayerType> |
34 struct DataForRecursion { | 34 struct DataForRecursion { |
35 PropertyTrees* property_trees; | 35 PropertyTrees* property_trees; |
36 LayerType* transform_tree_parent; | 36 LayerType* transform_tree_parent; |
37 LayerType* transform_fixed_parent; | 37 LayerType* transform_fixed_parent; |
38 int render_target; | 38 int render_target; |
39 int clip_tree_parent; | 39 int clip_tree_parent; |
40 int effect_tree_parent; | 40 int effect_tree_parent; |
41 int scroll_tree_parent; | 41 int scroll_tree_parent; |
42 int closest_ancestor_with_copy_request; | |
42 const LayerType* page_scale_layer; | 43 const LayerType* page_scale_layer; |
43 const LayerType* inner_viewport_scroll_layer; | 44 const LayerType* inner_viewport_scroll_layer; |
44 const LayerType* outer_viewport_scroll_layer; | 45 const LayerType* outer_viewport_scroll_layer; |
45 const LayerType* overscroll_elasticity_layer; | 46 const LayerType* overscroll_elasticity_layer; |
46 gfx::Vector2dF elastic_overscroll; | 47 gfx::Vector2dF elastic_overscroll; |
47 float page_scale_factor; | 48 float page_scale_factor; |
48 bool in_subtree_of_page_scale_layer; | 49 bool in_subtree_of_page_scale_layer; |
49 bool affected_by_inner_viewport_bounds_delta; | 50 bool affected_by_inner_viewport_bounds_delta; |
50 bool affected_by_outer_viewport_bounds_delta; | 51 bool affected_by_outer_viewport_bounds_delta; |
51 bool should_flatten; | 52 bool should_flatten; |
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
905 int parent_id = data_from_ancestor.effect_tree_parent; | 906 int parent_id = data_from_ancestor.effect_tree_parent; |
906 | 907 |
907 if (!requires_node) { | 908 if (!requires_node) { |
908 layer->SetEffectTreeIndex(parent_id); | 909 layer->SetEffectTreeIndex(parent_id); |
909 data_for_children->effect_tree_parent = parent_id; | 910 data_for_children->effect_tree_parent = parent_id; |
910 data_for_children->compound_transform_since_render_target *= | 911 data_for_children->compound_transform_since_render_target *= |
911 Transform(layer); | 912 Transform(layer); |
912 return false; | 913 return false; |
913 } | 914 } |
914 | 915 |
915 EffectNode node; | 916 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; |
916 node.owning_layer_id = layer->id(); | 917 int node_id = effect_tree.Insert(EffectNode(), parent_id); |
918 EffectNode* node = effect_tree.back(); | |
919 | |
920 node->owning_layer_id = layer->id(); | |
917 if (AlwaysUseActiveTreeOpacity(layer)) { | 921 if (AlwaysUseActiveTreeOpacity(layer)) { |
918 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids | 922 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids |
919 .push_back(node.owning_layer_id); | 923 .push_back(node->owning_layer_id); |
920 } | 924 } |
921 | 925 |
922 node.opacity = Opacity(layer); | 926 node->opacity = Opacity(layer); |
923 node.blend_mode = BlendMode(layer); | 927 node->blend_mode = BlendMode(layer); |
924 node.unscaled_mask_target_size = layer->bounds(); | 928 node->unscaled_mask_target_size = layer->bounds(); |
925 node.has_render_surface = should_create_render_surface; | 929 node->has_render_surface = should_create_render_surface; |
926 node.has_copy_request = HasCopyRequest(layer); | 930 node->has_copy_request = HasCopyRequest(layer); |
927 node.filters = Filters(layer); | 931 node->filters = Filters(layer); |
928 node.background_filters = BackgroundFilters(layer); | 932 node->background_filters = BackgroundFilters(layer); |
929 node.filters_origin = FiltersOrigin(layer); | 933 node->filters_origin = FiltersOrigin(layer); |
930 node.has_potential_opacity_animation = has_potential_opacity_animation; | 934 node->has_potential_opacity_animation = has_potential_opacity_animation; |
931 node.has_potential_filter_animation = has_potential_filter_animation; | 935 node->has_potential_filter_animation = has_potential_filter_animation; |
932 node.double_sided = DoubleSided(layer); | 936 node->double_sided = DoubleSided(layer); |
933 node.subtree_hidden = HideLayerAndSubtree(layer); | 937 node->subtree_hidden = HideLayerAndSubtree(layer); |
934 node.is_currently_animating_opacity = OpacityIsAnimating(layer); | 938 node->is_currently_animating_opacity = OpacityIsAnimating(layer); |
935 node.is_currently_animating_filter = FilterIsAnimating(layer); | 939 node->is_currently_animating_filter = FilterIsAnimating(layer); |
936 node.effect_changed = PropertyChanged(layer); | 940 node->effect_changed = PropertyChanged(layer); |
937 node.subtree_has_copy_request = SubtreeHasCopyRequest(layer); | 941 node->subtree_has_copy_request = SubtreeHasCopyRequest(layer); |
942 node->closest_ancestor_with_copy_request_id = | |
943 HasCopyRequest(layer) | |
944 ? node_id | |
945 : data_from_ancestor.closest_ancestor_with_copy_request; | |
938 | 946 |
939 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; | |
940 if (MaskLayer(layer)) { | 947 if (MaskLayer(layer)) { |
941 node.mask_layer_id = MaskLayer(layer)->id(); | 948 node->mask_layer_id = MaskLayer(layer)->id(); |
942 effect_tree.AddMaskLayerId(node.mask_layer_id); | 949 effect_tree.AddMaskLayerId(node->mask_layer_id); |
943 } | 950 } |
944 | 951 |
945 if (!is_root) { | 952 if (!is_root) { |
946 // The effect node's transform id is used only when we create a render | 953 // The effect node's transform id is used only when we create a render |
947 // surface. So, we can leave the default value when we don't create a render | 954 // surface. So, we can leave the default value when we don't create a render |
948 // surface. | 955 // surface. |
949 if (should_create_render_surface) { | 956 if (should_create_render_surface) { |
950 // In this case, we will create a transform node, so it's safe to use the | 957 // In this case, we will create a transform node, so it's safe to use the |
951 // next available id from the transform tree as this effect node's | 958 // next available id from the transform tree as this effect node's |
952 // transform id. | 959 // transform id. |
953 node.transform_id = | 960 node->transform_id = |
954 data_from_ancestor.property_trees->transform_tree.next_available_id(); | 961 data_from_ancestor.property_trees->transform_tree.next_available_id(); |
955 } | 962 } |
956 node.clip_id = data_from_ancestor.clip_tree_parent; | 963 node->clip_id = data_from_ancestor.clip_tree_parent; |
957 } else { | 964 } else { |
958 // Root render surface acts the unbounded and untransformed to draw content | 965 // Root render surface acts the unbounded and untransformed to draw content |
959 // into. Transform node created from root layer (includes device scale | 966 // into. Transform node created from root layer (includes device scale |
960 // factor) and clip node created from root layer (include viewports) applies | 967 // factor) and clip node created from root layer (include viewports) applies |
961 // to root render surface's content, but not root render surface itself. | 968 // to root render surface's content, but not root render surface itself. |
962 node.transform_id = TransformTree::kRootNodeId; | 969 node->transform_id = TransformTree::kRootNodeId; |
963 node.clip_id = ClipTree::kViewportNodeId; | 970 node->clip_id = ClipTree::kViewportNodeId; |
964 } | 971 } |
965 int node_id = effect_tree.Insert(node, parent_id); | 972 |
jaydasika
2017/05/03 21:14:33
I realized while writing this CL that any updates
| |
973 data_for_children->closest_ancestor_with_copy_request = | |
974 node->closest_ancestor_with_copy_request_id; | |
966 data_for_children->effect_tree_parent = node_id; | 975 data_for_children->effect_tree_parent = node_id; |
967 layer->SetEffectTreeIndex(node_id); | 976 layer->SetEffectTreeIndex(node_id); |
968 data_for_children->property_trees->effect_tree.SetOwningLayerIdForNode( | 977 data_for_children->property_trees->effect_tree.SetOwningLayerIdForNode( |
969 effect_tree.back(), layer->id()); | 978 effect_tree.back(), layer->id()); |
970 | 979 |
971 // For animation subsystem purposes, if this layer has a compositor element | 980 // For animation subsystem purposes, if this layer has a compositor element |
972 // id, we build a map from that id to this effect node. | 981 // id, we build a map from that id to this effect node. |
973 if (layer->element_id()) { | 982 if (layer->element_id()) { |
974 data_for_children->property_trees | 983 data_for_children->property_trees |
975 ->element_id_to_effect_node_index[layer->element_id()] = node_id; | 984 ->element_id_to_effect_node_index[layer->element_id()] = node_id; |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1248 } | 1257 } |
1249 | 1258 |
1250 DataForRecursion<LayerType> data_for_recursion; | 1259 DataForRecursion<LayerType> data_for_recursion; |
1251 data_for_recursion.property_trees = property_trees; | 1260 data_for_recursion.property_trees = property_trees; |
1252 data_for_recursion.transform_tree_parent = nullptr; | 1261 data_for_recursion.transform_tree_parent = nullptr; |
1253 data_for_recursion.transform_fixed_parent = nullptr; | 1262 data_for_recursion.transform_fixed_parent = nullptr; |
1254 data_for_recursion.render_target = EffectTree::kRootNodeId; | 1263 data_for_recursion.render_target = EffectTree::kRootNodeId; |
1255 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; | 1264 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; |
1256 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; | 1265 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; |
1257 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; | 1266 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; |
1267 data_for_recursion.closest_ancestor_with_copy_request = | |
1268 EffectTree::kInvalidNodeId; | |
1258 data_for_recursion.page_scale_layer = page_scale_layer; | 1269 data_for_recursion.page_scale_layer = page_scale_layer; |
1259 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; | 1270 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; |
1260 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; | 1271 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; |
1261 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; | 1272 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; |
1262 data_for_recursion.elastic_overscroll = elastic_overscroll; | 1273 data_for_recursion.elastic_overscroll = elastic_overscroll; |
1263 data_for_recursion.page_scale_factor = page_scale_factor; | 1274 data_for_recursion.page_scale_factor = page_scale_factor; |
1264 data_for_recursion.in_subtree_of_page_scale_layer = false; | 1275 data_for_recursion.in_subtree_of_page_scale_layer = false; |
1265 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; | 1276 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; |
1266 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; | 1277 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; |
1267 data_for_recursion.should_flatten = false; | 1278 data_for_recursion.should_flatten = false; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1381 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1392 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
1382 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1393 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
1383 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1394 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
1384 device_transform, property_trees, color); | 1395 device_transform, property_trees, color); |
1385 property_trees->effect_tree.CreateOrReuseRenderSurfaces( | 1396 property_trees->effect_tree.CreateOrReuseRenderSurfaces( |
1386 &render_surfaces, root_layer->layer_tree_impl()); | 1397 &render_surfaces, root_layer->layer_tree_impl()); |
1387 property_trees->ResetCachedData(); | 1398 property_trees->ResetCachedData(); |
1388 } | 1399 } |
1389 | 1400 |
1390 } // namespace cc | 1401 } // namespace cc |
OLD | NEW |