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 virtual ~HeadsUpDisplayLayerImpl(); 36 37 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) 38 OVERRIDE; 39 40 virtual bool WillDraw(DrawMode draw_mode, 41 ResourceProvider* resource_provider) OVERRIDE; 42 virtual void AppendQuads(RenderPass* render_pass, 43 const OcclusionTracker<LayerImpl>& occlusion_tracker, 44 AppendQuadsData* append_quads_data) OVERRIDE; 45 void UpdateHudTexture(DrawMode draw_mode, 46 ResourceProvider* resource_provider); 47 48 virtual void ReleaseResources() OVERRIDE; 49 50 bool IsAnimatingHUDContents() const { return fade_step_ > 0; } 51 52 private: 53 class Graph { 54 public: 55 Graph(double indicator_value, double start_upper_bound); 56 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(); 61 62 double value; 63 double min; 64 double max; 65 66 double current_upper_bound; 67 const double default_upper_bound; 68 const double indicator; 69 }; 70 71 HeadsUpDisplayLayerImpl(LayerTreeImpl* tree_impl, int id); 72 73 virtual const char* LayerTypeAsString() const OVERRIDE; 74 75 virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; 76 77 void UpdateHudContents(); 78 void DrawHudContents(SkCanvas* canvas); 79 80 void DrawText(SkCanvas* canvas, 81 SkPaint* paint, 82 const std::string& text, 83 SkPaint::Align align, 84 int size, 85 int x, 86 int y) const; 87 void DrawText(SkCanvas* canvas, 88 SkPaint* paint, 89 const std::string& text, 90 SkPaint::Align align, 91 int size, 92 const SkPoint& pos) const; 93 void DrawGraphBackground(SkCanvas* canvas, 94 SkPaint* paint, 95 const SkRect& bounds) const; 96 void DrawGraphLines(SkCanvas* canvas, 97 SkPaint* paint, 98 const SkRect& bounds, 99 const Graph& graph) const; 100 101 SkRect DrawFPSDisplay(SkCanvas* canvas, 102 const FrameRateCounter* fps_counter, 103 int right, 104 int top) const; 105 SkRect DrawMemoryDisplay(SkCanvas* canvas, 106 int top, 107 int right, 108 int width) const; 109 SkRect DrawPaintTimeDisplay(SkCanvas* canvas, 110 const PaintTimeCounter* paint_time_counter, 111 int top, 112 int right) const; 113 void DrawDebugRect(SkCanvas* canvas, 114 SkPaint* paint, 115 const DebugRect& rect, 116 SkColor stroke_color, 117 SkColor fill_color, 118 float stroke_width, 119 const std::string& label_text) const; 120 void DrawDebugRects(SkCanvas* canvas, DebugRectHistory* debug_rect_history); 121 122 void AcquireResource(ResourceProvider* resource_provider); 123 void ReleaseUnmatchedSizeResources(ResourceProvider* resource_provider); 124 125 ScopedPtrVector<ScopedResource> resources_; 126 scoped_ptr<SkCanvas> hud_canvas_; 127 128 skia::RefPtr<SkTypeface> typeface_; 129 130 Graph fps_graph_; 131 Graph paint_time_graph_; 132 MemoryHistory::Entry memory_entry_; 133 int fade_step_; 134 std::vector<DebugRect> paint_rects_; 135 136 base::TimeTicks time_of_last_graph_update_; 137 138 DISALLOW_COPY_AND_ASSIGN(HeadsUpDisplayLayerImpl); 139 }; 140 141 } // namespace cc 142 143 #endif // CC_LAYERS_HEADS_UP_DISPLAY_LAYER_IMPL_H_ 144