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

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

Issue 1837343002: cc : Use effect tree to determine if a layer is a replica (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 | « no previous file | no next file » | 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
11 #include "cc/base/math_util.h" 11 #include "cc/base/math_util.h"
12 #include "cc/layers/draw_properties.h" 12 #include "cc/layers/draw_properties.h"
13 #include "cc/layers/layer.h" 13 #include "cc/layers/layer.h"
14 #include "cc/layers/layer_impl.h" 14 #include "cc/layers/layer_impl.h"
15 #include "cc/trees/layer_tree_host.h"
15 #include "cc/trees/layer_tree_impl.h" 16 #include "cc/trees/layer_tree_impl.h"
16 #include "cc/trees/property_tree.h" 17 #include "cc/trees/property_tree.h"
17 #include "cc/trees/property_tree_builder.h" 18 #include "cc/trees/property_tree_builder.h"
18 #include "ui/gfx/geometry/rect_conversions.h" 19 #include "ui/gfx/geometry/rect_conversions.h"
19 20
20 namespace cc { 21 namespace cc {
21 22
22 namespace draw_property_utils { 23 namespace draw_property_utils {
23 24
24 namespace { 25 namespace {
25 26
26 static bool IsRootLayer(const Layer* layer) { 27 static bool IsRootLayer(const Layer* layer) {
27 return !layer->parent(); 28 return !layer->parent();
28 } 29 }
29 30
30 static bool IsRootLayer(const LayerImpl* layer) { 31 static bool IsRootLayer(const LayerImpl* layer) {
31 return layer->layer_tree_impl()->IsRootLayer(layer); 32 return layer->layer_tree_impl()->IsRootLayer(layer);
32 } 33 }
33 34
35 #if DCHECK_IS_ON()
36 static Layer* EffectNodeOwner(Layer* layer) {
37 EffectNode* node =
38 layer->layer_tree_host()->property_trees()->effect_tree.Node(
39 layer->effect_tree_index());
40 return layer->layer_tree_host()->LayerById(node->owner_id);
41 }
42
43 static LayerImpl* EffectNodeOwner(LayerImpl* layer) {
44 EffectNode* node =
45 layer->layer_tree_impl()->property_trees()->effect_tree.Node(
46 layer->effect_tree_index());
47 return layer->layer_tree_impl()->LayerById(node->owner_id);
48 }
49
34 template <typename LayerType> 50 template <typename LayerType>
35 static void ValidateRenderSurfaceForLayer(LayerType* layer) { 51 static void ValidateRenderSurfaceForLayer(LayerType* layer) {
36 // This test verifies that there are no cases where a LayerImpl needs 52 // This test verifies that there are no cases where a LayerImpl needs
37 // a render surface, but doesn't have one. 53 // a render surface, but doesn't have one.
38 if (layer->has_render_surface()) 54 if (layer->has_render_surface())
39 return; 55 return;
40 56
41 DCHECK(layer->filters().IsEmpty()) << "layer: " << layer->id(); 57 DCHECK(layer->filters().IsEmpty()) << "layer: " << layer->id();
42 DCHECK(layer->background_filters().IsEmpty()) << "layer: " << layer->id(); 58 DCHECK(layer->background_filters().IsEmpty()) << "layer: " << layer->id();
43 DCHECK(!IsRootLayer(layer)) << "layer: " << layer->id(); 59 DCHECK(!IsRootLayer(layer)) << "layer: " << layer->id();
44 if (layer->parent()->replica_layer() == layer) 60 if (EffectNodeOwner(layer)->replica_layer() == layer)
45 return; 61 return;
46 DCHECK(!layer->mask_layer()) << "layer: " << layer->id(); 62 DCHECK(!layer->mask_layer()) << "layer: " << layer->id();
47 DCHECK(!layer->replica_layer()) << "layer: " << layer->id(); 63 DCHECK(!layer->replica_layer()) << "layer: " << layer->id();
48 DCHECK(!layer->is_root_for_isolated_group()) << "layer: " << layer->id(); 64 DCHECK(!layer->is_root_for_isolated_group()) << "layer: " << layer->id();
49 DCHECK(!layer->HasCopyRequest()) << "layer: " << layer->id(); 65 DCHECK(!layer->HasCopyRequest()) << "layer: " << layer->id();
50 } 66 }
51 67
52 static void ValidateRenderSurfacesRecursive(Layer* layer) { 68 static void ValidateRenderSurfacesRecursive(Layer* layer) {
53 ValidateRenderSurfaceForLayer(layer); 69 ValidateRenderSurfaceForLayer(layer);
54 for (size_t i = 0; i < layer->children().size(); ++i) 70 for (size_t i = 0; i < layer->children().size(); ++i)
55 ValidateRenderSurfacesRecursive(layer->child_at(i)); 71 ValidateRenderSurfacesRecursive(layer->child_at(i));
56 } 72 }
73 #endif
57 74
58 template <typename LayerType> 75 template <typename LayerType>
59 void CalculateVisibleRects(const std::vector<LayerType*>& visible_layer_list, 76 void CalculateVisibleRects(const std::vector<LayerType*>& visible_layer_list,
60 const ClipTree& clip_tree, 77 const ClipTree& clip_tree,
61 const TransformTree& transform_tree, 78 const TransformTree& transform_tree,
62 bool non_root_surfaces_enabled) { 79 bool non_root_surfaces_enabled) {
63 for (auto& layer : visible_layer_list) { 80 for (auto& layer : visible_layer_list) {
64 gfx::Size layer_bounds = layer->bounds(); 81 gfx::Size layer_bounds = layer->bounds();
65 const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index()); 82 const ClipNode* clip_node = clip_tree.Node(layer->clip_tree_index());
66 const bool is_unclipped = clip_node->data.resets_clip && 83 const bool is_unclipped = clip_node->data.resets_clip &&
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 bool can_render_to_separate_surface, 707 bool can_render_to_separate_surface,
691 PropertyTrees* property_trees, 708 PropertyTrees* property_trees,
692 LayerList* update_layer_list) { 709 LayerList* update_layer_list) {
693 PropertyTreeBuilder::BuildPropertyTrees( 710 PropertyTreeBuilder::BuildPropertyTrees(
694 root_layer, page_scale_layer, inner_viewport_scroll_layer, 711 root_layer, page_scale_layer, inner_viewport_scroll_layer,
695 outer_viewport_scroll_layer, overscroll_elasticity_layer, 712 outer_viewport_scroll_layer, overscroll_elasticity_layer,
696 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 713 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
697 device_transform, property_trees); 714 device_transform, property_trees);
698 UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree, 715 UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree,
699 root_layer); 716 root_layer);
717 #if DCHECK_IS_ON()
700 ValidateRenderSurfacesRecursive(root_layer); 718 ValidateRenderSurfacesRecursive(root_layer);
719 #endif
701 ComputeVisibleRects(root_layer, property_trees, 720 ComputeVisibleRects(root_layer, property_trees,
702 can_render_to_separate_surface, update_layer_list); 721 can_render_to_separate_surface, update_layer_list);
703 } 722 }
704 723
705 void BuildPropertyTreesAndComputeVisibleRects( 724 void BuildPropertyTreesAndComputeVisibleRects(
706 LayerImpl* root_layer, 725 LayerImpl* root_layer,
707 const LayerImpl* page_scale_layer, 726 const LayerImpl* page_scale_layer,
708 const LayerImpl* inner_viewport_scroll_layer, 727 const LayerImpl* inner_viewport_scroll_layer,
709 const LayerImpl* outer_viewport_scroll_layer, 728 const LayerImpl* outer_viewport_scroll_layer,
710 const LayerImpl* overscroll_elasticity_layer, 729 const LayerImpl* overscroll_elasticity_layer,
(...skipping 24 matching lines...) Expand all
735 &visible_layer_list); 754 &visible_layer_list);
736 } 755 }
737 756
738 void ComputeVisibleRects(LayerImpl* root_layer, 757 void ComputeVisibleRects(LayerImpl* root_layer,
739 PropertyTrees* property_trees, 758 PropertyTrees* property_trees,
740 bool can_render_to_separate_surface, 759 bool can_render_to_separate_surface,
741 LayerImplList* visible_layer_list) { 760 LayerImplList* visible_layer_list) {
742 for (auto* layer : *root_layer->layer_tree_impl()) { 761 for (auto* layer : *root_layer->layer_tree_impl()) {
743 UpdateRenderSurfaceForLayer(&property_trees->effect_tree, 762 UpdateRenderSurfaceForLayer(&property_trees->effect_tree,
744 can_render_to_separate_surface, layer); 763 can_render_to_separate_surface, layer);
764 #if DCHECK_IS_ON()
745 if (can_render_to_separate_surface) 765 if (can_render_to_separate_surface)
746 ValidateRenderSurfaceForLayer(layer); 766 ValidateRenderSurfaceForLayer(layer);
767 #endif
747 } 768 }
748 LayerImplList update_layer_list; 769 LayerImplList update_layer_list;
749 ComputeVisibleRectsInternal(root_layer, property_trees, 770 ComputeVisibleRectsInternal(root_layer, property_trees,
750 can_render_to_separate_surface, 771 can_render_to_separate_surface,
751 &update_layer_list, visible_layer_list); 772 &update_layer_list, visible_layer_list);
752 } 773 }
753 774
754 template <typename LayerType> 775 template <typename LayerType>
755 static gfx::Transform DrawTransformInternal(const LayerType* layer, 776 static gfx::Transform DrawTransformInternal(const LayerType* layer,
756 const TransformNode* node) { 777 const TransformNode* node) {
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 void UpdateElasticOverscroll(PropertyTrees* property_trees, 1152 void UpdateElasticOverscroll(PropertyTrees* property_trees,
1132 const Layer* overscroll_elasticity_layer, 1153 const Layer* overscroll_elasticity_layer,
1133 const gfx::Vector2dF& elastic_overscroll) { 1154 const gfx::Vector2dF& elastic_overscroll) {
1134 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, 1155 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer,
1135 elastic_overscroll); 1156 elastic_overscroll);
1136 } 1157 }
1137 1158
1138 } // namespace draw_property_utils 1159 } // namespace draw_property_utils
1139 1160
1140 } // namespace cc 1161 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698