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