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 |