OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/containers/hash_tables.h" | 5 #include "base/containers/hash_tables.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
8 #include "skia/ext/benchmarking_canvas.h" | 8 #include "skia/ext/benchmarking_canvas.h" |
9 #include "third_party/skia/include/core/SkSurface.h" | 9 #include "third_party/skia/include/core/SkSurface.h" |
10 #include "third_party/skia/include/utils/SkProxyCanvas.h" | 10 #include "third_party/skia/include/utils/SkNWayCanvas.h" |
11 | 11 |
12 namespace skia { | 12 namespace skia { |
13 | 13 |
14 class AutoStamper { | 14 class AutoStamper { |
15 public: | 15 public: |
16 AutoStamper(TimingCanvas* timing_canvas); | 16 AutoStamper(TimingCanvas* timing_canvas); |
17 ~AutoStamper(); | 17 ~AutoStamper(); |
18 | 18 |
19 private: | 19 private: |
20 TimingCanvas* timing_canvas_; | 20 TimingCanvas* timing_canvas_; |
21 base::TimeTicks start_ticks_; | 21 base::TimeTicks start_ticks_; |
22 }; | 22 }; |
23 | 23 |
24 class TimingCanvas : public SkProxyCanvas { | 24 class TimingCanvas : public SkNWayCanvas { |
25 public: | 25 public: |
26 TimingCanvas(int width, int height, const BenchmarkingCanvas* track_canvas) | 26 TimingCanvas(int width, int height, const BenchmarkingCanvas* track_canvas) |
27 : tracking_canvas_(track_canvas) { | 27 : SkNWayCanvas(width, height) |
| 28 , tracking_canvas_(track_canvas) { |
28 surface_ = skia::AdoptRef(SkSurface::NewRasterN32Premul(width, height)); | 29 surface_ = skia::AdoptRef(SkSurface::NewRasterN32Premul(width, height)); |
29 | 30 |
30 setProxy(surface_->getCanvas()); | 31 addCanvas(surface_->getCanvas()); |
31 } | 32 } |
32 | 33 |
33 ~TimingCanvas() override {} | 34 ~TimingCanvas() override {} |
34 | 35 |
35 double GetTime(size_t index) { | 36 double GetTime(size_t index) { |
36 TimingsMap::const_iterator timing_info = timings_map_.find(index); | 37 TimingsMap::const_iterator timing_info = timings_map_.find(index); |
37 return timing_info != timings_map_.end() | 38 return timing_info != timings_map_.end() |
38 ? timing_info->second.InMillisecondsF() | 39 ? timing_info->second.InMillisecondsF() |
39 : 0.0; | 40 : 0.0; |
40 } | 41 } |
41 | 42 |
42 // SkCanvas overrides. | 43 // SkCanvas overrides. |
43 void willSave() override { | 44 void willSave() override { |
44 AutoStamper stamper(this); | 45 AutoStamper stamper(this); |
45 SkProxyCanvas::willSave(); | 46 SkNWayCanvas::willSave(); |
46 } | 47 } |
47 | 48 |
48 SaveLayerStrategy willSaveLayer(const SkRect* bounds, | 49 SaveLayerStrategy willSaveLayer(const SkRect* bounds, |
49 const SkPaint* paint, | 50 const SkPaint* paint, |
50 SaveFlags flags) override { | 51 SaveFlags flags) override { |
51 AutoStamper stamper(this); | 52 AutoStamper stamper(this); |
52 return SkProxyCanvas::willSaveLayer(bounds, paint, flags); | 53 return SkNWayCanvas::willSaveLayer(bounds, paint, flags); |
53 } | 54 } |
54 | 55 |
55 void willRestore() override { | 56 void willRestore() override { |
56 AutoStamper stamper(this); | 57 AutoStamper stamper(this); |
57 SkProxyCanvas::willRestore(); | 58 SkNWayCanvas::willRestore(); |
58 } | 59 } |
59 | 60 |
60 void onDrawPaint(const SkPaint& paint) override { | 61 void onDrawPaint(const SkPaint& paint) override { |
61 AutoStamper stamper(this); | 62 AutoStamper stamper(this); |
62 SkProxyCanvas::onDrawPaint(paint); | 63 SkNWayCanvas::onDrawPaint(paint); |
63 } | 64 } |
64 | 65 |
65 void onDrawPoints(PointMode mode, | 66 void onDrawPoints(PointMode mode, |
66 size_t count, | 67 size_t count, |
67 const SkPoint pts[], | 68 const SkPoint pts[], |
68 const SkPaint& paint) override { | 69 const SkPaint& paint) override { |
69 AutoStamper stamper(this); | 70 AutoStamper stamper(this); |
70 SkProxyCanvas::onDrawPoints(mode, count, pts, paint); | 71 SkNWayCanvas::onDrawPoints(mode, count, pts, paint); |
71 } | 72 } |
72 | 73 |
73 void onDrawOval(const SkRect& rect, const SkPaint& paint) override { | 74 void onDrawOval(const SkRect& rect, const SkPaint& paint) override { |
74 AutoStamper stamper(this); | 75 AutoStamper stamper(this); |
75 SkProxyCanvas::onDrawOval(rect, paint); | 76 SkNWayCanvas::onDrawOval(rect, paint); |
76 } | 77 } |
77 | 78 |
78 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { | 79 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { |
79 AutoStamper stamper(this); | 80 AutoStamper stamper(this); |
80 SkProxyCanvas::onDrawRect(rect, paint); | 81 SkNWayCanvas::onDrawRect(rect, paint); |
81 } | 82 } |
82 | 83 |
83 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { | 84 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { |
84 AutoStamper stamper(this); | 85 AutoStamper stamper(this); |
85 SkProxyCanvas::onDrawRRect(rrect, paint); | 86 SkNWayCanvas::onDrawRRect(rrect, paint); |
86 } | 87 } |
87 | 88 |
88 void onDrawPath(const SkPath& path, const SkPaint& paint) override { | 89 void onDrawPath(const SkPath& path, const SkPaint& paint) override { |
89 AutoStamper stamper(this); | 90 AutoStamper stamper(this); |
90 SkProxyCanvas::onDrawPath(path, paint); | 91 SkNWayCanvas::onDrawPath(path, paint); |
91 } | 92 } |
92 | 93 |
93 void onDrawBitmap(const SkBitmap& bitmap, | 94 void onDrawBitmap(const SkBitmap& bitmap, |
94 SkScalar left, | 95 SkScalar left, |
95 SkScalar top, | 96 SkScalar top, |
96 const SkPaint* paint) override { | 97 const SkPaint* paint) override { |
97 AutoStamper stamper(this); | 98 AutoStamper stamper(this); |
98 SkProxyCanvas::onDrawBitmap(bitmap, left, top, paint); | 99 SkNWayCanvas::onDrawBitmap(bitmap, left, top, paint); |
99 } | 100 } |
100 | 101 |
101 void onDrawBitmapRect(const SkBitmap& bitmap, | 102 void onDrawBitmapRect(const SkBitmap& bitmap, |
102 const SkRect* src, | 103 const SkRect* src, |
103 const SkRect& dst, | 104 const SkRect& dst, |
104 const SkPaint* paint, | 105 const SkPaint* paint, |
105 DrawBitmapRectFlags flags) override { | 106 DrawBitmapRectFlags flags) override { |
106 AutoStamper stamper(this); | 107 AutoStamper stamper(this); |
107 SkProxyCanvas::onDrawBitmapRect(bitmap, src, dst, paint, flags); | 108 SkNWayCanvas::onDrawBitmapRect(bitmap, src, dst, paint, flags); |
108 } | 109 } |
109 | 110 |
110 void onDrawSprite(const SkBitmap& bitmap, | 111 void onDrawSprite(const SkBitmap& bitmap, |
111 int left, | 112 int left, |
112 int top, | 113 int top, |
113 const SkPaint* paint) override { | 114 const SkPaint* paint) override { |
114 AutoStamper stamper(this); | 115 AutoStamper stamper(this); |
115 SkProxyCanvas::onDrawSprite(bitmap, left, top, paint); | 116 SkNWayCanvas::onDrawSprite(bitmap, left, top, paint); |
116 } | 117 } |
117 | 118 |
118 void onDrawVertices(VertexMode vmode, | 119 void onDrawVertices(VertexMode vmode, |
119 int vertexCount, | 120 int vertexCount, |
120 const SkPoint vertices[], | 121 const SkPoint vertices[], |
121 const SkPoint texs[], | 122 const SkPoint texs[], |
122 const SkColor colors[], | 123 const SkColor colors[], |
123 SkXfermode* xmode, | 124 SkXfermode* xmode, |
124 const uint16_t indices[], | 125 const uint16_t indices[], |
125 int indexCount, | 126 int indexCount, |
126 const SkPaint& paint) override { | 127 const SkPaint& paint) override { |
127 AutoStamper stamper(this); | 128 AutoStamper stamper(this); |
128 SkProxyCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, | 129 SkNWayCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, |
129 xmode, indices, indexCount, paint); | 130 xmode, indices, indexCount, paint); |
130 } | 131 } |
131 | 132 |
132 protected: | 133 protected: |
133 void onDrawText(const void* text, | 134 void onDrawText(const void* text, |
134 size_t byteLength, | 135 size_t byteLength, |
135 SkScalar x, | 136 SkScalar x, |
136 SkScalar y, | 137 SkScalar y, |
137 const SkPaint& paint) override { | 138 const SkPaint& paint) override { |
138 AutoStamper stamper(this); | 139 AutoStamper stamper(this); |
139 SkProxyCanvas::onDrawText(text, byteLength, x, y, paint); | 140 SkNWayCanvas::onDrawText(text, byteLength, x, y, paint); |
140 } | 141 } |
141 | 142 |
142 void onDrawPosText(const void* text, | 143 void onDrawPosText(const void* text, |
143 size_t byteLength, | 144 size_t byteLength, |
144 const SkPoint pos[], | 145 const SkPoint pos[], |
145 const SkPaint& paint) override { | 146 const SkPaint& paint) override { |
146 AutoStamper stamper(this); | 147 AutoStamper stamper(this); |
147 SkProxyCanvas::onDrawPosText(text, byteLength, pos, paint); | 148 SkNWayCanvas::onDrawPosText(text, byteLength, pos, paint); |
148 } | 149 } |
149 | 150 |
150 void onDrawPosTextH(const void* text, | 151 void onDrawPosTextH(const void* text, |
151 size_t byteLength, | 152 size_t byteLength, |
152 const SkScalar xpos[], | 153 const SkScalar xpos[], |
153 SkScalar constY, | 154 SkScalar constY, |
154 const SkPaint& paint) override { | 155 const SkPaint& paint) override { |
155 AutoStamper stamper(this); | 156 AutoStamper stamper(this); |
156 SkProxyCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); | 157 SkNWayCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); |
157 } | 158 } |
158 | 159 |
159 void onDrawTextOnPath(const void* text, | 160 void onDrawTextOnPath(const void* text, |
160 size_t byteLength, | 161 size_t byteLength, |
161 const SkPath& path, | 162 const SkPath& path, |
162 const SkMatrix* matrix, | 163 const SkMatrix* matrix, |
163 const SkPaint& paint) override { | 164 const SkPaint& paint) override { |
164 AutoStamper stamper(this); | 165 AutoStamper stamper(this); |
165 SkProxyCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); | 166 SkNWayCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); |
166 } | 167 } |
167 | 168 |
168 void onClipRect(const SkRect& rect, | 169 void onClipRect(const SkRect& rect, |
169 SkRegion::Op op, | 170 SkRegion::Op op, |
170 ClipEdgeStyle edge_style) override { | 171 ClipEdgeStyle edge_style) override { |
171 AutoStamper stamper(this); | 172 AutoStamper stamper(this); |
172 SkProxyCanvas::onClipRect(rect, op, edge_style); | 173 SkNWayCanvas::onClipRect(rect, op, edge_style); |
173 } | 174 } |
174 | 175 |
175 void onClipRRect(const SkRRect& rrect, | 176 void onClipRRect(const SkRRect& rrect, |
176 SkRegion::Op op, | 177 SkRegion::Op op, |
177 ClipEdgeStyle edge_style) override { | 178 ClipEdgeStyle edge_style) override { |
178 AutoStamper stamper(this); | 179 AutoStamper stamper(this); |
179 SkProxyCanvas::onClipRRect(rrect, op, edge_style); | 180 SkNWayCanvas::onClipRRect(rrect, op, edge_style); |
180 } | 181 } |
181 | 182 |
182 void onClipPath(const SkPath& path, | 183 void onClipPath(const SkPath& path, |
183 SkRegion::Op op, | 184 SkRegion::Op op, |
184 ClipEdgeStyle edge_style) override { | 185 ClipEdgeStyle edge_style) override { |
185 AutoStamper stamper(this); | 186 AutoStamper stamper(this); |
186 SkProxyCanvas::onClipPath(path, op, edge_style); | 187 SkNWayCanvas::onClipPath(path, op, edge_style); |
187 } | 188 } |
188 | 189 |
189 void onClipRegion(const SkRegion& region, SkRegion::Op op) override { | 190 void onClipRegion(const SkRegion& region, SkRegion::Op op) override { |
190 AutoStamper stamper(this); | 191 AutoStamper stamper(this); |
191 SkProxyCanvas::onClipRegion(region, op); | 192 SkNWayCanvas::onClipRegion(region, op); |
192 } | 193 } |
193 | 194 |
194 void onDrawPicture(const SkPicture* picture, | 195 void onDrawPicture(const SkPicture* picture, |
195 const SkMatrix* matrix, | 196 const SkMatrix* matrix, |
196 const SkPaint* paint) override { | 197 const SkPaint* paint) override { |
197 AutoStamper stamper(this); | 198 AutoStamper stamper(this); |
198 SkProxyCanvas::onDrawPicture(picture, matrix, paint); | 199 SkNWayCanvas::onDrawPicture(picture, matrix, paint); |
199 } | 200 } |
200 | 201 |
201 private: | 202 private: |
202 typedef base::hash_map<size_t, base::TimeDelta> TimingsMap; | 203 typedef base::hash_map<size_t, base::TimeDelta> TimingsMap; |
203 TimingsMap timings_map_; | 204 TimingsMap timings_map_; |
204 | 205 |
205 skia::RefPtr<SkSurface> surface_; | 206 skia::RefPtr<SkSurface> surface_; |
206 | 207 |
207 friend class AutoStamper; | 208 friend class AutoStamper; |
208 const BenchmarkingCanvas* tracking_canvas_; | 209 const BenchmarkingCanvas* tracking_canvas_; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); | 242 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); |
242 return debug_canvas_->getDrawCommandAt(index); | 243 return debug_canvas_->getDrawCommandAt(index); |
243 } | 244 } |
244 | 245 |
245 double BenchmarkingCanvas::GetTime(size_t index) { | 246 double BenchmarkingCanvas::GetTime(size_t index) { |
246 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); | 247 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); |
247 return timing_canvas_->GetTime(index); | 248 return timing_canvas_->GetTime(index); |
248 } | 249 } |
249 | 250 |
250 } // namespace skia | 251 } // namespace skia |
OLD | NEW |