| 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 20 matching lines...) Expand all Loading... |
| 31 namespace { | 31 namespace { |
| 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 clip_tree_parent; | 38 int clip_tree_parent; |
| 39 int effect_tree_parent; | 39 int effect_tree_parent; |
| 40 int scroll_tree_parent; | 40 int scroll_tree_parent; |
| 41 int closest_ancestor_with_cache_render_surface; |
| 41 int closest_ancestor_with_copy_request; | 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; |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 } | 600 } |
| 600 | 601 |
| 601 static inline bool DoubleSided(Layer* layer) { | 602 static inline bool DoubleSided(Layer* layer) { |
| 602 return layer->double_sided(); | 603 return layer->double_sided(); |
| 603 } | 604 } |
| 604 | 605 |
| 605 static inline bool DoubleSided(LayerImpl* layer) { | 606 static inline bool DoubleSided(LayerImpl* layer) { |
| 606 return layer->test_properties()->double_sided; | 607 return layer->test_properties()->double_sided; |
| 607 } | 608 } |
| 608 | 609 |
| 610 static inline bool CacheRenderSurface(Layer* layer) { |
| 611 return layer->cache_render_surface(); |
| 612 } |
| 613 |
| 614 static inline bool CacheRenderSurface(LayerImpl* layer) { |
| 615 return layer->test_properties()->cache_render_surface; |
| 616 } |
| 617 |
| 609 static inline bool ForceRenderSurface(Layer* layer) { | 618 static inline bool ForceRenderSurface(Layer* layer) { |
| 610 return layer->force_render_surface_for_testing(); | 619 return layer->force_render_surface_for_testing(); |
| 611 } | 620 } |
| 612 | 621 |
| 613 static inline bool ForceRenderSurface(LayerImpl* layer) { | 622 static inline bool ForceRenderSurface(LayerImpl* layer) { |
| 614 return layer->test_properties()->force_render_surface; | 623 return layer->test_properties()->force_render_surface; |
| 615 } | 624 } |
| 616 | 625 |
| 617 template <typename LayerType> | 626 template <typename LayerType> |
| 618 static inline bool LayerIsInExisting3DRenderingContext(LayerType* layer) { | 627 static inline bool LayerIsInExisting3DRenderingContext(LayerType* layer) { |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 TRACE_EVENT_INSTANT0( | 814 TRACE_EVENT_INSTANT0( |
| 806 "cc", "PropertyTreeBuilder::ShouldCreateRenderSurface isolation", | 815 "cc", "PropertyTreeBuilder::ShouldCreateRenderSurface isolation", |
| 807 TRACE_EVENT_SCOPE_THREAD); | 816 TRACE_EVENT_SCOPE_THREAD); |
| 808 return true; | 817 return true; |
| 809 } | 818 } |
| 810 | 819 |
| 811 // If we force it. | 820 // If we force it. |
| 812 if (ForceRenderSurface(layer)) | 821 if (ForceRenderSurface(layer)) |
| 813 return true; | 822 return true; |
| 814 | 823 |
| 824 // If we cache it. |
| 825 if (CacheRenderSurface(layer)) |
| 826 return true; |
| 827 |
| 815 // If we'll make a copy of the layer's contents. | 828 // If we'll make a copy of the layer's contents. |
| 816 if (HasCopyRequest(layer)) | 829 if (HasCopyRequest(layer)) |
| 817 return true; | 830 return true; |
| 818 | 831 |
| 819 return false; | 832 return false; |
| 820 } | 833 } |
| 821 | 834 |
| 822 static void TakeCopyRequests( | 835 static void TakeCopyRequests( |
| 823 Layer* layer, | 836 Layer* layer, |
| 824 std::vector<std::unique_ptr<CopyOutputRequest>>* copy_requests) { | 837 std::vector<std::unique_ptr<CopyOutputRequest>>* copy_requests) { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 | 924 |
| 912 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; | 925 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; |
| 913 int node_id = effect_tree.Insert(EffectNode(), parent_id); | 926 int node_id = effect_tree.Insert(EffectNode(), parent_id); |
| 914 EffectNode* node = effect_tree.back(); | 927 EffectNode* node = effect_tree.back(); |
| 915 | 928 |
| 916 node->stable_id = layer->id(); | 929 node->stable_id = layer->id(); |
| 917 node->opacity = Opacity(layer); | 930 node->opacity = Opacity(layer); |
| 918 node->blend_mode = BlendMode(layer); | 931 node->blend_mode = BlendMode(layer); |
| 919 node->unscaled_mask_target_size = layer->bounds(); | 932 node->unscaled_mask_target_size = layer->bounds(); |
| 920 node->has_render_surface = should_create_render_surface; | 933 node->has_render_surface = should_create_render_surface; |
| 934 node->cache_render_surface = CacheRenderSurface(layer); |
| 921 node->has_copy_request = HasCopyRequest(layer); | 935 node->has_copy_request = HasCopyRequest(layer); |
| 922 node->filters = Filters(layer); | 936 node->filters = Filters(layer); |
| 923 node->background_filters = BackgroundFilters(layer); | 937 node->background_filters = BackgroundFilters(layer); |
| 924 node->filters_origin = FiltersOrigin(layer); | 938 node->filters_origin = FiltersOrigin(layer); |
| 925 node->has_potential_opacity_animation = has_potential_opacity_animation; | 939 node->has_potential_opacity_animation = has_potential_opacity_animation; |
| 926 node->has_potential_filter_animation = has_potential_filter_animation; | 940 node->has_potential_filter_animation = has_potential_filter_animation; |
| 927 node->double_sided = DoubleSided(layer); | 941 node->double_sided = DoubleSided(layer); |
| 928 node->subtree_hidden = HideLayerAndSubtree(layer); | 942 node->subtree_hidden = HideLayerAndSubtree(layer); |
| 929 node->is_currently_animating_opacity = OpacityIsAnimating(layer); | 943 node->is_currently_animating_opacity = OpacityIsAnimating(layer); |
| 930 node->is_currently_animating_filter = FilterIsAnimating(layer); | 944 node->is_currently_animating_filter = FilterIsAnimating(layer); |
| 931 node->effect_changed = PropertyChanged(layer); | 945 node->effect_changed = PropertyChanged(layer); |
| 932 node->subtree_has_copy_request = SubtreeHasCopyRequest(layer); | 946 node->subtree_has_copy_request = SubtreeHasCopyRequest(layer); |
| 947 node->closest_ancestor_with_cache_render_surface_id = |
| 948 CacheRenderSurface(layer) |
| 949 ? node_id |
| 950 : data_from_ancestor.closest_ancestor_with_cache_render_surface; |
| 933 node->closest_ancestor_with_copy_request_id = | 951 node->closest_ancestor_with_copy_request_id = |
| 934 HasCopyRequest(layer) | 952 HasCopyRequest(layer) |
| 935 ? node_id | 953 ? node_id |
| 936 : data_from_ancestor.closest_ancestor_with_copy_request; | 954 : data_from_ancestor.closest_ancestor_with_copy_request; |
| 937 | 955 |
| 938 if (MaskLayer(layer)) { | 956 if (MaskLayer(layer)) { |
| 939 node->mask_layer_id = MaskLayer(layer)->id(); | 957 node->mask_layer_id = MaskLayer(layer)->id(); |
| 940 effect_tree.AddMaskLayerId(node->mask_layer_id); | 958 effect_tree.AddMaskLayerId(node->mask_layer_id); |
| 941 } | 959 } |
| 942 | 960 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 956 // The root render surface acts as the unbounded and untransformed | 974 // The root render surface acts as the unbounded and untransformed |
| 957 // surface into which content is drawn. The transform node created | 975 // surface into which content is drawn. The transform node created |
| 958 // from the root layer (which includes device scale factor) and | 976 // from the root layer (which includes device scale factor) and |
| 959 // the clip node created from the root layer (which includes | 977 // the clip node created from the root layer (which includes |
| 960 // viewports) apply to the root render surface's content, but not | 978 // viewports) apply to the root render surface's content, but not |
| 961 // to the root render surface itself. | 979 // to the root render surface itself. |
| 962 node->transform_id = TransformTree::kRootNodeId; | 980 node->transform_id = TransformTree::kRootNodeId; |
| 963 node->clip_id = ClipTree::kViewportNodeId; | 981 node->clip_id = ClipTree::kViewportNodeId; |
| 964 } | 982 } |
| 965 | 983 |
| 984 data_for_children->closest_ancestor_with_cache_render_surface = |
| 985 node->closest_ancestor_with_cache_render_surface_id; |
| 966 data_for_children->closest_ancestor_with_copy_request = | 986 data_for_children->closest_ancestor_with_copy_request = |
| 967 node->closest_ancestor_with_copy_request_id; | 987 node->closest_ancestor_with_copy_request_id; |
| 968 data_for_children->effect_tree_parent = node_id; | 988 data_for_children->effect_tree_parent = node_id; |
| 969 layer->SetEffectTreeIndex(node_id); | 989 layer->SetEffectTreeIndex(node_id); |
| 970 | 990 |
| 971 // For animation subsystem purposes, if this layer has a compositor element | 991 // For animation subsystem purposes, if this layer has a compositor element |
| 972 // id, we build a map from that id to this effect node. | 992 // id, we build a map from that id to this effect node. |
| 973 if (layer->element_id()) { | 993 if (layer->element_id()) { |
| 974 data_for_children->property_trees | 994 data_for_children->property_trees |
| 975 ->element_id_to_effect_node_index[layer->element_id()] = node_id; | 995 ->element_id_to_effect_node_index[layer->element_id()] = node_id; |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1269 return; | 1289 return; |
| 1270 } | 1290 } |
| 1271 | 1291 |
| 1272 DataForRecursion<LayerType> data_for_recursion; | 1292 DataForRecursion<LayerType> data_for_recursion; |
| 1273 data_for_recursion.property_trees = property_trees; | 1293 data_for_recursion.property_trees = property_trees; |
| 1274 data_for_recursion.transform_tree_parent = nullptr; | 1294 data_for_recursion.transform_tree_parent = nullptr; |
| 1275 data_for_recursion.transform_fixed_parent = nullptr; | 1295 data_for_recursion.transform_fixed_parent = nullptr; |
| 1276 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; | 1296 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; |
| 1277 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; | 1297 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; |
| 1278 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; | 1298 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; |
| 1299 data_for_recursion.closest_ancestor_with_cache_render_surface = |
| 1300 EffectTree::kInvalidNodeId; |
| 1279 data_for_recursion.closest_ancestor_with_copy_request = | 1301 data_for_recursion.closest_ancestor_with_copy_request = |
| 1280 EffectTree::kInvalidNodeId; | 1302 EffectTree::kInvalidNodeId; |
| 1281 data_for_recursion.page_scale_layer = page_scale_layer; | 1303 data_for_recursion.page_scale_layer = page_scale_layer; |
| 1282 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; | 1304 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; |
| 1283 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; | 1305 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; |
| 1284 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; | 1306 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; |
| 1285 data_for_recursion.elastic_overscroll = elastic_overscroll; | 1307 data_for_recursion.elastic_overscroll = elastic_overscroll; |
| 1286 data_for_recursion.page_scale_factor = page_scale_factor; | 1308 data_for_recursion.page_scale_factor = page_scale_factor; |
| 1287 data_for_recursion.in_subtree_of_page_scale_layer = false; | 1309 data_for_recursion.in_subtree_of_page_scale_layer = false; |
| 1288 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; | 1310 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1405 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1427 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 1406 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1428 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 1407 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1429 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 1408 device_transform, property_trees, color); | 1430 device_transform, property_trees, color); |
| 1409 property_trees->effect_tree.CreateOrReuseRenderSurfaces( | 1431 property_trees->effect_tree.CreateOrReuseRenderSurfaces( |
| 1410 &render_surfaces, root_layer->layer_tree_impl()); | 1432 &render_surfaces, root_layer->layer_tree_impl()); |
| 1411 property_trees->ResetCachedData(); | 1433 property_trees->ResetCachedData(); |
| 1412 } | 1434 } |
| 1413 | 1435 |
| 1414 } // namespace cc | 1436 } // namespace cc |
| OLD | NEW |