| 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 = 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 |