| 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 |