OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/debug_rect_history.h" | 5 #include "cc/trees/debug_rect_history.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "cc/base/math_util.h" | 10 #include "cc/base/math_util.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 return base::WrapUnique(new DebugRectHistory()); | 25 return base::WrapUnique(new DebugRectHistory()); |
26 } | 26 } |
27 | 27 |
28 DebugRectHistory::DebugRectHistory() {} | 28 DebugRectHistory::DebugRectHistory() {} |
29 | 29 |
30 DebugRectHistory::~DebugRectHistory() {} | 30 DebugRectHistory::~DebugRectHistory() {} |
31 | 31 |
32 void DebugRectHistory::SaveDebugRectsForCurrentFrame( | 32 void DebugRectHistory::SaveDebugRectsForCurrentFrame( |
33 LayerTreeImpl* tree_impl, | 33 LayerTreeImpl* tree_impl, |
34 LayerImpl* hud_layer, | 34 LayerImpl* hud_layer, |
35 const LayerImplList& render_surface_layer_list, | 35 const RenderSurfaceList& render_surface_list, |
36 const LayerTreeDebugState& debug_state) { | 36 const LayerTreeDebugState& debug_state) { |
37 // For now, clear all rects from previous frames. In the future we may want to | 37 // For now, clear all rects from previous frames. In the future we may want to |
38 // store all debug rects for a history of many frames. | 38 // store all debug rects for a history of many frames. |
39 debug_rects_.clear(); | 39 debug_rects_.clear(); |
40 | 40 |
41 if (debug_state.show_touch_event_handler_rects) | 41 if (debug_state.show_touch_event_handler_rects) |
42 SaveTouchEventHandlerRects(tree_impl); | 42 SaveTouchEventHandlerRects(tree_impl); |
43 | 43 |
44 if (debug_state.show_wheel_event_handler_rects) | 44 if (debug_state.show_wheel_event_handler_rects) |
45 SaveWheelEventHandlerRects(tree_impl); | 45 SaveWheelEventHandlerRects(tree_impl); |
46 | 46 |
47 if (debug_state.show_scroll_event_handler_rects) | 47 if (debug_state.show_scroll_event_handler_rects) |
48 SaveScrollEventHandlerRects(tree_impl); | 48 SaveScrollEventHandlerRects(tree_impl); |
49 | 49 |
50 if (debug_state.show_non_fast_scrollable_rects) | 50 if (debug_state.show_non_fast_scrollable_rects) |
51 SaveNonFastScrollableRects(tree_impl); | 51 SaveNonFastScrollableRects(tree_impl); |
52 | 52 |
53 if (debug_state.show_paint_rects) | 53 if (debug_state.show_paint_rects) |
54 SavePaintRects(tree_impl); | 54 SavePaintRects(tree_impl); |
55 | 55 |
56 if (debug_state.show_property_changed_rects) | 56 if (debug_state.show_property_changed_rects) |
57 SavePropertyChangedRects(render_surface_layer_list, hud_layer); | 57 SavePropertyChangedRects(tree_impl, hud_layer); |
58 | 58 |
59 if (debug_state.show_surface_damage_rects) | 59 if (debug_state.show_surface_damage_rects) |
60 SaveSurfaceDamageRects(render_surface_layer_list); | 60 SaveSurfaceDamageRects(render_surface_list); |
61 | 61 |
62 if (debug_state.show_screen_space_rects) | 62 if (debug_state.show_screen_space_rects) |
63 SaveScreenSpaceRects(render_surface_layer_list); | 63 SaveScreenSpaceRects(render_surface_list); |
64 | 64 |
65 if (debug_state.show_layer_animation_bounds_rects) | 65 if (debug_state.show_layer_animation_bounds_rects) |
66 SaveLayerAnimationBoundsRects(tree_impl); | 66 SaveLayerAnimationBoundsRects(tree_impl); |
67 } | 67 } |
68 | 68 |
69 void DebugRectHistory::SavePaintRects(LayerTreeImpl* tree_impl) { | 69 void DebugRectHistory::SavePaintRects(LayerTreeImpl* tree_impl) { |
70 // We would like to visualize where any layer's paint rect (update rect) has | 70 // We would like to visualize where any layer's paint rect (update rect) has |
71 // changed, regardless of whether this layer is skipped for actual drawing or | 71 // changed, regardless of whether this layer is skipped for actual drawing or |
72 // not. Therefore we traverse over all layers, not just the render surface | 72 // not. Therefore we traverse over all layers, not just the render surface |
73 // list. | 73 // list. |
74 for (auto* layer : *tree_impl) { | 74 for (auto* layer : *tree_impl) { |
75 Region invalidation_region = layer->GetInvalidationRegionForDebugging(); | 75 Region invalidation_region = layer->GetInvalidationRegionForDebugging(); |
76 if (invalidation_region.IsEmpty() || !layer->DrawsContent()) | 76 if (invalidation_region.IsEmpty() || !layer->DrawsContent()) |
77 continue; | 77 continue; |
78 | 78 |
79 for (Region::Iterator it(invalidation_region); it.has_rect(); it.next()) { | 79 for (Region::Iterator it(invalidation_region); it.has_rect(); it.next()) { |
80 debug_rects_.push_back(DebugRect( | 80 debug_rects_.push_back(DebugRect( |
81 PAINT_RECT_TYPE, MathUtil::MapEnclosingClippedRect( | 81 PAINT_RECT_TYPE, MathUtil::MapEnclosingClippedRect( |
82 layer->ScreenSpaceTransform(), it.rect()))); | 82 layer->ScreenSpaceTransform(), it.rect()))); |
83 } | 83 } |
84 } | 84 } |
85 } | 85 } |
86 | 86 |
87 void DebugRectHistory::SavePropertyChangedRects( | 87 void DebugRectHistory::SavePropertyChangedRects(LayerTreeImpl* tree_impl, |
88 const LayerImplList& render_surface_layer_list, | 88 LayerImpl* hud_layer) { |
89 LayerImpl* hud_layer) { | 89 for (LayerImpl* layer : *tree_impl) { |
90 for (size_t i = 0; i < render_surface_layer_list.size(); ++i) { | 90 if (layer == hud_layer) |
91 size_t surface_index = render_surface_layer_list.size() - 1 - i; | 91 continue; |
92 LayerImpl* render_surface_layer = render_surface_layer_list[surface_index]; | |
93 RenderSurfaceImpl* render_surface = | |
94 render_surface_layer->GetRenderSurface(); | |
95 DCHECK(render_surface); | |
96 | 92 |
97 const LayerImplList& layer_list = render_surface->layer_list(); | 93 if (!layer->LayerPropertyChanged()) |
98 for (unsigned layer_index = 0; layer_index < layer_list.size(); | 94 continue; |
99 ++layer_index) { | |
100 LayerImpl* layer = layer_list[layer_index]; | |
101 | 95 |
102 if (layer->GetRenderSurface() && | 96 debug_rects_.push_back(DebugRect( |
103 layer->GetRenderSurface() != render_surface) | 97 PROPERTY_CHANGED_RECT_TYPE, |
104 continue; | 98 MathUtil::MapEnclosingClippedRect(layer->ScreenSpaceTransform(), |
105 | 99 gfx::Rect(layer->bounds())))); |
106 if (layer == hud_layer) | |
107 continue; | |
108 | |
109 if (!layer->LayerPropertyChanged()) | |
110 continue; | |
111 | |
112 debug_rects_.push_back(DebugRect( | |
113 PROPERTY_CHANGED_RECT_TYPE, | |
114 MathUtil::MapEnclosingClippedRect(layer->ScreenSpaceTransform(), | |
115 gfx::Rect(layer->bounds())))); | |
116 } | |
117 } | 100 } |
118 } | 101 } |
119 | 102 |
120 void DebugRectHistory::SaveSurfaceDamageRects( | 103 void DebugRectHistory::SaveSurfaceDamageRects( |
121 const LayerImplList& render_surface_layer_list) { | 104 const RenderSurfaceList& render_surface_list) { |
122 for (size_t i = 0; i < render_surface_layer_list.size(); ++i) { | 105 for (size_t i = 0; i < render_surface_list.size(); ++i) { |
123 size_t surface_index = render_surface_layer_list.size() - 1 - i; | 106 size_t surface_index = render_surface_list.size() - 1 - i; |
124 LayerImpl* render_surface_layer = render_surface_layer_list[surface_index]; | 107 RenderSurfaceImpl* render_surface = render_surface_list[surface_index]; |
125 RenderSurfaceImpl* render_surface = | |
126 render_surface_layer->GetRenderSurface(); | |
127 DCHECK(render_surface); | 108 DCHECK(render_surface); |
128 | 109 |
129 debug_rects_.push_back(DebugRect( | 110 debug_rects_.push_back(DebugRect( |
130 SURFACE_DAMAGE_RECT_TYPE, MathUtil::MapEnclosingClippedRect( | 111 SURFACE_DAMAGE_RECT_TYPE, MathUtil::MapEnclosingClippedRect( |
131 render_surface->screen_space_transform(), | 112 render_surface->screen_space_transform(), |
132 render_surface->GetDamageRect()))); | 113 render_surface->GetDamageRect()))); |
133 } | 114 } |
134 } | 115 } |
135 | 116 |
136 void DebugRectHistory::SaveScreenSpaceRects( | 117 void DebugRectHistory::SaveScreenSpaceRects( |
137 const LayerImplList& render_surface_layer_list) { | 118 const RenderSurfaceList& render_surface_list) { |
138 for (size_t i = 0; i < render_surface_layer_list.size(); ++i) { | 119 for (size_t i = 0; i < render_surface_list.size(); ++i) { |
139 size_t surface_index = render_surface_layer_list.size() - 1 - i; | 120 size_t surface_index = render_surface_list.size() - 1 - i; |
140 LayerImpl* render_surface_layer = render_surface_layer_list[surface_index]; | 121 RenderSurfaceImpl* render_surface = render_surface_list[surface_index]; |
141 RenderSurfaceImpl* render_surface = | |
142 render_surface_layer->GetRenderSurface(); | |
143 DCHECK(render_surface); | 122 DCHECK(render_surface); |
144 | 123 |
145 debug_rects_.push_back(DebugRect( | 124 debug_rects_.push_back(DebugRect( |
146 SCREEN_SPACE_RECT_TYPE, MathUtil::MapEnclosingClippedRect( | 125 SCREEN_SPACE_RECT_TYPE, MathUtil::MapEnclosingClippedRect( |
147 render_surface->screen_space_transform(), | 126 render_surface->screen_space_transform(), |
148 render_surface->content_rect()))); | 127 render_surface->content_rect()))); |
149 } | 128 } |
150 } | 129 } |
151 | 130 |
152 void DebugRectHistory::SaveTouchEventHandlerRects(LayerTreeImpl* tree_impl) { | 131 void DebugRectHistory::SaveTouchEventHandlerRects(LayerTreeImpl* tree_impl) { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 | 208 |
230 debug_rects_.push_back( | 209 debug_rects_.push_back( |
231 DebugRect(ANIMATION_BOUNDS_RECT_TYPE, | 210 DebugRect(ANIMATION_BOUNDS_RECT_TYPE, |
232 gfx::ToEnclosingRect(gfx::RectF( | 211 gfx::ToEnclosingRect(gfx::RectF( |
233 inflated_bounds.x(), inflated_bounds.y(), | 212 inflated_bounds.x(), inflated_bounds.y(), |
234 inflated_bounds.width(), inflated_bounds.height())))); | 213 inflated_bounds.width(), inflated_bounds.height())))); |
235 } | 214 } |
236 } | 215 } |
237 | 216 |
238 } // namespace cc | 217 } // namespace cc |
OLD | NEW |