Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(652)

Side by Side Diff: cc/trees/draw_property_utils.cc

Issue 2017263002: cc: Move copy requests from layers to the effect tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typo in comment Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/test/layer_test_common.cc ('k') | cc/trees/layer_tree_host.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « cc/test/layer_test_common.cc ('k') | cc/trees/layer_tree_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698