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.
5 #ifndef CC_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_
6 #define CC_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_
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"
26 class FrameRateCounter
;
27 class PaintTimeCounter
;
29 class CC_EXPORT HeadsUpDisplayLayerImpl
: public LayerImpl
{
31 static scoped_ptr
<HeadsUpDisplayLayerImpl
> Create(LayerTreeImpl
* tree_impl
,
33 return make_scoped_ptr(new HeadsUpDisplayLayerImpl(tree_impl
, id
));
35 ~HeadsUpDisplayLayerImpl() override
;
37 scoped_ptr
<LayerImpl
> CreateLayerImpl(LayerTreeImpl
* tree_impl
) override
;
39 bool WillDraw(DrawMode draw_mode
,
40 ResourceProvider
* resource_provider
) override
;
41 void AppendQuads(RenderPass
* render_pass
,
42 AppendQuadsData
* append_quads_data
) override
;
43 void UpdateHudTexture(DrawMode draw_mode
,
44 ResourceProvider
* resource_provider
);
46 void ReleaseResources() override
;
48 gfx::Rect
GetEnclosingRectInTargetSpace() const override
;
50 bool IsAnimatingHUDContents() const { return fade_step_
> 0; }
55 Graph(double indicator_value
, double start_upper_bound
);
57 // Eases the upper bound, which limits what is currently visible in the
58 // graph, so that the graph always scales to either it's max or
59 // default_upper_bound.
60 double UpdateUpperBound();
66 double current_upper_bound
;
67 const double default_upper_bound
;
68 const double indicator
;
71 HeadsUpDisplayLayerImpl(LayerTreeImpl
* tree_impl
, int id
);
73 const char* LayerTypeAsString() const override
;
75 void AsValueInto(base::trace_event::TracedValue
* dict
) const override
;
77 void UpdateHudContents();
78 void DrawHudContents(SkCanvas
* canvas
);
80 int MeasureText(SkPaint
* paint
, const std::string
& text
, int size
) const;
81 void DrawText(SkCanvas
* canvas
,
83 const std::string
& text
,
88 void DrawText(SkCanvas
* canvas
,
90 const std::string
& text
,
93 const SkPoint
& pos
) const;
94 void DrawGraphBackground(SkCanvas
* canvas
,
96 const SkRect
& bounds
) const;
97 void DrawGraphLines(SkCanvas
* canvas
,
100 const Graph
& graph
) const;
102 SkRect
DrawFPSDisplay(SkCanvas
* canvas
,
103 const FrameRateCounter
* fps_counter
,
106 SkRect
DrawMemoryDisplay(SkCanvas
* canvas
,
110 SkRect
DrawGpuRasterizationStatus(SkCanvas
* canvas
,
114 SkRect
DrawPaintTimeDisplay(SkCanvas
* canvas
,
115 const PaintTimeCounter
* paint_time_counter
,
118 void DrawDebugRect(SkCanvas
* canvas
,
120 const DebugRect
& rect
,
121 SkColor stroke_color
,
124 const std::string
& label_text
) const;
125 void DrawDebugRects(SkCanvas
* canvas
, DebugRectHistory
* debug_rect_history
);
127 void AcquireResource(ResourceProvider
* resource_provider
);
128 void ReleaseUnmatchedSizeResources(ResourceProvider
* resource_provider
);
130 ScopedPtrVector
<ScopedResource
> resources_
;
131 skia::RefPtr
<SkSurface
> hud_surface_
;
133 skia::RefPtr
<SkTypeface
> typeface_
;
135 float internal_contents_scale_
;
136 gfx::Size internal_content_bounds_
;
139 Graph paint_time_graph_
;
140 MemoryHistory::Entry memory_entry_
;
142 std::vector
<DebugRect
> paint_rects_
;
144 base::TimeTicks time_of_last_graph_update_
;
146 DISALLOW_COPY_AND_ASSIGN(HeadsUpDisplayLayerImpl
);
151 #endif // CC_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_