| 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/draw_property_utils.h" | 5 #include "cc/trees/draw_property_utils.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 if (layer->has_render_surface()) | 46 if (layer->has_render_surface()) |
| 47 return; | 47 return; |
| 48 | 48 |
| 49 DCHECK(layer->filters().IsEmpty()) << "layer: " << layer->id(); | 49 DCHECK(layer->filters().IsEmpty()) << "layer: " << layer->id(); |
| 50 DCHECK(layer->background_filters().IsEmpty()) << "layer: " << layer->id(); | 50 DCHECK(layer->background_filters().IsEmpty()) << "layer: " << layer->id(); |
| 51 DCHECK(!IsRootLayer(layer)) << "layer: " << layer->id(); | 51 DCHECK(!IsRootLayer(layer)) << "layer: " << layer->id(); |
| 52 if (EffectNodeOwner(layer)->replica_layer() == layer) | 52 if (EffectNodeOwner(layer)->replica_layer() == layer) |
| 53 return; | 53 return; |
| 54 DCHECK(!layer->mask_layer()) << "layer: " << layer->id(); | 54 DCHECK(!layer->mask_layer()) << "layer: " << layer->id(); |
| 55 DCHECK(!layer->replica_layer()) << "layer: " << layer->id(); | 55 DCHECK(!layer->replica_layer()) << "layer: " << layer->id(); |
| 56 DCHECK(!layer->HasCopyRequest()) << "layer: " << layer->id(); | |
| 57 } | 56 } |
| 58 | 57 |
| 59 #endif | 58 #endif |
| 60 | 59 |
| 61 template <typename LayerType> | 60 template <typename LayerType> |
| 62 void CalculateVisibleRects( | 61 void CalculateVisibleRects( |
| 63 const typename LayerType::LayerListType& visible_layer_list, | 62 const typename LayerType::LayerListType& visible_layer_list, |
| 64 const ClipTree& clip_tree, | 63 const ClipTree& clip_tree, |
| 65 const TransformTree& transform_tree, | 64 const TransformTree& transform_tree, |
| 65 const EffectTree& effect_tree, |
| 66 bool non_root_surfaces_enabled) { | 66 bool non_root_surfaces_enabled) { |
| 67 for (auto& layer : visible_layer_list) { | 67 for (auto& layer : visible_layer_list) { |
| 68 gfx::Size layer_bounds = layer->bounds(); | 68 gfx::Size layer_bounds = layer->bounds(); |
| 69 const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); | 69 const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); |
| 70 const bool is_unclipped = clip_node->data.resets_clip && | 70 const bool is_unclipped = clip_node->data.resets_clip && |
| 71 !clip_node->data.applies_local_clip && | 71 !clip_node->data.applies_local_clip && |
| 72 non_root_surfaces_enabled; | 72 non_root_surfaces_enabled; |
| 73 // When both the layer and the target are unclipped, the entire layer | 73 // When both the layer and the target are unclipped, the entire layer |
| 74 // content rect is visible. | 74 // content rect is visible. |
| 75 const bool fully_visible = !clip_node->data.layers_are_clipped && | 75 const bool fully_visible = !clip_node->data.layers_are_clipped && |
| 76 !clip_node->data.target_is_clipped && | 76 !clip_node->data.target_is_clipped && |
| 77 non_root_surfaces_enabled; | 77 non_root_surfaces_enabled; |
| 78 const TransformNode* transform_node = | 78 const TransformNode* transform_node = |
| 79 transform_tree.Node(layer->transform_tree_index()); | 79 transform_tree.Node(layer->transform_tree_index()); |
| 80 if (!is_unclipped && !fully_visible) { | 80 if (!is_unclipped && !fully_visible) { |
| 81 // The entire layer is visible if it has copy requests. | 81 // The entire layer is visible if it has copy requests. |
| 82 if (layer->HasCopyRequest()) { | 82 const EffectNode* effect_node = |
| 83 effect_tree.Node(layer->effect_tree_index()); |
| 84 if (effect_node->data.has_copy_request && |
| 85 effect_node->owner_id == layer->id()) { |
| 83 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); | 86 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); |
| 84 continue; | 87 continue; |
| 85 } | 88 } |
| 86 | 89 |
| 87 const TransformNode* target_node = | 90 const TransformNode* target_node = |
| 88 non_root_surfaces_enabled | 91 non_root_surfaces_enabled |
| 89 ? transform_tree.Node(transform_node->data.content_target_id) | 92 ? transform_tree.Node(transform_node->data.content_target_id) |
| 90 : transform_tree.Node(0); | 93 : transform_tree.Node(0); |
| 91 | 94 |
| 92 // The clip node stores clip rect in its target space. If required, | 95 // The clip node stores clip rect in its target space. If required, |
| (...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 ComputeTransforms(&property_trees->transform_tree); | 776 ComputeTransforms(&property_trees->transform_tree); |
| 774 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | 777 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, |
| 775 can_render_to_separate_surface); | 778 can_render_to_separate_surface); |
| 776 ComputeEffects(&property_trees->effect_tree); | 779 ComputeEffects(&property_trees->effect_tree); |
| 777 | 780 |
| 778 FindLayersThatNeedUpdates( | 781 FindLayersThatNeedUpdates( |
| 779 root_layer->layer_tree_impl(), property_trees->transform_tree, | 782 root_layer->layer_tree_impl(), property_trees->transform_tree, |
| 780 property_trees->effect_tree, update_layer_list, visible_layer_list); | 783 property_trees->effect_tree, update_layer_list, visible_layer_list); |
| 781 CalculateVisibleRects<LayerImpl>( | 784 CalculateVisibleRects<LayerImpl>( |
| 782 *visible_layer_list, property_trees->clip_tree, | 785 *visible_layer_list, property_trees->clip_tree, |
| 783 property_trees->transform_tree, can_render_to_separate_surface); | 786 property_trees->transform_tree, property_trees->effect_tree, |
| 787 can_render_to_separate_surface); |
| 784 } | 788 } |
| 785 | 789 |
| 786 void UpdatePropertyTrees(PropertyTrees* property_trees, | 790 void UpdatePropertyTrees(PropertyTrees* property_trees, |
| 787 bool can_render_to_separate_surface) { | 791 bool can_render_to_separate_surface) { |
| 788 if (property_trees->non_root_surfaces_enabled != | 792 if (property_trees->non_root_surfaces_enabled != |
| 789 can_render_to_separate_surface) { | 793 can_render_to_separate_surface) { |
| 790 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; | 794 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; |
| 791 property_trees->transform_tree.set_needs_update(true); | 795 property_trees->transform_tree.set_needs_update(true); |
| 792 } | 796 } |
| 793 if (property_trees->transform_tree.needs_update()) { | 797 if (property_trees->transform_tree.needs_update()) { |
| 794 property_trees->clip_tree.set_needs_update(true); | 798 property_trees->clip_tree.set_needs_update(true); |
| 795 property_trees->effect_tree.set_needs_update(true); | 799 property_trees->effect_tree.set_needs_update(true); |
| 796 } | 800 } |
| 797 ComputeTransforms(&property_trees->transform_tree); | 801 ComputeTransforms(&property_trees->transform_tree); |
| 798 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | 802 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, |
| 799 can_render_to_separate_surface); | 803 can_render_to_separate_surface); |
| 800 ComputeEffects(&property_trees->effect_tree); | 804 ComputeEffects(&property_trees->effect_tree); |
| 801 } | 805 } |
| 802 | 806 |
| 803 void ComputeVisibleRectsForTesting(PropertyTrees* property_trees, | 807 void ComputeVisibleRectsForTesting(PropertyTrees* property_trees, |
| 804 bool can_render_to_separate_surface, | 808 bool can_render_to_separate_surface, |
| 805 LayerList* update_layer_list) { | 809 LayerList* update_layer_list) { |
| 806 CalculateVisibleRects<Layer>(*update_layer_list, property_trees->clip_tree, | 810 CalculateVisibleRects<Layer>(*update_layer_list, property_trees->clip_tree, |
| 807 property_trees->transform_tree, | 811 property_trees->transform_tree, |
| 812 property_trees->effect_tree, |
| 808 can_render_to_separate_surface); | 813 can_render_to_separate_surface); |
| 809 } | 814 } |
| 810 | 815 |
| 811 void BuildPropertyTreesAndComputeVisibleRects( | 816 void BuildPropertyTreesAndComputeVisibleRects( |
| 812 LayerImpl* root_layer, | 817 LayerImpl* root_layer, |
| 813 const LayerImpl* page_scale_layer, | 818 const LayerImpl* page_scale_layer, |
| 814 const LayerImpl* inner_viewport_scroll_layer, | 819 const LayerImpl* inner_viewport_scroll_layer, |
| 815 const LayerImpl* outer_viewport_scroll_layer, | 820 const LayerImpl* outer_viewport_scroll_layer, |
| 816 const LayerImpl* overscroll_elasticity_layer, | 821 const LayerImpl* overscroll_elasticity_layer, |
| 817 const gfx::Vector2dF& elastic_overscroll, | 822 const gfx::Vector2dF& elastic_overscroll, |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1253 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1258 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
| 1254 const Layer* overscroll_elasticity_layer, | 1259 const Layer* overscroll_elasticity_layer, |
| 1255 const gfx::Vector2dF& elastic_overscroll) { | 1260 const gfx::Vector2dF& elastic_overscroll) { |
| 1256 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1261 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
| 1257 elastic_overscroll); | 1262 elastic_overscroll); |
| 1258 } | 1263 } |
| 1259 | 1264 |
| 1260 } // namespace draw_property_utils | 1265 } // namespace draw_property_utils |
| 1261 | 1266 |
| 1262 } // namespace cc | 1267 } // namespace cc |
| OLD | NEW |