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

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

Issue 2900153002: cc : Remove transform nodes for scroll child (Closed)
Patch Set: 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 | « no previous file | 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 17 matching lines...) Expand all
28 28
29 namespace cc { 29 namespace cc {
30 30
31 namespace { 31 namespace {
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;
39 int clip_tree_parent; 38 int clip_tree_parent;
40 int effect_tree_parent; 39 int effect_tree_parent;
41 int scroll_tree_parent; 40 int scroll_tree_parent;
42 int closest_ancestor_with_copy_request; 41 int closest_ancestor_with_copy_request;
43 const LayerType* page_scale_layer; 42 const LayerType* page_scale_layer;
44 const LayerType* inner_viewport_scroll_layer; 43 const LayerType* inner_viewport_scroll_layer;
45 const LayerType* outer_viewport_scroll_layer; 44 const LayerType* outer_viewport_scroll_layer;
46 const LayerType* overscroll_elasticity_layer; 45 const LayerType* overscroll_elasticity_layer;
47 gfx::Vector2dF elastic_overscroll; 46 gfx::Vector2dF elastic_overscroll;
48 float page_scale_factor; 47 float page_scale_factor;
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 // in the Finished state at tree-building time on the main thread is still in 348 // in the Finished state at tree-building time on the main thread is still in
350 // the Running state right after commit on the compositor thread. 349 // the Running state right after commit on the compositor thread.
351 const bool has_any_transform_animation = 350 const bool has_any_transform_animation =
352 HasAnyAnimationTargetingProperty(layer, TargetProperty::TRANSFORM); 351 HasAnyAnimationTargetingProperty(layer, TargetProperty::TRANSFORM);
353 352
354 const bool has_proxied_transform_related_property = 353 const bool has_proxied_transform_related_property =
355 !!(layer->mutable_properties() & MutableProperty::kTransformRelated); 354 !!(layer->mutable_properties() & MutableProperty::kTransformRelated);
356 355
357 const bool has_surface = created_render_surface; 356 const bool has_surface = created_render_surface;
358 357
359 // A transform node is needed to change the render target for subtree when
360 // a scroll child's render target is different from the scroll parent's render
361 // target.
362 const bool scroll_child_has_different_target =
363 ScrollParent(layer) &&
364 Parent(layer)->effect_tree_index() !=
365 ScrollParent(layer)->effect_tree_index();
366
367 const bool is_at_boundary_of_3d_rendering_context = 358 const bool is_at_boundary_of_3d_rendering_context =
368 IsAtBoundaryOf3dRenderingContext(layer); 359 IsAtBoundaryOf3dRenderingContext(layer);
369 360
370 DCHECK(!is_scrollable || is_snapped); 361 DCHECK(!is_scrollable || is_snapped);
371 bool requires_node = is_root || is_snapped || has_significant_transform || 362 bool requires_node = is_root || is_snapped || has_significant_transform ||
372 has_any_transform_animation || has_surface || is_fixed || 363 has_any_transform_animation || has_surface || is_fixed ||
373 is_page_scale_layer || is_overscroll_elasticity_layer || 364 is_page_scale_layer || is_overscroll_elasticity_layer ||
374 has_proxied_transform_related_property || 365 has_proxied_transform_related_property || is_sticky ||
375 scroll_child_has_different_target || is_sticky ||
376 is_at_boundary_of_3d_rendering_context; 366 is_at_boundary_of_3d_rendering_context;
377 367
378 int parent_index = TransformTree::kRootNodeId; 368 int parent_index = TransformTree::kRootNodeId;
379 int source_index = TransformTree::kRootNodeId; 369 int source_index = TransformTree::kRootNodeId;
380 gfx::Vector2dF source_offset; 370 gfx::Vector2dF source_offset;
381 371
382 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); 372 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer);
383 DCHECK_EQ(is_root, !transform_parent); 373 DCHECK_EQ(is_root, !transform_parent);
384 374
385 if (transform_parent) { 375 if (transform_parent) {
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 LayerType* layer, 1131 LayerType* layer,
1142 const DataForRecursion<LayerType>& data_from_parent) { 1132 const DataForRecursion<LayerType>& data_from_parent) {
1143 layer->set_property_tree_sequence_number( 1133 layer->set_property_tree_sequence_number(
1144 data_from_parent.property_trees->sequence_number); 1134 data_from_parent.property_trees->sequence_number);
1145 1135
1146 DataForRecursion<LayerType> data_for_children(data_from_parent); 1136 DataForRecursion<LayerType> data_for_children(data_from_parent);
1147 1137
1148 bool created_render_surface = 1138 bool created_render_surface =
1149 AddEffectNodeIfNeeded(data_from_parent, layer, &data_for_children); 1139 AddEffectNodeIfNeeded(data_from_parent, layer, &data_for_children);
1150 1140
1151 if (created_render_surface)
1152 data_for_children.render_target = data_for_children.effect_tree_parent;
1153 1141
1154 bool created_transform_node = AddTransformNodeIfNeeded( 1142 bool created_transform_node = AddTransformNodeIfNeeded(
1155 data_from_parent, layer, created_render_surface, &data_for_children); 1143 data_from_parent, layer, created_render_surface, &data_for_children);
1156 AddClipNodeIfNeeded(data_from_parent, layer, created_transform_node, 1144 AddClipNodeIfNeeded(data_from_parent, layer, created_transform_node,
1157 &data_for_children); 1145 &data_for_children);
1158 1146
1159 AddScrollNodeIfNeeded(data_from_parent, layer, &data_for_children); 1147 AddScrollNodeIfNeeded(data_from_parent, layer, &data_for_children);
1160 1148
1161 SetBackfaceVisibilityTransform(layer, created_transform_node); 1149 SetBackfaceVisibilityTransform(layer, created_transform_node);
1162 SetSafeOpaqueBackgroundColor(data_from_parent, layer, &data_for_children); 1150 SetSafeOpaqueBackgroundColor(data_from_parent, layer, &data_for_children);
1163 1151
1164 for (size_t i = 0; i < Children(layer).size(); ++i) { 1152 for (size_t i = 0; i < Children(layer).size(); ++i) {
1165 LayerType* current_child = ChildAt(layer, i); 1153 LayerType* current_child = ChildAt(layer, i);
1166 SetLayerPropertyChangedForChild(layer, current_child); 1154 SetLayerPropertyChangedForChild(layer, current_child);
1167 if (!ScrollParent(current_child)) { 1155 if (!ScrollParent(current_child)) {
1168 BuildPropertyTreesInternal(current_child, data_for_children); 1156 BuildPropertyTreesInternal(current_child, data_for_children);
1169 } else { 1157 } else {
1170 // The child should be included in its scroll parent's list of scroll 1158 // The child should be included in its scroll parent's list of scroll
1171 // children. 1159 // children.
1172 DCHECK(ScrollChildren(ScrollParent(current_child))->count(current_child)); 1160 DCHECK(ScrollChildren(ScrollParent(current_child))->count(current_child));
1173 } 1161 }
1174 } 1162 }
1175 1163
1176 if (ScrollChildren(layer)) { 1164 if (ScrollChildren(layer)) {
1177 for (LayerType* scroll_child : *ScrollChildren(layer)) { 1165 for (LayerType* scroll_child : *ScrollChildren(layer)) {
1178 DCHECK_EQ(ScrollParent(scroll_child), layer); 1166 DCHECK_EQ(ScrollParent(scroll_child), layer);
1179 DCHECK(Parent(scroll_child)); 1167 DCHECK(Parent(scroll_child));
1180 data_for_children.effect_tree_parent = 1168 data_for_children.effect_tree_parent =
1181 Parent(scroll_child)->effect_tree_index(); 1169 Parent(scroll_child)->effect_tree_index();
1182 data_for_children.render_target =
1183 Parent(scroll_child)->effect_tree_index();
1184 BuildPropertyTreesInternal(scroll_child, data_for_children); 1170 BuildPropertyTreesInternal(scroll_child, data_for_children);
1185 } 1171 }
1186 } 1172 }
1187 1173
1188 if (MaskLayer(layer)) { 1174 if (MaskLayer(layer)) {
1189 MaskLayer(layer)->set_property_tree_sequence_number( 1175 MaskLayer(layer)->set_property_tree_sequence_number(
1190 data_from_parent.property_trees->sequence_number); 1176 data_from_parent.property_trees->sequence_number);
1191 MaskLayer(layer)->set_offset_to_transform_parent( 1177 MaskLayer(layer)->set_offset_to_transform_parent(
1192 layer->offset_to_transform_parent()); 1178 layer->offset_to_transform_parent());
1193 MaskLayer(layer)->SetTransformTreeIndex(layer->transform_tree_index()); 1179 MaskLayer(layer)->SetTransformTreeIndex(layer->transform_tree_index());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 property_trees->transform_tree.SetRootTransformsAndScales( 1227 property_trees->transform_tree.SetRootTransformsAndScales(
1242 device_scale_factor, page_scale_factor_for_root, device_transform, 1228 device_scale_factor, page_scale_factor_for_root, device_transform,
1243 root_layer->position()); 1229 root_layer->position());
1244 return; 1230 return;
1245 } 1231 }
1246 1232
1247 DataForRecursion<LayerType> data_for_recursion; 1233 DataForRecursion<LayerType> data_for_recursion;
1248 data_for_recursion.property_trees = property_trees; 1234 data_for_recursion.property_trees = property_trees;
1249 data_for_recursion.transform_tree_parent = nullptr; 1235 data_for_recursion.transform_tree_parent = nullptr;
1250 data_for_recursion.transform_fixed_parent = nullptr; 1236 data_for_recursion.transform_fixed_parent = nullptr;
1251 data_for_recursion.render_target = EffectTree::kRootNodeId;
1252 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId; 1237 data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId;
1253 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId; 1238 data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId;
1254 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId; 1239 data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId;
1255 data_for_recursion.closest_ancestor_with_copy_request = 1240 data_for_recursion.closest_ancestor_with_copy_request =
1256 EffectTree::kInvalidNodeId; 1241 EffectTree::kInvalidNodeId;
1257 data_for_recursion.page_scale_layer = page_scale_layer; 1242 data_for_recursion.page_scale_layer = page_scale_layer;
1258 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer; 1243 data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
1259 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer; 1244 data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
1260 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer; 1245 data_for_recursion.overscroll_elasticity_layer = overscroll_elasticity_layer;
1261 data_for_recursion.elastic_overscroll = elastic_overscroll; 1246 data_for_recursion.elastic_overscroll = elastic_overscroll;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1365 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1381 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1366 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1382 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1367 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1383 device_transform, property_trees, color); 1368 device_transform, property_trees, color);
1384 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1369 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1385 &render_surfaces, root_layer->layer_tree_impl()); 1370 &render_surfaces, root_layer->layer_tree_impl());
1386 property_trees->ResetCachedData(); 1371 property_trees->ResetCachedData();
1387 } 1372 }
1388 1373
1389 } // namespace cc 1374 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698