Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / cc / debug / debug_rect_history.h
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 //
38 // - Occluding rects: these are the regions that contribute to the occluded
39 // region.
40 //
41 // - Non-Occluding rects: these are the regions of composited layers that do not
42 //   contribute to the occluded region.
43 //
44 enum DebugRectType {
45   PAINT_RECT_TYPE,
46   PROPERTY_CHANGED_RECT_TYPE,
47   SURFACE_DAMAGE_RECT_TYPE,
48   SCREEN_SPACE_RECT_TYPE,
49   REPLICA_SCREEN_SPACE_RECT_TYPE,
50   OCCLUDING_RECT_TYPE,
51   NONOCCLUDING_RECT_TYPE,
52   TOUCH_EVENT_HANDLER_RECT_TYPE,
53   WHEEL_EVENT_HANDLER_RECT_TYPE,
54   SCROLL_EVENT_HANDLER_RECT_TYPE,
55   NON_FAST_SCROLLABLE_RECT_TYPE,
56   ANIMATION_BOUNDS_RECT_TYPE,
57 };
58
59 struct DebugRect {
60   DebugRect(DebugRectType new_type, const gfx::Rect& new_rect)
61       : type(new_type), rect(new_rect) {}
62
63   DebugRectType type;
64   gfx::Rect rect;
65 };
66
67 // This class maintains a history of rects of various types that can be used
68 // for debugging purposes. The overhead of collecting rects is performed only if
69 // the appropriate LayerTreeSettings are enabled.
70 class DebugRectHistory {
71  public:
72   static scoped_ptr<DebugRectHistory> Create();
73
74   ~DebugRectHistory();
75
76   // Note: Saving debug rects must happen before layers' change tracking is
77   // reset.
78   void SaveDebugRectsForCurrentFrame(
79       LayerImpl* root_layer,
80       LayerImpl* hud_layer,
81       const LayerImplList& render_surface_layer_list,
82       const std::vector<gfx::Rect>& occluding_screen_space_rects,
83       const std::vector<gfx::Rect>& non_occluding_screen_space_rects,
84       const LayerTreeDebugState& debug_state);
85
86   const std::vector<DebugRect>& debug_rects() { return debug_rects_; }
87
88  private:
89   DebugRectHistory();
90
91   void SavePaintRects(LayerImpl* layer);
92   void SavePropertyChangedRects(const LayerImplList& render_surface_layer_list,
93                                 LayerImpl* hud_layer);
94   void SaveSurfaceDamageRects(
95       const LayerImplList& render_surface_layer_list);
96   void SaveScreenSpaceRects(
97       const LayerImplList& render_surface_layer_list);
98   void SaveOccludingRects(
99       const std::vector<gfx::Rect>& occluding_screen_space_rects);
100   void SaveNonOccludingRects(
101       const std::vector<gfx::Rect>& non_occluding_screen_space_rects);
102   void SaveTouchEventHandlerRects(LayerImpl* layer);
103   void SaveTouchEventHandlerRectsCallback(LayerImpl* layer);
104   void SaveWheelEventHandlerRects(LayerImpl* layer);
105   void SaveWheelEventHandlerRectsCallback(LayerImpl* layer);
106   void SaveScrollEventHandlerRects(LayerImpl* layer);
107   void SaveScrollEventHandlerRectsCallback(LayerImpl* layer);
108   void SaveNonFastScrollableRects(LayerImpl* layer);
109   void SaveNonFastScrollableRectsCallback(LayerImpl* layer);
110   void SaveLayerAnimationBoundsRects(
111       const LayerImplList& render_surface_layer_list);
112
113   std::vector<DebugRect> debug_rects_;
114
115   DISALLOW_COPY_AND_ASSIGN(DebugRectHistory);
116 };
117
118 }  // namespace cc
119
120 #endif  // CC_DEBUG_DEBUG_RECT_HISTORY_H_