Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(464)

Side by Side Diff: cc/trees/property_tree_builder.cc

Issue 2873593002: Force use of and cache render surface. (Closed)
Patch Set: Add more tests to surface_aggregator. Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698