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 17 matching lines...) Expand all Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |