Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / cc / layers / heads_up_display_layer_impl.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_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_
6 #define CC_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/memory/scoped_ptr.h"
12 #include "base/time/time.h"
13 #include "cc/base/cc_export.h"
14 #include "cc/debug/debug_rect_history.h"
15 #include "cc/layers/layer_impl.h"
16 #include "cc/resources/memory_history.h"
17 #include "cc/resources/scoped_resource.h"
18
19 class SkCanvas;
20 class SkPaint;
21 class SkTypeface;
22 struct SkRect;
23
24 namespace cc {
25
26 class FrameRateCounter;
27 class PaintTimeCounter;
28
29 class CC_EXPORT HeadsUpDisplayLayerImpl : public LayerImpl {
30  public:
31   static scoped_ptr<HeadsUpDisplayLayerImpl> Create(LayerTreeImpl* tree_impl,
32                                                     int id) {
33     return make_scoped_ptr(new HeadsUpDisplayLayerImpl(tree_impl, id));
34   }
35   ~HeadsUpDisplayLayerImpl() override;
36
37   scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override;
38
39   bool WillDraw(DrawMode draw_mode,
40                 ResourceProvider* resource_provider) override;
41   void AppendQuads(RenderPass* render_pass,
42                    const Occlusion& occlusion_in_content_space,
43                    AppendQuadsData* append_quads_data) override;
44   void UpdateHudTexture(DrawMode draw_mode,
45                         ResourceProvider* resource_provider);
46
47   void ReleaseResources() override;
48
49   bool IsAnimatingHUDContents() const { return fade_step_ > 0; }
50
51  private:
52   class Graph {
53    public:
54     Graph(double indicator_value, double start_upper_bound);
55
56     // Eases the upper bound, which limits what is currently visible in the
57     // graph, so that the graph always scales to either it's max or
58     // default_upper_bound.
59     double UpdateUpperBound();
60
61     double value;
62     double min;
63     double max;
64
65     double current_upper_bound;
66     const double default_upper_bound;
67     const double indicator;
68   };
69
70   HeadsUpDisplayLayerImpl(LayerTreeImpl* tree_impl, int id);
71
72   const char* LayerTypeAsString() const override;
73
74   void AsValueInto(base::debug::TracedValue* dict) const override;
75
76   void UpdateHudContents();
77   void DrawHudContents(SkCanvas* canvas);
78
79   void DrawText(SkCanvas* canvas,
80                 SkPaint* paint,
81                 const std::string& text,
82                 SkPaint::Align align,
83                 int size,
84                 int x,
85                 int y) const;
86   void DrawText(SkCanvas* canvas,
87                 SkPaint* paint,
88                 const std::string& text,
89                 SkPaint::Align align,
90                 int size,
91                 const SkPoint& pos) const;
92   void DrawGraphBackground(SkCanvas* canvas,
93                            SkPaint* paint,
94                            const SkRect& bounds) const;
95   void DrawGraphLines(SkCanvas* canvas,
96                       SkPaint* paint,
97                       const SkRect& bounds,
98                       const Graph& graph) const;
99
100   SkRect DrawFPSDisplay(SkCanvas* canvas,
101                         const FrameRateCounter* fps_counter,
102                         int right,
103                         int top) const;
104   SkRect DrawMemoryDisplay(SkCanvas* canvas,
105                            int top,
106                            int right,
107                            int width) const;
108   SkRect DrawPaintTimeDisplay(SkCanvas* canvas,
109                               const PaintTimeCounter* paint_time_counter,
110                               int top,
111                               int right) const;
112   void DrawDebugRect(SkCanvas* canvas,
113                      SkPaint* paint,
114                      const DebugRect& rect,
115                      SkColor stroke_color,
116                      SkColor fill_color,
117                      float stroke_width,
118                      const std::string& label_text) const;
119   void DrawDebugRects(SkCanvas* canvas, DebugRectHistory* debug_rect_history);
120
121   void AcquireResource(ResourceProvider* resource_provider);
122   void ReleaseUnmatchedSizeResources(ResourceProvider* resource_provider);
123
124   ScopedPtrVector<ScopedResource> resources_;
125   scoped_ptr<SkCanvas> hud_canvas_;
126
127   skia::RefPtr<SkTypeface> typeface_;
128
129   Graph fps_graph_;
130   Graph paint_time_graph_;
131   MemoryHistory::Entry memory_entry_;
132   int fade_step_;
133   std::vector<DebugRect> paint_rects_;
134
135   base::TimeTicks time_of_last_graph_update_;
136
137   DISALLOW_COPY_AND_ASSIGN(HeadsUpDisplayLayerImpl);
138 };
139
140 }  // namespace cc
141
142 #endif  // CC_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_