| 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 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 | 331 |
| 332 template <typename LayerType> | 332 template <typename LayerType> |
| 333 static void SetSurfaceIsClipped(DataForRecursion<LayerType>* data_for_children, | 333 static void SetSurfaceIsClipped(DataForRecursion<LayerType>* data_for_children, |
| 334 bool apply_ancestor_clip, | 334 bool apply_ancestor_clip, |
| 335 LayerType* layer) { | 335 LayerType* layer) { |
| 336 // A surface with unclipped descendants cannot be clipped by its ancestor | 336 // A surface with unclipped descendants cannot be clipped by its ancestor |
| 337 // clip at draw time since the unclipped descendants aren't affected by the | 337 // clip at draw time since the unclipped descendants aren't affected by the |
| 338 // ancestor clip. | 338 // ancestor clip. |
| 339 EffectNode* effect_node = data_for_children->property_trees->effect_tree.Node( | 339 EffectNode* effect_node = data_for_children->property_trees->effect_tree.Node( |
| 340 data_for_children->render_target); | 340 data_for_children->render_target); |
| 341 DCHECK_EQ(effect_node->owner_id, layer->id()); | 341 DCHECK_EQ(effect_node->owning_layer_id, layer->id()); |
| 342 effect_node->surface_is_clipped = | 342 effect_node->surface_is_clipped = |
| 343 apply_ancestor_clip && !NumUnclippedDescendants(layer); | 343 apply_ancestor_clip && !NumUnclippedDescendants(layer); |
| 344 // The ancestor clip should propagate to children only if the surface doesn't | 344 // The ancestor clip should propagate to children only if the surface doesn't |
| 345 // apply the clip. | 345 // apply the clip. |
| 346 data_for_children->apply_ancestor_clip = | 346 data_for_children->apply_ancestor_clip = |
| 347 apply_ancestor_clip && !effect_node->surface_is_clipped; | 347 apply_ancestor_clip && !effect_node->surface_is_clipped; |
| 348 } | 348 } |
| 349 | 349 |
| 350 template <typename LayerType> | 350 template <typename LayerType> |
| 351 void AddClipNodeIfNeeded(const DataForRecursion<LayerType>& data_from_ancestor, | 351 void AddClipNodeIfNeeded(const DataForRecursion<LayerType>& data_from_ancestor, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 transform_parent = data_for_children->transform_fixed_parent; | 416 transform_parent = data_for_children->transform_fixed_parent; |
| 417 } | 417 } |
| 418 ClipNode node; | 418 ClipNode node; |
| 419 node.clip = gfx::RectF(gfx::PointF() + layer->offset_to_transform_parent(), | 419 node.clip = gfx::RectF(gfx::PointF() + layer->offset_to_transform_parent(), |
| 420 gfx::SizeF(layer->bounds())); | 420 gfx::SizeF(layer->bounds())); |
| 421 node.transform_id = transform_parent->transform_tree_index(); | 421 node.transform_id = transform_parent->transform_tree_index(); |
| 422 node.target_effect_id = data_for_children->render_target; | 422 node.target_effect_id = data_for_children->render_target; |
| 423 node.target_transform_id = data_for_children->property_trees->effect_tree | 423 node.target_transform_id = data_for_children->property_trees->effect_tree |
| 424 .Node(data_for_children->render_target) | 424 .Node(data_for_children->render_target) |
| 425 ->transform_id; | 425 ->transform_id; |
| 426 node.owner_id = layer->id(); | 426 node.owning_layer_id = layer->id(); |
| 427 | 427 |
| 428 if (apply_ancestor_clip || layer_clips_subtree) { | 428 if (apply_ancestor_clip || layer_clips_subtree) { |
| 429 // Surfaces reset the rect used for layer clipping. At other nodes, layer | 429 // Surfaces reset the rect used for layer clipping. At other nodes, layer |
| 430 // clipping state from ancestors must continue to get propagated. | 430 // clipping state from ancestors must continue to get propagated. |
| 431 node.layer_clipping_uses_only_local_clip = | 431 node.layer_clipping_uses_only_local_clip = |
| 432 (created_render_surface && NumUnclippedDescendants(layer) == 0) || | 432 (created_render_surface && NumUnclippedDescendants(layer) == 0) || |
| 433 !apply_ancestor_clip; | 433 !apply_ancestor_clip; |
| 434 } else { | 434 } else { |
| 435 // Otherwise, we're either unclipped, or exist only in order to apply our | 435 // Otherwise, we're either unclipped, or exist only in order to apply our |
| 436 // parent's clips in our space. | 436 // parent's clips in our space. |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 } | 733 } |
| 734 | 734 |
| 735 node->needs_local_transform_update = true; | 735 node->needs_local_transform_update = true; |
| 736 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); | 736 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); |
| 737 | 737 |
| 738 layer->set_offset_to_transform_parent(gfx::Vector2dF()); | 738 layer->set_offset_to_transform_parent(gfx::Vector2dF()); |
| 739 | 739 |
| 740 // Flattening (if needed) will be handled by |node|. | 740 // Flattening (if needed) will be handled by |node|. |
| 741 layer->set_should_flatten_transform_from_property_tree(false); | 741 layer->set_should_flatten_transform_from_property_tree(false); |
| 742 | 742 |
| 743 node->owner_id = layer->id(); | 743 node->owning_layer_id = layer->id(); |
| 744 | 744 |
| 745 return true; | 745 return true; |
| 746 } | 746 } |
| 747 | 747 |
| 748 static inline bool HasPotentialOpacityAnimation(Layer* layer) { | 748 static inline bool HasPotentialOpacityAnimation(Layer* layer) { |
| 749 return HasPotentiallyRunningOpacityAnimation(layer) || | 749 return HasPotentiallyRunningOpacityAnimation(layer) || |
| 750 layer->OpacityCanAnimateOnImplThread(); | 750 layer->OpacityCanAnimateOnImplThread(); |
| 751 } | 751 } |
| 752 | 752 |
| 753 static inline bool HasPotentialOpacityAnimation(LayerImpl* layer) { | 753 static inline bool HasPotentialOpacityAnimation(LayerImpl* layer) { |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1018 | 1018 |
| 1019 if (!requires_node) { | 1019 if (!requires_node) { |
| 1020 layer->SetEffectTreeIndex(parent_id); | 1020 layer->SetEffectTreeIndex(parent_id); |
| 1021 data_for_children->effect_tree_parent = parent_id; | 1021 data_for_children->effect_tree_parent = parent_id; |
| 1022 data_for_children->compound_transform_since_render_target *= | 1022 data_for_children->compound_transform_since_render_target *= |
| 1023 Transform(layer); | 1023 Transform(layer); |
| 1024 return false; | 1024 return false; |
| 1025 } | 1025 } |
| 1026 | 1026 |
| 1027 EffectNode node; | 1027 EffectNode node; |
| 1028 node.owner_id = layer->id(); | 1028 node.owning_layer_id = layer->id(); |
| 1029 if (AlwaysUseActiveTreeOpacity(layer)) { | 1029 if (AlwaysUseActiveTreeOpacity(layer)) { |
| 1030 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids | 1030 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids |
| 1031 .push_back(node.owner_id); | 1031 .push_back(node.owning_layer_id); |
| 1032 } | 1032 } |
| 1033 | 1033 |
| 1034 node.opacity = Opacity(layer); | 1034 node.opacity = Opacity(layer); |
| 1035 node.blend_mode = BlendMode(layer); | 1035 node.blend_mode = BlendMode(layer); |
| 1036 node.unscaled_mask_target_size = layer->bounds(); | 1036 node.unscaled_mask_target_size = layer->bounds(); |
| 1037 node.has_render_surface = should_create_render_surface; | 1037 node.has_render_surface = should_create_render_surface; |
| 1038 node.has_copy_request = HasCopyRequest(layer); | 1038 node.has_copy_request = HasCopyRequest(layer); |
| 1039 node.filters = Filters(layer); | 1039 node.filters = Filters(layer); |
| 1040 node.background_filters = BackgroundFilters(layer); | 1040 node.background_filters = BackgroundFilters(layer); |
| 1041 node.filters_origin = FiltersOrigin(layer); | 1041 node.filters_origin = FiltersOrigin(layer); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 (main_thread_scrolling_reasons != | 1119 (main_thread_scrolling_reasons != |
| 1120 MainThreadScrollingReason::kNotScrollingOnMain && | 1120 MainThreadScrollingReason::kNotScrollingOnMain && |
| 1121 (has_different_main_thread_scrolling_reasons || | 1121 (has_different_main_thread_scrolling_reasons || |
| 1122 data_from_ancestor | 1122 data_from_ancestor |
| 1123 .scroll_tree_parent_created_by_uninheritable_criteria)); | 1123 .scroll_tree_parent_created_by_uninheritable_criteria)); |
| 1124 | 1124 |
| 1125 if (!requires_node) { | 1125 if (!requires_node) { |
| 1126 data_for_children->scroll_tree_parent = parent_id; | 1126 data_for_children->scroll_tree_parent = parent_id; |
| 1127 } else { | 1127 } else { |
| 1128 ScrollNode node; | 1128 ScrollNode node; |
| 1129 node.owner_id = layer->id(); | 1129 node.owning_layer_id = layer->id(); |
| 1130 node.scrollable = scrollable; | 1130 node.scrollable = scrollable; |
| 1131 node.main_thread_scrolling_reasons = main_thread_scrolling_reasons; | 1131 node.main_thread_scrolling_reasons = main_thread_scrolling_reasons; |
| 1132 node.contains_non_fast_scrollable_region = | 1132 node.contains_non_fast_scrollable_region = |
| 1133 contains_non_fast_scrollable_region; | 1133 contains_non_fast_scrollable_region; |
| 1134 gfx::Size clip_bounds; | 1134 gfx::Size clip_bounds; |
| 1135 if (layer->scroll_clip_layer()) { | 1135 if (layer->scroll_clip_layer()) { |
| 1136 clip_bounds = layer->scroll_clip_layer()->bounds(); | 1136 clip_bounds = layer->scroll_clip_layer()->bounds(); |
| 1137 DCHECK(layer->scroll_clip_layer()->transform_tree_index() != | 1137 DCHECK(layer->scroll_clip_layer()->transform_tree_index() != |
| 1138 kInvalidPropertyTreeNodeId); | 1138 kInvalidPropertyTreeNodeId); |
| 1139 node.max_scroll_offset_affected_by_page_scale = | 1139 node.max_scroll_offset_affected_by_page_scale = |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1302 layer->offset_to_transform_parent()); | 1302 layer->offset_to_transform_parent()); |
| 1303 MaskLayer(layer)->SetTransformTreeIndex(layer->transform_tree_index()); | 1303 MaskLayer(layer)->SetTransformTreeIndex(layer->transform_tree_index()); |
| 1304 MaskLayer(layer)->SetClipTreeIndex(layer->clip_tree_index()); | 1304 MaskLayer(layer)->SetClipTreeIndex(layer->clip_tree_index()); |
| 1305 MaskLayer(layer)->SetEffectTreeIndex(layer->effect_tree_index()); | 1305 MaskLayer(layer)->SetEffectTreeIndex(layer->effect_tree_index()); |
| 1306 MaskLayer(layer)->SetScrollTreeIndex(layer->scroll_tree_index()); | 1306 MaskLayer(layer)->SetScrollTreeIndex(layer->scroll_tree_index()); |
| 1307 } | 1307 } |
| 1308 | 1308 |
| 1309 EffectNode* effect_node = data_for_children.property_trees->effect_tree.Node( | 1309 EffectNode* effect_node = data_for_children.property_trees->effect_tree.Node( |
| 1310 data_for_children.effect_tree_parent); | 1310 data_for_children.effect_tree_parent); |
| 1311 | 1311 |
| 1312 if (effect_node->owner_id == layer->id()) { | 1312 if (effect_node->owning_layer_id == layer->id()) { |
| 1313 if (effect_node->has_copy_request) | 1313 if (effect_node->has_copy_request) |
| 1314 data_to_parent->num_copy_requests_in_subtree++; | 1314 data_to_parent->num_copy_requests_in_subtree++; |
| 1315 effect_node->num_copy_requests_in_subtree = | 1315 effect_node->num_copy_requests_in_subtree = |
| 1316 data_to_parent->num_copy_requests_in_subtree; | 1316 data_to_parent->num_copy_requests_in_subtree; |
| 1317 } | 1317 } |
| 1318 } | 1318 } |
| 1319 | 1319 |
| 1320 } // namespace | 1320 } // namespace |
| 1321 | 1321 |
| 1322 void CC_EXPORT | 1322 void CC_EXPORT |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1504 color = SkColorSetA(color, 255); | 1504 color = SkColorSetA(color, 255); |
| 1505 BuildPropertyTreesTopLevelInternal( | 1505 BuildPropertyTreesTopLevelInternal( |
| 1506 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1506 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 1507 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1507 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 1508 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1508 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 1509 device_transform, property_trees, color); | 1509 device_transform, property_trees, color); |
| 1510 property_trees->ResetCachedData(); | 1510 property_trees->ResetCachedData(); |
| 1511 } | 1511 } |
| 1512 | 1512 |
| 1513 } // namespace cc | 1513 } // namespace cc |
| OLD | NEW |