OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CC_DEBUG_DEBUG_RECT_HISTORY_H_ | |
6 #define CC_DEBUG_DEBUG_RECT_HISTORY_H_ | |
7 | |
8 #include <vector> | |
9 #include "base/basictypes.h" | |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "cc/layers/layer_lists.h" | |
12 #include "ui/gfx/geometry/rect.h" | |
13 | |
14 namespace cc { | |
15 | |
16 class LayerImpl; | |
17 class LayerTreeDebugState; | |
18 | |
19 // There are currently six types of debug rects: | |
20 // | |
21 // - Paint rects (update rects): regions of a layer that needed to be | |
22 // re-uploaded to the texture resource; in most cases implying that they had to | |
23 // be repainted, too. | |
24 // | |
25 // - Property-changed rects: enclosing bounds of layers that cause changes to | |
26 // the screen even if the layer did not change internally. (For example, if the | |
27 // layer's opacity or position changes.) | |
28 // | |
29 // - Surface damage rects: the aggregate damage on a target surface that is | |
30 // caused by all layers and surfaces that contribute to it. This includes (1) | |
31 // paint rects, (2) property- changed rects, and (3) newly exposed areas. | |
32 // | |
33 // - Screen space rects: this is the region the contents occupy in screen space. | |
34 // | |
35 // - Replica screen space rects: this is the region the replica's contents | |
36 // occupy in screen space. | |
37 enum DebugRectType { | |
38 PAINT_RECT_TYPE, | |
39 PROPERTY_CHANGED_RECT_TYPE, | |
40 SURFACE_DAMAGE_RECT_TYPE, | |
41 SCREEN_SPACE_RECT_TYPE, | |
42 REPLICA_SCREEN_SPACE_RECT_TYPE, | |
43 TOUCH_EVENT_HANDLER_RECT_TYPE, | |
44 WHEEL_EVENT_HANDLER_RECT_TYPE, | |
45 SCROLL_EVENT_HANDLER_RECT_TYPE, | |
46 NON_FAST_SCROLLABLE_RECT_TYPE, | |
47 ANIMATION_BOUNDS_RECT_TYPE, | |
48 }; | |
49 | |
50 struct DebugRect { | |
51 DebugRect(DebugRectType new_type, const gfx::Rect& new_rect) | |
52 : type(new_type), rect(new_rect) {} | |
53 | |
54 DebugRectType type; | |
55 gfx::Rect rect; | |
56 }; | |
57 | |
58 // This class maintains a history of rects of various types that can be used | |
59 // for debugging purposes. The overhead of collecting rects is performed only if | |
60 // the appropriate LayerTreeSettings are enabled. | |
61 class DebugRectHistory { | |
62 public: | |
63 static scoped_ptr<DebugRectHistory> Create(); | |
64 | |
65 ~DebugRectHistory(); | |
66 | |
67 // Note: Saving debug rects must happen before layers' change tracking is | |
68 // reset. | |
69 void SaveDebugRectsForCurrentFrame( | |
70 LayerImpl* root_layer, | |
71 LayerImpl* hud_layer, | |
72 const LayerImplList& render_surface_layer_list, | |
73 const LayerTreeDebugState& debug_state); | |
74 | |
75 const std::vector<DebugRect>& debug_rects() { return debug_rects_; } | |
76 | |
77 private: | |
78 DebugRectHistory(); | |
79 | |
80 void SavePaintRects(LayerImpl* layer); | |
81 void SavePropertyChangedRects(const LayerImplList& render_surface_layer_list, | |
82 LayerImpl* hud_layer); | |
83 void SaveSurfaceDamageRects( | |
84 const LayerImplList& render_surface_layer_list); | |
85 void SaveScreenSpaceRects( | |
86 const LayerImplList& render_surface_layer_list); | |
87 void SaveTouchEventHandlerRects(LayerImpl* layer); | |
88 void SaveTouchEventHandlerRectsCallback(LayerImpl* layer); | |
89 void SaveWheelEventHandlerRects(LayerImpl* layer); | |
90 void SaveWheelEventHandlerRectsCallback(LayerImpl* layer); | |
91 void SaveScrollEventHandlerRects(LayerImpl* layer); | |
92 void SaveScrollEventHandlerRectsCallback(LayerImpl* layer); | |
93 void SaveNonFastScrollableRects(LayerImpl* layer); | |
94 void SaveNonFastScrollableRectsCallback(LayerImpl* layer); | |
95 void SaveLayerAnimationBoundsRects( | |
96 const LayerImplList& render_surface_layer_list); | |
97 | |
98 std::vector<DebugRect> debug_rects_; | |
99 | |
100 DISALLOW_COPY_AND_ASSIGN(DebugRectHistory); | |
101 }; | |
102 | |
103 } // namespace cc | |
104 | |
105 #endif // CC_DEBUG_DEBUG_RECT_HISTORY_H_ | |
OLD | NEW |