OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "SkBenchmark.h" | 8 #include "SkBenchmark.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkCommandLineFlags.h" |
10 #include "SkPaint.h" | 11 #include "SkPaint.h" |
11 #include "SkRandom.h" | 12 #include "SkRandom.h" |
| 13 #include "SkShader.h" |
12 #include "SkString.h" | 14 #include "SkString.h" |
13 #include "SkShader.h" | 15 |
| 16 DEFINE_double(strokeWidth, -1.0, "If set, use this stroke width in RectBench."); |
14 | 17 |
15 class RectBench : public SkBenchmark { | 18 class RectBench : public SkBenchmark { |
16 public: | 19 public: |
17 int fShift, fStroke; | 20 int fShift, fStroke; |
18 enum { | 21 enum { |
19 W = 640, | 22 W = 640, |
20 H = 480, | 23 H = 480, |
21 N = SkBENCHLOOP(300) | 24 N = 7, // TODO: polygon and lines assert in debug mode when greater tha
n this. Ideally 300. |
22 }; | 25 }; |
23 SkRect fRects[N]; | 26 SkRect fRects[N]; |
24 SkColor fColors[N]; | 27 SkColor fColors[N]; |
25 | 28 |
26 RectBench(void* param, int shift, int stroke = 0) | 29 RectBench(void* param, int shift, int stroke = 0) |
27 : INHERITED(param) | 30 : INHERITED(param) |
28 , fShift(shift) | 31 , fShift(shift) |
29 , fStroke(stroke) { | 32 , fStroke(stroke) { |
30 SkRandom rand; | 33 SkRandom rand; |
31 const SkScalar offset = SK_Scalar1/3; | 34 const SkScalar offset = SK_Scalar1/3; |
(...skipping 27 matching lines...) Expand all Loading... |
59 c->drawRect(r, p); | 62 c->drawRect(r, p); |
60 } | 63 } |
61 | 64 |
62 virtual const char* onGetName() { return computeName("rects"); } | 65 virtual const char* onGetName() { return computeName("rects"); } |
63 virtual void onDraw(SkCanvas* canvas) { | 66 virtual void onDraw(SkCanvas* canvas) { |
64 SkPaint paint; | 67 SkPaint paint; |
65 if (fStroke > 0) { | 68 if (fStroke > 0) { |
66 paint.setStyle(SkPaint::kStroke_Style); | 69 paint.setStyle(SkPaint::kStroke_Style); |
67 paint.setStrokeWidth(SkIntToScalar(fStroke)); | 70 paint.setStrokeWidth(SkIntToScalar(fStroke)); |
68 } | 71 } |
69 for (int i = 0; i < N; i++) { | 72 for (int i = 0; i < this->getLoops(); i++) { |
70 paint.setColor(fColors[i]); | 73 paint.setColor(fColors[i % N]); |
71 this->setupPaint(&paint); | 74 this->setupPaint(&paint); |
72 this->drawThisRect(canvas, fRects[i], paint); | 75 this->drawThisRect(canvas, fRects[i % N], paint); |
73 } | 76 } |
74 } | 77 } |
75 private: | 78 private: |
76 typedef SkBenchmark INHERITED; | 79 typedef SkBenchmark INHERITED; |
77 }; | 80 }; |
78 | 81 |
79 class SrcModeRectBench : public RectBench { | 82 class SrcModeRectBench : public RectBench { |
80 public: | 83 public: |
81 SrcModeRectBench(void* param) : INHERITED(param, 1, 0) { | 84 SrcModeRectBench(void* param) : INHERITED(param, 1, 0) { |
82 fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); | 85 fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 fName = name; | 140 fName = name; |
138 } | 141 } |
139 | 142 |
140 protected: | 143 protected: |
141 virtual void onDraw(SkCanvas* canvas) { | 144 virtual void onDraw(SkCanvas* canvas) { |
142 SkScalar gSizes[] = { | 145 SkScalar gSizes[] = { |
143 SkIntToScalar(7), 0 | 146 SkIntToScalar(7), 0 |
144 }; | 147 }; |
145 size_t sizes = SK_ARRAY_COUNT(gSizes); | 148 size_t sizes = SK_ARRAY_COUNT(gSizes); |
146 | 149 |
147 if (this->hasStrokeWidth()) { | 150 if (FLAGS_strokeWidth >= 0) { |
148 gSizes[0] = this->getStrokeWidth(); | 151 gSizes[0] = FLAGS_strokeWidth; |
149 sizes = 1; | 152 sizes = 1; |
150 } | 153 } |
151 | 154 |
152 SkPaint paint; | 155 SkPaint paint; |
153 paint.setStrokeCap(SkPaint::kRound_Cap); | 156 paint.setStrokeCap(SkPaint::kRound_Cap); |
154 | 157 |
155 for (size_t i = 0; i < sizes; i++) { | 158 for (int loop = 0; loop < this->getLoops(); loop++) { |
156 paint.setStrokeWidth(gSizes[i]); | 159 for (size_t i = 0; i < sizes; i++) { |
157 this->setupPaint(&paint); | 160 paint.setStrokeWidth(gSizes[i]); |
158 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); | 161 this->setupPaint(&paint); |
159 paint.setColor(fColors[i]); | 162 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), pain
t); |
| 163 paint.setColor(fColors[i % N]); |
| 164 } |
160 } | 165 } |
161 } | 166 } |
162 virtual const char* onGetName() { return fName; } | 167 virtual const char* onGetName() { return fName; } |
163 }; | 168 }; |
164 | 169 |
165 class AARectBench : public SkBenchmark { | 170 class AARectBench : public SkBenchmark { |
166 public: | 171 public: |
167 enum { | 172 enum { |
168 W = 640, | 173 W = 640, |
169 H = 480, | 174 H = 480, |
(...skipping 13 matching lines...) Expand all Loading... |
183 virtual void onDraw(SkCanvas* canvas) { | 188 virtual void onDraw(SkCanvas* canvas) { |
184 static const SkScalar kHalfRectSize = SkFloatToScalar(0.75f); | 189 static const SkScalar kHalfRectSize = SkFloatToScalar(0.75f); |
185 | 190 |
186 SkPaint paint; | 191 SkPaint paint; |
187 this->setupPaint(&paint); | 192 this->setupPaint(&paint); |
188 paint.setAntiAlias(true); | 193 paint.setAntiAlias(true); |
189 paint.setColor(SK_ColorBLACK); | 194 paint.setColor(SK_ColorBLACK); |
190 SkRect r = { -kHalfRectSize, -kHalfRectSize, kHalfRectSize, kHalfRectSiz
e }; | 195 SkRect r = { -kHalfRectSize, -kHalfRectSize, kHalfRectSize, kHalfRectSiz
e }; |
191 int rot = 0; | 196 int rot = 0; |
192 | 197 |
193 // Draw small aa rects in a grid across the screen | 198 for (int i = 0; i < this->getLoops(); i++) { |
194 for (SkScalar y = kHalfRectSize+SK_Scalar1; y < H; y += 2*kHalfRectSize+
2) { | 199 // Draw small aa rects in a grid across the screen |
195 for (SkScalar x = kHalfRectSize+SK_Scalar1; x < W; x += 2*kHalfRectS
ize+2) { | 200 for (SkScalar y = kHalfRectSize+SK_Scalar1; y < H; y += 2*kHalfRectS
ize+2) { |
196 canvas->save(); | 201 for (SkScalar x = kHalfRectSize+SK_Scalar1; x < W; x += 2*kHalfR
ectSize+2) { |
197 canvas->translate(x, y); | 202 canvas->save(); |
| 203 canvas->translate(x, y); |
198 | 204 |
199 if (fRotate) { | 205 if (fRotate) { |
200 SkMatrix rotate; | 206 SkMatrix rotate; |
201 rotate.setRotate(SkIntToScalar(rot)); | 207 rotate.setRotate(SkIntToScalar(rot)); |
202 canvas->concat(rotate); | 208 canvas->concat(rotate); |
203 rot += 10; | 209 rot += 10; |
| 210 } |
| 211 |
| 212 canvas->drawRect(r, paint); |
| 213 canvas->restore(); |
204 } | 214 } |
205 | |
206 canvas->drawRect(r, paint); | |
207 canvas->restore(); | |
208 } | 215 } |
209 } | 216 } |
210 | 217 |
211 } | 218 } |
212 private: | 219 private: |
213 bool fRotate; | 220 bool fRotate; |
214 typedef SkBenchmark INHERITED; | 221 typedef SkBenchmark INHERITED; |
215 }; | 222 }; |
216 | 223 |
217 /******************************************************************************* | 224 /******************************************************************************* |
(...skipping 17 matching lines...) Expand all Loading... |
235 fName = name; | 242 fName = name; |
236 } | 243 } |
237 | 244 |
238 protected: | 245 protected: |
239 virtual void onDraw(SkCanvas* canvas) { | 246 virtual void onDraw(SkCanvas* canvas) { |
240 SkScalar gSizes[] = { | 247 SkScalar gSizes[] = { |
241 SkIntToScalar(13), SkIntToScalar(24) | 248 SkIntToScalar(13), SkIntToScalar(24) |
242 }; | 249 }; |
243 size_t sizes = SK_ARRAY_COUNT(gSizes); | 250 size_t sizes = SK_ARRAY_COUNT(gSizes); |
244 | 251 |
245 if (this->hasStrokeWidth()) { | 252 if (FLAGS_strokeWidth >= 0) { |
246 gSizes[0] = this->getStrokeWidth(); | 253 gSizes[0] = FLAGS_strokeWidth; |
247 sizes = 1; | 254 sizes = 1; |
248 } | 255 } |
249 SkRandom rand; | 256 SkRandom rand; |
250 SkColor color = 0xFF000000; | 257 SkColor color = 0xFF000000; |
251 U8CPU alpha = 0xFF; | 258 U8CPU alpha = 0xFF; |
252 SkPaint paint; | 259 SkPaint paint; |
253 paint.setStrokeCap(SkPaint::kRound_Cap); | 260 paint.setStrokeCap(SkPaint::kRound_Cap); |
254 if (_type == KMaskShader) { | 261 if (_type == KMaskShader) { |
255 SkBitmap srcBM; | 262 SkBitmap srcBM; |
256 srcBM.setConfig(SkBitmap::kARGB_8888_Config, 10, 1); | 263 srcBM.setConfig(SkBitmap::kARGB_8888_Config, 10, 1); |
257 srcBM.allocPixels(); | 264 srcBM.allocPixels(); |
258 srcBM.eraseColor(0xFF00FF00); | 265 srcBM.eraseColor(0xFF00FF00); |
259 | 266 |
260 SkShader* s; | 267 SkShader* s; |
261 s = SkShader::CreateBitmapShader(srcBM, SkShader::kClamp_TileMode, | 268 s = SkShader::CreateBitmapShader(srcBM, SkShader::kClamp_TileMode, |
262 SkShader::kClamp_TileMode); | 269 SkShader::kClamp_TileMode); |
263 paint.setShader(s)->unref(); | 270 paint.setShader(s)->unref(); |
264 } | 271 } |
265 for (size_t i = 0; i < sizes; i++) { | 272 for (int loop = 0; loop < this->getLoops(); loop++) { |
266 switch (_type) { | 273 for (size_t i = 0; i < sizes; i++) { |
267 case kMaskOpaque: | 274 switch (_type) { |
268 color = fColors[i]; | 275 case kMaskOpaque: |
269 alpha = 0xFF; | 276 color = fColors[i]; |
270 break; | 277 alpha = 0xFF; |
271 case kMaskBlack: | 278 break; |
272 alpha = 0xFF; | 279 case kMaskBlack: |
273 color = 0xFF000000; | 280 alpha = 0xFF; |
274 break; | 281 color = 0xFF000000; |
275 case kMaskColor: | 282 break; |
276 color = fColors[i]; | 283 case kMaskColor: |
277 alpha = rand.nextU() & 255; | 284 color = fColors[i]; |
278 break; | 285 alpha = rand.nextU() & 255; |
279 case KMaskShader: | 286 break; |
280 break; | 287 case KMaskShader: |
281 } | 288 break; |
282 paint.setStrokeWidth(gSizes[i]); | 289 } |
283 this->setupPaint(&paint); | 290 paint.setStrokeWidth(gSizes[i]); |
284 paint.setColor(color); | 291 this->setupPaint(&paint); |
285 paint.setAlpha(alpha); | 292 paint.setColor(color); |
286 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), paint); | 293 paint.setAlpha(alpha); |
287 } | 294 canvas->drawPoints(fMode, N * 2, SkTCast<SkPoint*>(fRects), pain
t); |
| 295 } |
| 296 } |
288 } | 297 } |
289 virtual const char* onGetName() { return fName; } | 298 virtual const char* onGetName() { return fName; } |
290 private: | 299 private: |
291 typedef RectBench INHERITED; | 300 typedef RectBench INHERITED; |
292 kMaskType _type; | 301 kMaskType _type; |
293 }; | 302 }; |
294 | 303 |
295 | 304 |
296 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1)); ) | 305 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1)); ) |
297 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1, 4)); ) | 306 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1, 4)); ) |
(...skipping 27 matching lines...) Expand all Loading... |
325 BlitMaskBench::kMaskBlack, "maskblack") | 334 BlitMaskBench::kMaskBlack, "maskblack") |
326 ); ) | 335 ); ) |
327 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, | 336 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, |
328 (p, SkCanvas::kPoints_PointMode, | 337 (p, SkCanvas::kPoints_PointMode, |
329 BlitMaskBench::kMaskColor, "maskcolor") | 338 BlitMaskBench::kMaskColor, "maskcolor") |
330 ); ) | 339 ); ) |
331 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, | 340 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, |
332 (p, SkCanvas::kPoints_PointMode, | 341 (p, SkCanvas::kPoints_PointMode, |
333 BlitMaskBench::KMaskShader, "maskshader") | 342 BlitMaskBench::KMaskShader, "maskshader") |
334 ); ) | 343 ); ) |
OLD | NEW |