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 |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |