| 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 26 matching lines...) Expand all Loading... |
| 37 LayerType* transform_fixed_parent; | 37 LayerType* transform_fixed_parent; |
| 38 const LayerType* page_scale_layer; | 38 const LayerType* page_scale_layer; |
| 39 const LayerType* inner_viewport_scroll_layer; | 39 const LayerType* inner_viewport_scroll_layer; |
| 40 const LayerType* outer_viewport_scroll_layer; | 40 const LayerType* outer_viewport_scroll_layer; |
| 41 const LayerType* overscroll_elasticity_layer; | 41 const LayerType* overscroll_elasticity_layer; |
| 42 const gfx::Transform* device_transform; | 42 const gfx::Transform* device_transform; |
| 43 float page_scale_factor; | 43 float page_scale_factor; |
| 44 int clip_tree_parent; | 44 int clip_tree_parent; |
| 45 int effect_tree_parent; | 45 int effect_tree_parent; |
| 46 int scroll_tree_parent; | 46 int scroll_tree_parent; |
| 47 int closest_ancestor_with_cached_render_surface; |
| 47 int closest_ancestor_with_copy_request; | 48 int closest_ancestor_with_copy_request; |
| 48 uint32_t main_thread_scrolling_reasons; | 49 uint32_t main_thread_scrolling_reasons; |
| 49 SkColor safe_opaque_background_color; | 50 SkColor safe_opaque_background_color; |
| 50 bool in_subtree_of_page_scale_layer; | 51 bool in_subtree_of_page_scale_layer; |
| 51 bool affected_by_inner_viewport_bounds_delta; | 52 bool affected_by_inner_viewport_bounds_delta; |
| 52 bool affected_by_outer_viewport_bounds_delta; | 53 bool affected_by_outer_viewport_bounds_delta; |
| 53 bool should_flatten; | 54 bool should_flatten; |
| 54 bool is_hidden; | 55 bool is_hidden; |
| 55 bool scroll_tree_parent_created_by_uninheritable_criteria; | 56 bool scroll_tree_parent_created_by_uninheritable_criteria; |
| 56 bool animation_axis_aligned_since_render_target; | 57 bool animation_axis_aligned_since_render_target; |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 } | 583 } |
| 583 | 584 |
| 584 static inline bool DoubleSided(Layer* layer) { | 585 static inline bool DoubleSided(Layer* layer) { |
| 585 return layer->double_sided(); | 586 return layer->double_sided(); |
| 586 } | 587 } |
| 587 | 588 |
| 588 static inline bool DoubleSided(LayerImpl* layer) { | 589 static inline bool DoubleSided(LayerImpl* layer) { |
| 589 return layer->test_properties()->double_sided; | 590 return layer->test_properties()->double_sided; |
| 590 } | 591 } |
| 591 | 592 |
| 593 static inline bool CacheRenderSurface(Layer* layer) { |
| 594 return layer->cache_render_surface(); |
| 595 } |
| 596 |
| 597 static inline bool CacheRenderSurface(LayerImpl* layer) { |
| 598 return layer->test_properties()->cache_render_surface; |
| 599 } |
| 600 |
| 592 static inline bool ForceRenderSurface(Layer* layer) { | 601 static inline bool ForceRenderSurface(Layer* layer) { |
| 593 return layer->force_render_surface_for_testing(); | 602 return layer->force_render_surface_for_testing(); |
| 594 } | 603 } |
| 595 | 604 |
| 596 static inline bool ForceRenderSurface(LayerImpl* layer) { | 605 static inline bool ForceRenderSurface(LayerImpl* layer) { |
| 597 return layer->test_properties()->force_render_surface; | 606 return layer->test_properties()->force_render_surface; |
| 598 } | 607 } |
| 599 | 608 |
| 600 template <typename LayerType> | 609 template <typename LayerType> |
| 601 static inline bool LayerIsInExisting3DRenderingContext(LayerType* layer) { | 610 static inline bool LayerIsInExisting3DRenderingContext(LayerType* layer) { |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 TRACE_EVENT_INSTANT0( | 797 TRACE_EVENT_INSTANT0( |
| 789 "cc", "PropertyTreeBuilder::ShouldCreateRenderSurface isolation", | 798 "cc", "PropertyTreeBuilder::ShouldCreateRenderSurface isolation", |
| 790 TRACE_EVENT_SCOPE_THREAD); | 799 TRACE_EVENT_SCOPE_THREAD); |
| 791 return true; | 800 return true; |
| 792 } | 801 } |
| 793 | 802 |
| 794 // If we force it. | 803 // If we force it. |
| 795 if (ForceRenderSurface(layer)) | 804 if (ForceRenderSurface(layer)) |
| 796 return true; | 805 return true; |
| 797 | 806 |
| 807 // If we cache it. |
| 808 if (CacheRenderSurface(layer)) |
| 809 return true; |
| 810 |
| 798 // If we'll make a copy of the layer's contents. | 811 // If we'll make a copy of the layer's contents. |
| 799 if (HasCopyRequest(layer)) | 812 if (HasCopyRequest(layer)) |
| 800 return true; | 813 return true; |
| 801 | 814 |
| 802 return false; | 815 return false; |
| 803 } | 816 } |
| 804 | 817 |
| 805 static void TakeCopyRequests( | 818 static void TakeCopyRequests( |
| 806 Layer* layer, | 819 Layer* layer, |
| 807 std::vector<std::unique_ptr<CopyOutputRequest>>* copy_requests) { | 820 std::vector<std::unique_ptr<CopyOutputRequest>>* copy_requests) { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 894 | 907 |
| 895 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; | 908 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; |
| 896 int node_id = effect_tree.Insert(EffectNode(), parent_id); | 909 int node_id = effect_tree.Insert(EffectNode(), parent_id); |
| 897 EffectNode* node = effect_tree.back(); | 910 EffectNode* node = effect_tree.back(); |
| 898 | 911 |
| 899 node->stable_id = layer->id(); | 912 node->stable_id = layer->id(); |
| 900 node->opacity = Opacity(layer); | 913 node->opacity = Opacity(layer); |
| 901 node->blend_mode = BlendMode(layer); | 914 node->blend_mode = BlendMode(layer); |
| 902 node->unscaled_mask_target_size = layer->bounds(); | 915 node->unscaled_mask_target_size = layer->bounds(); |
| 903 node->has_render_surface = should_create_render_surface; | 916 node->has_render_surface = should_create_render_surface; |
| 917 node->cache_render_surface = CacheRenderSurface(layer); |
| 904 node->has_copy_request = HasCopyRequest(layer); | 918 node->has_copy_request = HasCopyRequest(layer); |
| 905 node->filters = Filters(layer); | 919 node->filters = Filters(layer); |
| 906 node->background_filters = BackgroundFilters(layer); | 920 node->background_filters = BackgroundFilters(layer); |
| 907 node->filters_origin = FiltersOrigin(layer); | 921 node->filters_origin = FiltersOrigin(layer); |
| 908 node->has_potential_opacity_animation = has_potential_opacity_animation; | 922 node->has_potential_opacity_animation = has_potential_opacity_animation; |
| 909 node->has_potential_filter_animation = has_potential_filter_animation; | 923 node->has_potential_filter_animation = has_potential_filter_animation; |
| 910 node->double_sided = DoubleSided(layer); | 924 node->double_sided = DoubleSided(layer); |
| 911 node->subtree_hidden = HideLayerAndSubtree(layer); | 925 node->subtree_hidden = HideLayerAndSubtree(layer); |
| 912 node->is_currently_animating_opacity = OpacityIsAnimating(layer); | 926 node->is_currently_animating_opacity = OpacityIsAnimating(layer); |
| 913 node->is_currently_animating_filter = FilterIsAnimating(layer); | 927 node->is_currently_animating_filter = FilterIsAnimating(layer); |
| 914 node->effect_changed = PropertyChanged(layer); | 928 node->effect_changed = PropertyChanged(layer); |
| 915 node->subtree_has_copy_request = SubtreeHasCopyRequest(layer); | 929 node->subtree_has_copy_request = SubtreeHasCopyRequest(layer); |
| 930 node->closest_ancestor_with_cached_render_surface_id = |
| 931 CacheRenderSurface(layer) |
| 932 ? node_id |
| 933 : data_from_ancestor.closest_ancestor_with_cached_render_surface; |
| 916 node->closest_ancestor_with_copy_request_id = | 934 node->closest_ancestor_with_copy_request_id = |
| 917 HasCopyRequest(layer) | 935 HasCopyRequest(layer) |
| 918 ? node_id | 936 ? node_id |
| 919 : data_from_ancestor.closest_ancestor_with_copy_request; | 937 : data_from_ancestor.closest_ancestor_with_copy_request; |
| 920 | 938 |
| 921 if (MaskLayer(layer)) { | 939 if (MaskLayer(layer)) { |
| 922 node->mask_layer_id = MaskLayer(layer)->id(); | 940 node->mask_layer_id = MaskLayer(layer)->id(); |
| 923 effect_tree.AddMaskLayerId(node->mask_layer_id); | 941 effect_tree.AddMaskLayerId(node->mask_layer_id); |
| 924 } | 942 } |
| 925 | 943 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 939 // The root render surface acts as the unbounded and untransformed | 957 // The root render surface acts as the unbounded and untransformed |
| 940 // surface into which content is drawn. The transform node created | 958 // surface into which content is drawn. The transform node created |
| 941 // from the root layer (which includes device scale factor) and | 959 // from the root layer (which includes device scale factor) and |
| 942 // the clip node created from the root layer (which includes | 960 // the clip node created from the root layer (which includes |
| 943 // viewports) apply to the root render surface's content, but not | 961 // viewports) apply to the root render surface's content, but not |
| 944 // to the root render surface itself. | 962 // to the root render surface itself. |
| 945 node->transform_id = TransformTree::kRootNodeId; | 963 node->transform_id = TransformTree::kRootNodeId; |
| 946 node->clip_id = ClipTree::kViewportNodeId; | 964 node->clip_id = ClipTree::kViewportNodeId; |
| 947 } | 965 } |
| 948 | 966 |
| 967 data_for_children->closest_ancestor_with_cached_render_surface = |
| 968 node->closest_ancestor_with_cached_render_surface_id; |
| 949 data_for_children->closest_ancestor_with_copy_request = | 969 data_for_children->closest_ancestor_with_copy_request = |
| 950 node->closest_ancestor_with_copy_request_id; | 970 node->closest_ancestor_with_copy_request_id; |
| 951 data_for_children->effect_tree_parent = node_id; | 971 data_for_children->effect_tree_parent = node_id; |
| 952 layer->SetEffectTreeIndex(node_id); | 972 layer->SetEffectTreeIndex(node_id); |
| 953 | 973 |
| 954 // For animation subsystem purposes, if this layer has a compositor element | 974 // For animation subsystem purposes, if this layer has a compositor element |
| 955 // id, we build a map from that id to this effect node. | 975 // id, we build a map from that id to this effect node. |
| 956 if (layer->element_id()) { | 976 if (layer->element_id()) { |
| 957 data_for_children->property_trees | 977 data_for_children->property_trees |
| 958 ->element_id_to_effect_node_index[layer->element_id()] = node_id; | 978 ->element_id_to_effect_node_index[layer->element_id()] = node_id; |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1229 return; | 1249 return; |
| 1230 } | 1250 } |
| 1231 | 1251 |
| 1232 DataForRecursion<LayerType> data_for_recursion; | 1252 DataForRecursion<LayerType> data_for_recursion; |
| 1233 data_for_recursion.property_trees = property_trees; | 1253 data_for_recursion.property_trees = property_trees; |
| 1234 data_for_recursion.transform_tree_parent = nullptr; | 1254 data_for_recursion.transform_tree_parent = nullptr; |
| 1235 data_for_recursion.transform_fixed_parent = nullptr; | 1255 data_for_recursion.transform_fixed_parent = nullptr; |
| 1236 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; | 1256 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; |
| 1237 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; | 1257 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; |
| 1238 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; | 1258 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; |
| 1259 data_for_recursion.closest_ancestor_with_cached_render_surface = |
| 1260 EffectTree::kInvalidNodeId; |
| 1239 data_for_recursion.closest_ancestor_with_copy_request = | 1261 data_for_recursion.closest_ancestor_with_copy_request = |
| 1240 EffectTree::kInvalidNodeId; | 1262 EffectTree::kInvalidNodeId; |
| 1241 data_for_recursion.page_scale_layer = page_scale_layer; | 1263 data_for_recursion.page_scale_layer = page_scale_layer; |
| 1242 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; | 1264 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; |
| 1243 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; | 1265 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; |
| 1244 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; | 1266 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; |
| 1245 data_for_recursion.elastic_overscroll = elastic_overscroll; | 1267 data_for_recursion.elastic_overscroll = elastic_overscroll; |
| 1246 data_for_recursion.page_scale_factor = page_scale_factor; | 1268 data_for_recursion.page_scale_factor = page_scale_factor; |
| 1247 data_for_recursion.in_subtree_of_page_scale_layer = false; | 1269 data_for_recursion.in_subtree_of_page_scale_layer = false; |
| 1248 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; | 1270 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1365 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1387 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 1366 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1388 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 1367 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1389 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 1368 device_transform, property_trees, color); | 1390 device_transform, property_trees, color); |
| 1369 property_trees->effect_tree.CreateOrReuseRenderSurfaces( | 1391 property_trees->effect_tree.CreateOrReuseRenderSurfaces( |
| 1370 &render_surfaces, root_layer->layer_tree_impl()); | 1392 &render_surfaces, root_layer->layer_tree_impl()); |
| 1371 property_trees->ResetCachedData(); | 1393 property_trees->ResetCachedData(); |
| 1372 } | 1394 } |
| 1373 | 1395 |
| 1374 } // namespace cc | 1396 } // namespace cc |
| OLD | NEW |