| 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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 data_for_children->clip_tree->Insert(node, parent_id); | 190 data_for_children->clip_tree->Insert(node, parent_id); |
| 191 } | 191 } |
| 192 | 192 |
| 193 layer->SetClipTreeIndex(data_for_children->clip_tree_parent); | 193 layer->SetClipTreeIndex(data_for_children->clip_tree_parent); |
| 194 // TODO(awoloszyn): Right now when we hit a node with a replica, we reset the | 194 // TODO(awoloszyn): Right now when we hit a node with a replica, we reset the |
| 195 // clip for all children since we may need to draw. We need to figure out a | 195 // clip for all children since we may need to draw. We need to figure out a |
| 196 // better way, since we will need both the clipped and unclipped versions. | 196 // better way, since we will need both the clipped and unclipped versions. |
| 197 } | 197 } |
| 198 | 198 |
| 199 template <typename LayerType> | 199 template <typename LayerType> |
| 200 static bool IsRootLayerOfNewRenderingContext(LayerType* layer) { |
| 201 if (layer->parent()) |
| 202 return !layer->parent()->Is3dSorted() && layer->Is3dSorted(); |
| 203 return layer->Is3dSorted(); |
| 204 } |
| 205 |
| 206 template <typename LayerType> |
| 207 static bool EndsExisiting3dRenderingContext(LayerType* layer) { |
| 208 return layer->parent() ? layer->parent()->Is3dSorted() && !layer->Is3dSorted() |
| 209 : false; |
| 210 } |
| 211 |
| 212 template <typename LayerType> |
| 200 bool AddTransformNodeIfNeeded( | 213 bool AddTransformNodeIfNeeded( |
| 201 const DataForRecursion<LayerType>& data_from_ancestor, | 214 const DataForRecursion<LayerType>& data_from_ancestor, |
| 202 LayerType* layer, | 215 LayerType* layer, |
| 203 bool created_render_surface, | 216 bool created_render_surface, |
| 204 DataForRecursion<LayerType>* data_for_children) { | 217 DataForRecursion<LayerType>* data_for_children) { |
| 205 const bool is_root = !layer->parent(); | 218 const bool is_root = !layer->parent(); |
| 206 const bool is_page_scale_layer = layer == data_from_ancestor.page_scale_layer; | 219 const bool is_page_scale_layer = layer == data_from_ancestor.page_scale_layer; |
| 207 const bool is_overscroll_elasticity_layer = | 220 const bool is_overscroll_elasticity_layer = |
| 208 layer == data_from_ancestor.overscroll_elasticity_layer; | 221 layer == data_from_ancestor.overscroll_elasticity_layer; |
| 209 const bool is_scrollable = layer->scrollable(); | 222 const bool is_scrollable = layer->scrollable(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 225 const bool has_surface = created_render_surface; | 238 const bool has_surface = created_render_surface; |
| 226 | 239 |
| 227 // A transform node is needed to change the render target for subtree when | 240 // A transform node is needed to change the render target for subtree when |
| 228 // a scroll child's render target is different from the scroll parent's render | 241 // a scroll child's render target is different from the scroll parent's render |
| 229 // target. | 242 // target. |
| 230 const bool scroll_child_has_different_target = | 243 const bool scroll_child_has_different_target = |
| 231 layer->scroll_parent() && | 244 layer->scroll_parent() && |
| 232 layer->parent()->effect_tree_index() != | 245 layer->parent()->effect_tree_index() != |
| 233 layer->scroll_parent()->effect_tree_index(); | 246 layer->scroll_parent()->effect_tree_index(); |
| 234 | 247 |
| 248 const bool is_root_of_new_rendering_context = |
| 249 IsRootLayerOfNewRenderingContext(layer); |
| 250 const bool ends_3d_rendering_context = EndsExisiting3dRenderingContext(layer); |
| 251 |
| 235 bool requires_node = is_root || is_scrollable || has_significant_transform || | 252 bool requires_node = is_root || is_scrollable || has_significant_transform || |
| 236 has_any_transform_animation || has_surface || is_fixed || | 253 has_any_transform_animation || has_surface || is_fixed || |
| 237 is_page_scale_layer || is_overscroll_elasticity_layer || | 254 is_page_scale_layer || is_overscroll_elasticity_layer || |
| 238 scroll_child_has_different_target; | 255 scroll_child_has_different_target || |
| 256 is_root_of_new_rendering_context || |
| 257 ends_3d_rendering_context; |
| 239 | 258 |
| 240 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); | 259 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); |
| 241 DCHECK(is_root || transform_parent); | 260 DCHECK(is_root || transform_parent); |
| 242 | 261 |
| 243 int parent_index = kRootPropertyTreeNodeId; | 262 int parent_index = kRootPropertyTreeNodeId; |
| 244 if (transform_parent) | 263 if (transform_parent) |
| 245 parent_index = transform_parent->transform_tree_index(); | 264 parent_index = transform_parent->transform_tree_index(); |
| 246 | 265 |
| 247 int source_index = parent_index; | 266 int source_index = parent_index; |
| 248 | 267 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 data_for_children->transform_tree->Insert(TransformNode(), parent_index); | 324 data_for_children->transform_tree->Insert(TransformNode(), parent_index); |
| 306 | 325 |
| 307 TransformNode* node = data_for_children->transform_tree->back(); | 326 TransformNode* node = data_for_children->transform_tree->back(); |
| 308 layer->SetTransformTreeIndex(node->id); | 327 layer->SetTransformTreeIndex(node->id); |
| 309 if (layer->mask_layer()) | 328 if (layer->mask_layer()) |
| 310 layer->mask_layer()->SetTransformTreeIndex(node->id); | 329 layer->mask_layer()->SetTransformTreeIndex(node->id); |
| 311 | 330 |
| 312 node->data.scrolls = is_scrollable; | 331 node->data.scrolls = is_scrollable; |
| 313 node->data.flattens_inherited_transform = data_for_children->should_flatten; | 332 node->data.flattens_inherited_transform = data_for_children->should_flatten; |
| 314 | 333 |
| 334 node->data.is_3d_sorted = layer->Is3dSorted(); |
| 335 |
| 315 if (layer == data_from_ancestor.page_scale_layer) | 336 if (layer == data_from_ancestor.page_scale_layer) |
| 316 data_for_children->in_subtree_of_page_scale_layer = true; | 337 data_for_children->in_subtree_of_page_scale_layer = true; |
| 317 node->data.in_subtree_of_page_scale_layer = | 338 node->data.in_subtree_of_page_scale_layer = |
| 318 data_for_children->in_subtree_of_page_scale_layer; | 339 data_for_children->in_subtree_of_page_scale_layer; |
| 319 | 340 |
| 320 // Surfaces inherently flatten transforms. | 341 // Surfaces inherently flatten transforms. |
| 321 data_for_children->should_flatten = | 342 data_for_children->should_flatten = |
| 322 layer->should_flatten_transform() || has_surface; | 343 layer->should_flatten_transform() || has_surface; |
| 323 DCHECK_GT(data_from_ancestor.effect_tree->size(), 0u); | 344 DCHECK_GT(data_from_ancestor.effect_tree->size(), 0u); |
| 324 | 345 |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 const gfx::Transform& device_transform, | 828 const gfx::Transform& device_transform, |
| 808 PropertyTrees* property_trees) { | 829 PropertyTrees* property_trees) { |
| 809 BuildPropertyTreesTopLevelInternal( | 830 BuildPropertyTreesTopLevelInternal( |
| 810 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 831 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 811 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 832 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 812 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 833 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 813 device_transform, property_trees); | 834 device_transform, property_trees); |
| 814 } | 835 } |
| 815 | 836 |
| 816 } // namespace cc | 837 } // namespace cc |
| OLD | NEW |