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<viz::CopyOutputRequest>>* copy_requests) { | 820 std::vector<std::unique_ptr<viz::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 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1239 return; | 1259 return; |
1240 } | 1260 } |
1241 | 1261 |
1242 DataForRecursion<LayerType> data_for_recursion; | 1262 DataForRecursion<LayerType> data_for_recursion; |
1243 data_for_recursion.property_trees = property_trees; | 1263 data_for_recursion.property_trees = property_trees; |
1244 data_for_recursion.transform_tree_parent = nullptr; | 1264 data_for_recursion.transform_tree_parent = nullptr; |
1245 data_for_recursion.transform_fixed_parent = nullptr; | 1265 data_for_recursion.transform_fixed_parent = nullptr; |
1246 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; | 1266 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; |
1247 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; | 1267 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; |
1248 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; | 1268 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; |
| 1269 data_for_recursion.closest_ancestor_with_cached_render_surface = |
| 1270 EffectTree::kInvalidNodeId; |
1249 data_for_recursion.closest_ancestor_with_copy_request = | 1271 data_for_recursion.closest_ancestor_with_copy_request = |
1250 EffectTree::kInvalidNodeId; | 1272 EffectTree::kInvalidNodeId; |
1251 data_for_recursion.page_scale_layer = page_scale_layer; | 1273 data_for_recursion.page_scale_layer = page_scale_layer; |
1252 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; | 1274 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; |
1253 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; | 1275 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; |
1254 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; | 1276 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; |
1255 data_for_recursion.elastic_overscroll = elastic_overscroll; | 1277 data_for_recursion.elastic_overscroll = elastic_overscroll; |
1256 data_for_recursion.page_scale_factor = page_scale_factor; | 1278 data_for_recursion.page_scale_factor = page_scale_factor; |
1257 data_for_recursion.in_subtree_of_page_scale_layer = false; | 1279 data_for_recursion.in_subtree_of_page_scale_layer = false; |
1258 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; | 1280 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1375 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1397 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
1376 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1398 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
1377 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1399 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
1378 device_transform, property_trees, color); | 1400 device_transform, property_trees, color); |
1379 property_trees->effect_tree.CreateOrReuseRenderSurfaces( | 1401 property_trees->effect_tree.CreateOrReuseRenderSurfaces( |
1380 &render_surfaces, root_layer->layer_tree_impl()); | 1402 &render_surfaces, root_layer->layer_tree_impl()); |
1381 property_trees->ResetCachedData(); | 1403 property_trees->ResetCachedData(); |
1382 } | 1404 } |
1383 | 1405 |
1384 } // namespace cc | 1406 } // namespace cc |
OLD | NEW |