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

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

Issue 2856043002: cc : Layers with singular transforms and copy request should be drawn (Closed)
Patch Set: comments Created 3 years, 7 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
« no previous file with comments | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 21 matching lines...) Expand all
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 render_target; 38 int render_target;
39 int clip_tree_parent; 39 int clip_tree_parent;
40 int effect_tree_parent; 40 int effect_tree_parent;
41 int scroll_tree_parent; 41 int scroll_tree_parent;
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;
51 bool should_flatten; 52 bool should_flatten;
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 int parent_id = data_from_ancestor.effect_tree_parent; 906 int parent_id = data_from_ancestor.effect_tree_parent;
906 907
907 if (!requires_node) { 908 if (!requires_node) {
908 layer->SetEffectTreeIndex(parent_id); 909 layer->SetEffectTreeIndex(parent_id);
909 data_for_children->effect_tree_parent = parent_id; 910 data_for_children->effect_tree_parent = parent_id;
910 data_for_children->compound_transform_since_render_target *= 911 data_for_children->compound_transform_since_render_target *=
911 Transform(layer); 912 Transform(layer);
912 return false; 913 return false;
913 } 914 }
914 915
915 EffectNode node; 916 EffectTree& effect_tree = data_for_children->property_trees->effect_tree;
916 node.owning_layer_id = layer->id(); 917 int node_id = effect_tree.Insert(EffectNode(), parent_id);
918 EffectNode* node = effect_tree.back();
919
920 node->owning_layer_id = layer->id();
917 if (AlwaysUseActiveTreeOpacity(layer)) { 921 if (AlwaysUseActiveTreeOpacity(layer)) {
918 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids 922 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids
919 .push_back(node.owning_layer_id); 923 .push_back(node->owning_layer_id);
920 } 924 }
921 925
922 node.opacity = Opacity(layer); 926 node->opacity = Opacity(layer);
923 node.blend_mode = BlendMode(layer); 927 node->blend_mode = BlendMode(layer);
924 node.unscaled_mask_target_size = layer->bounds(); 928 node->unscaled_mask_target_size = layer->bounds();
925 node.has_render_surface = should_create_render_surface; 929 node->has_render_surface = should_create_render_surface;
926 node.has_copy_request = HasCopyRequest(layer); 930 node->has_copy_request = HasCopyRequest(layer);
927 node.filters = Filters(layer); 931 node->filters = Filters(layer);
928 node.background_filters = BackgroundFilters(layer); 932 node->background_filters = BackgroundFilters(layer);
929 node.filters_origin = FiltersOrigin(layer); 933 node->filters_origin = FiltersOrigin(layer);
930 node.has_potential_opacity_animation = has_potential_opacity_animation; 934 node->has_potential_opacity_animation = has_potential_opacity_animation;
931 node.has_potential_filter_animation = has_potential_filter_animation; 935 node->has_potential_filter_animation = has_potential_filter_animation;
932 node.double_sided = DoubleSided(layer); 936 node->double_sided = DoubleSided(layer);
933 node.subtree_hidden = HideLayerAndSubtree(layer); 937 node->subtree_hidden = HideLayerAndSubtree(layer);
934 node.is_currently_animating_opacity = OpacityIsAnimating(layer); 938 node->is_currently_animating_opacity = OpacityIsAnimating(layer);
935 node.is_currently_animating_filter = FilterIsAnimating(layer); 939 node->is_currently_animating_filter = FilterIsAnimating(layer);
936 node.effect_changed = PropertyChanged(layer); 940 node->effect_changed = PropertyChanged(layer);
937 node.subtree_has_copy_request = SubtreeHasCopyRequest(layer); 941 node->subtree_has_copy_request = SubtreeHasCopyRequest(layer);
942 node->closest_ancestor_with_copy_request_id =
943 HasCopyRequest(layer)
944 ? node_id
945 : data_from_ancestor.closest_ancestor_with_copy_request;
938 946
939 EffectTree& effect_tree = data_for_children->property_trees->effect_tree;
940 if (MaskLayer(layer)) { 947 if (MaskLayer(layer)) {
941 node.mask_layer_id = MaskLayer(layer)->id(); 948 node->mask_layer_id = MaskLayer(layer)->id();
942 effect_tree.AddMaskLayerId(node.mask_layer_id); 949 effect_tree.AddMaskLayerId(node->mask_layer_id);
943 } 950 }
944 951
945 if (!is_root) { 952 if (!is_root) {
946 // The effect node's transform id is used only when we create a render 953 // The effect node's transform id is used only when we create a render
947 // surface. So, we can leave the default value when we don't create a render 954 // surface. So, we can leave the default value when we don't create a render
948 // surface. 955 // surface.
949 if (should_create_render_surface) { 956 if (should_create_render_surface) {
950 // In this case, we will create a transform node, so it's safe to use the 957 // In this case, we will create a transform node, so it's safe to use the
951 // next available id from the transform tree as this effect node's 958 // next available id from the transform tree as this effect node's
952 // transform id. 959 // transform id.
953 node.transform_id = 960 node->transform_id =
954 data_from_ancestor.property_trees->transform_tree.next_available_id(); 961 data_from_ancestor.property_trees->transform_tree.next_available_id();
955 } 962 }
956 node.clip_id = data_from_ancestor.clip_tree_parent; 963 node->clip_id = data_from_ancestor.clip_tree_parent;
957 } else { 964 } else {
958 // Root render surface acts the unbounded and untransformed to draw content 965 // Root render surface acts the unbounded and untransformed to draw content
959 // into. Transform node created from root layer (includes device scale 966 // into. Transform node created from root layer (includes device scale
960 // factor) and clip node created from root layer (include viewports) applies 967 // factor) and clip node created from root layer (include viewports) applies
961 // to root render surface's content, but not root render surface itself. 968 // to root render surface's content, but not root render surface itself.
962 node.transform_id = TransformTree::kRootNodeId; 969 node->transform_id = TransformTree::kRootNodeId;
963 node.clip_id = ClipTree::kViewportNodeId; 970 node->clip_id = ClipTree::kViewportNodeId;
964 } 971 }
965 int node_id = effect_tree.Insert(node, parent_id); 972
jaydasika 2017/05/03 21:14:33 I realized while writing this CL that any updates
973 data_for_children->closest_ancestor_with_copy_request =
974 node->closest_ancestor_with_copy_request_id;
966 data_for_children->effect_tree_parent = node_id; 975 data_for_children->effect_tree_parent = node_id;
967 layer->SetEffectTreeIndex(node_id); 976 layer->SetEffectTreeIndex(node_id);
968 data_for_children->property_trees->effect_tree.SetOwningLayerIdForNode( 977 data_for_children->property_trees->effect_tree.SetOwningLayerIdForNode(
969 effect_tree.back(), layer->id()); 978 effect_tree.back(), layer->id());
970 979
971 // For animation subsystem purposes, if this layer has a compositor element 980 // For animation subsystem purposes, if this layer has a compositor element
972 // id, we build a map from that id to this effect node. 981 // id, we build a map from that id to this effect node.
973 if (layer->element_id()) { 982 if (layer->element_id()) {
974 data_for_children->property_trees 983 data_for_children->property_trees
975 ->element_id_to_effect_node_index[layer->element_id()] = node_id; 984 ->element_id_to_effect_node_index[layer->element_id()] = node_id;
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 } 1257 }
1249 1258
1250 DataForRecursion<LayerType> data_for_recursion; 1259 DataForRecursion<LayerType> data_for_recursion;
1251 data_for_recursion.property_trees = property_trees; 1260 data_for_recursion.property_trees = property_trees;
1252 data_for_recursion.transform_tree_parent = nullptr; 1261 data_for_recursion.transform_tree_parent = nullptr;
1253 data_for_recursion.transform_fixed_parent = nullptr; 1262 data_for_recursion.transform_fixed_parent = nullptr;
1254 data_for_recursion.render_target = EffectTree::kRootNodeId; 1263 data_for_recursion.render_target = EffectTree::kRootNodeId;
1255 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; 1264 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId;
1256 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; 1265 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId;
1257 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; 1266 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId;
1267 data_for_recursion.closest_ancestor_with_copy_request =
1268 EffectTree::kInvalidNodeId;
1258 data_for_recursion.page_scale_layer = page_scale_layer; 1269 data_for_recursion.page_scale_layer = page_scale_layer;
1259 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; 1270 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
1260 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; 1271 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
1261 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; 1272 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer;
1262 data_for_recursion.elastic_overscroll = elastic_overscroll; 1273 data_for_recursion.elastic_overscroll = elastic_overscroll;
1263 data_for_recursion.page_scale_factor = page_scale_factor; 1274 data_for_recursion.page_scale_factor = page_scale_factor;
1264 data_for_recursion.in_subtree_of_page_scale_layer = false; 1275 data_for_recursion.in_subtree_of_page_scale_layer = false;
1265 data_for_recursion.affected_by_inner_viewport_bounds_delta = false; 1276 data_for_recursion.affected_by_inner_viewport_bounds_delta = false;
1266 data_for_recursion.affected_by_outer_viewport_bounds_delta = false; 1277 data_for_recursion.affected_by_outer_viewport_bounds_delta = false;
1267 data_for_recursion.should_flatten = false; 1278 data_for_recursion.should_flatten = false;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1392 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1382 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1393 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1383 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1394 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1384 device_transform, property_trees, color); 1395 device_transform, property_trees, color);
1385 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1396 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1386 &render_surfaces, root_layer->layer_tree_impl()); 1397 &render_surfaces, root_layer->layer_tree_impl());
1387 property_trees->ResetCachedData(); 1398 property_trees->ResetCachedData();
1388 } 1399 }
1389 1400
1390 } // namespace cc 1401 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698