| 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 "SkCommandLineFlags.h" |
| 11 #include "SkPaint.h" | 11 #include "SkPaint.h" |
| 12 #include "SkRandom.h" | 12 #include "SkRandom.h" |
| 13 #include "SkShader.h" | 13 #include "SkShader.h" |
| 14 #include "SkString.h" | 14 #include "SkString.h" |
| 15 | 15 |
| 16 DEFINE_double(strokeWidth, -1.0, "If set, use this stroke width in RectBench."); | 16 DEFINE_double(strokeWidth, -1.0, "If set, use this stroke width in RectBench."); |
| 17 | 17 |
| 18 class RectBench : public SkBenchmark { | 18 class RectBench : public SkBenchmark { |
| 19 public: | 19 public: |
| 20 int fShift, fStroke; | 20 int fShift, fStroke; |
| 21 enum { | 21 enum { |
| 22 W = 640, | 22 W = 640, |
| 23 H = 480, | 23 H = 480, |
| 24 N = 300, | 24 N = 300, |
| 25 }; | 25 }; |
| 26 SkRect fRects[N]; | 26 SkRect fRects[N]; |
| 27 SkColor fColors[N]; | 27 SkColor fColors[N]; |
| 28 | 28 |
| 29 RectBench(void* param, int shift, int stroke = 0) | 29 RectBench(int shift, int stroke = 0) |
| 30 : INHERITED(param) | 30 : fShift(shift) |
| 31 , fShift(shift) | |
| 32 , fStroke(stroke) { | 31 , fStroke(stroke) { |
| 33 SkRandom rand; | 32 SkRandom rand; |
| 34 const SkScalar offset = SK_Scalar1/3; | 33 const SkScalar offset = SK_Scalar1/3; |
| 35 for (int i = 0; i < N; i++) { | 34 for (int i = 0; i < N; i++) { |
| 36 int x = rand.nextU() % W; | 35 int x = rand.nextU() % W; |
| 37 int y = rand.nextU() % H; | 36 int y = rand.nextU() % H; |
| 38 int w = rand.nextU() % W; | 37 int w = rand.nextU() % W; |
| 39 int h = rand.nextU() % H; | 38 int h = rand.nextU() % H; |
| 40 w >>= shift; | 39 w >>= shift; |
| 41 h >>= shift; | 40 h >>= shift; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 this->setupPaint(&paint); | 73 this->setupPaint(&paint); |
| 75 this->drawThisRect(canvas, fRects[i % N], paint); | 74 this->drawThisRect(canvas, fRects[i % N], paint); |
| 76 } | 75 } |
| 77 } | 76 } |
| 78 private: | 77 private: |
| 79 typedef SkBenchmark INHERITED; | 78 typedef SkBenchmark INHERITED; |
| 80 }; | 79 }; |
| 81 | 80 |
| 82 class SrcModeRectBench : public RectBench { | 81 class SrcModeRectBench : public RectBench { |
| 83 public: | 82 public: |
| 84 SrcModeRectBench(void* param) : INHERITED(param, 1, 0) { | 83 SrcModeRectBench() : INHERITED(1, 0) { |
| 85 fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); | 84 fMode = SkXfermode::Create(SkXfermode::kSrc_Mode); |
| 86 } | 85 } |
| 87 | 86 |
| 88 virtual ~SrcModeRectBench() { | 87 virtual ~SrcModeRectBench() { |
| 89 SkSafeUnref(fMode); | 88 SkSafeUnref(fMode); |
| 90 } | 89 } |
| 91 | 90 |
| 92 protected: | 91 protected: |
| 93 virtual void setupPaint(SkPaint* paint) SK_OVERRIDE { | 92 virtual void setupPaint(SkPaint* paint) SK_OVERRIDE { |
| 94 this->INHERITED::setupPaint(paint); | 93 this->INHERITED::setupPaint(paint); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 105 | 104 |
| 106 private: | 105 private: |
| 107 SkString fName; | 106 SkString fName; |
| 108 SkXfermode* fMode; | 107 SkXfermode* fMode; |
| 109 | 108 |
| 110 typedef RectBench INHERITED; | 109 typedef RectBench INHERITED; |
| 111 }; | 110 }; |
| 112 | 111 |
| 113 class OvalBench : public RectBench { | 112 class OvalBench : public RectBench { |
| 114 public: | 113 public: |
| 115 OvalBench(void* param, int shift, int stroke = 0) : RectBench(param, shift,
stroke) {} | 114 OvalBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} |
| 116 protected: | 115 protected: |
| 117 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { | 116 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { |
| 118 c->drawOval(r, p); | 117 c->drawOval(r, p); |
| 119 } | 118 } |
| 120 virtual const char* onGetName() { return computeName("ovals"); } | 119 virtual const char* onGetName() { return computeName("ovals"); } |
| 121 }; | 120 }; |
| 122 | 121 |
| 123 class RRectBench : public RectBench { | 122 class RRectBench : public RectBench { |
| 124 public: | 123 public: |
| 125 RRectBench(void* param, int shift, int stroke = 0) : RectBench(param, shift,
stroke) {} | 124 RRectBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} |
| 126 protected: | 125 protected: |
| 127 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { | 126 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { |
| 128 c->drawRoundRect(r, r.width() / 4, r.height() / 4, p); | 127 c->drawRoundRect(r, r.width() / 4, r.height() / 4, p); |
| 129 } | 128 } |
| 130 virtual const char* onGetName() { return computeName("rrects"); } | 129 virtual const char* onGetName() { return computeName("rrects"); } |
| 131 }; | 130 }; |
| 132 | 131 |
| 133 class PointsBench : public RectBench { | 132 class PointsBench : public RectBench { |
| 134 public: | 133 public: |
| 135 SkCanvas::PointMode fMode; | 134 SkCanvas::PointMode fMode; |
| 136 const char* fName; | 135 const char* fName; |
| 137 | 136 |
| 138 PointsBench(void* param, SkCanvas::PointMode mode, const char* name) : | 137 PointsBench(SkCanvas::PointMode mode, const char* name) |
| 139 RectBench(param, 2), fMode(mode) { | 138 : RectBench(2) |
| 139 , fMode(mode) { |
| 140 fName = name; | 140 fName = name; |
| 141 } | 141 } |
| 142 | 142 |
| 143 protected: | 143 protected: |
| 144 virtual void onDraw(SkCanvas* canvas) { | 144 virtual void onDraw(SkCanvas* canvas) { |
| 145 SkScalar gSizes[] = { | 145 SkScalar gSizes[] = { |
| 146 SkIntToScalar(7), 0 | 146 SkIntToScalar(7), 0 |
| 147 }; | 147 }; |
| 148 size_t sizes = SK_ARRAY_COUNT(gSizes); | 148 size_t sizes = SK_ARRAY_COUNT(gSizes); |
| 149 | 149 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 167 virtual const char* onGetName() { return fName; } | 167 virtual const char* onGetName() { return fName; } |
| 168 }; | 168 }; |
| 169 | 169 |
| 170 class AARectBench : public SkBenchmark { | 170 class AARectBench : public SkBenchmark { |
| 171 public: | 171 public: |
| 172 enum { | 172 enum { |
| 173 W = 640, | 173 W = 640, |
| 174 H = 480, | 174 H = 480, |
| 175 }; | 175 }; |
| 176 | 176 |
| 177 AARectBench(void* param, bool rotate) : INHERITED(param), fRotate(rotate) {} | 177 AARectBench(bool rotate) : fRotate(rotate) {} |
| 178 | 178 |
| 179 protected: | 179 protected: |
| 180 | 180 |
| 181 virtual const char* onGetName() { | 181 virtual const char* onGetName() { |
| 182 if (fRotate) { | 182 if (fRotate) { |
| 183 return "aarects_rotated"; | 183 return "aarects_rotated"; |
| 184 } | 184 } |
| 185 return "aarects"; | 185 return "aarects"; |
| 186 } | 186 } |
| 187 | 187 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 public: | 229 public: |
| 230 enum kMaskType { | 230 enum kMaskType { |
| 231 kMaskOpaque = 0, | 231 kMaskOpaque = 0, |
| 232 kMaskBlack, | 232 kMaskBlack, |
| 233 kMaskColor, | 233 kMaskColor, |
| 234 KMaskShader | 234 KMaskShader |
| 235 }; | 235 }; |
| 236 SkCanvas::PointMode fMode; | 236 SkCanvas::PointMode fMode; |
| 237 const char* fName; | 237 const char* fName; |
| 238 | 238 |
| 239 BlitMaskBench(void* param, SkCanvas::PointMode mode, | 239 BlitMaskBench(SkCanvas::PointMode mode, |
| 240 BlitMaskBench::kMaskType type, const char* name) : | 240 BlitMaskBench::kMaskType type, const char* name) : |
| 241 RectBench(param, 2), fMode(mode), _type(type) { | 241 RectBench(2), fMode(mode), _type(type) { |
| 242 fName = name; | 242 fName = name; |
| 243 } | 243 } |
| 244 | 244 |
| 245 protected: | 245 protected: |
| 246 virtual void onDraw(SkCanvas* canvas) { | 246 virtual void onDraw(SkCanvas* canvas) { |
| 247 SkScalar gSizes[] = { | 247 SkScalar gSizes[] = { |
| 248 SkIntToScalar(13), SkIntToScalar(24) | 248 SkIntToScalar(13), SkIntToScalar(24) |
| 249 }; | 249 }; |
| 250 size_t sizes = SK_ARRAY_COUNT(gSizes); | 250 size_t sizes = SK_ARRAY_COUNT(gSizes); |
| 251 | 251 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 } | 295 } |
| 296 } | 296 } |
| 297 } | 297 } |
| 298 virtual const char* onGetName() { return fName; } | 298 virtual const char* onGetName() { return fName; } |
| 299 private: | 299 private: |
| 300 typedef RectBench INHERITED; | 300 typedef RectBench INHERITED; |
| 301 kMaskType _type; | 301 kMaskType _type; |
| 302 }; | 302 }; |
| 303 | 303 |
| 304 | 304 |
| 305 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1)); ) | 305 DEF_BENCH( return SkNEW_ARGS(RectBench, (1)); ) |
| 306 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 1, 4)); ) | 306 DEF_BENCH( return SkNEW_ARGS(RectBench, (1, 4)); ) |
| 307 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 3)); ) | 307 DEF_BENCH( return SkNEW_ARGS(RectBench, (3)); ) |
| 308 DEF_BENCH( return SkNEW_ARGS(RectBench, (p, 3, 4)); ) | 308 DEF_BENCH( return SkNEW_ARGS(RectBench, (3, 4)); ) |
| 309 DEF_BENCH( return SkNEW_ARGS(OvalBench, (p, 1)); ) | 309 DEF_BENCH( return SkNEW_ARGS(OvalBench, (1)); ) |
| 310 DEF_BENCH( return SkNEW_ARGS(OvalBench, (p, 3)); ) | 310 DEF_BENCH( return SkNEW_ARGS(OvalBench, (3)); ) |
| 311 DEF_BENCH( return SkNEW_ARGS(OvalBench, (p, 1, 4)); ) | 311 DEF_BENCH( return SkNEW_ARGS(OvalBench, (1, 4)); ) |
| 312 DEF_BENCH( return SkNEW_ARGS(OvalBench, (p, 3, 4)); ) | 312 DEF_BENCH( return SkNEW_ARGS(OvalBench, (3, 4)); ) |
| 313 DEF_BENCH( return SkNEW_ARGS(RRectBench, (p, 1)); ) | 313 DEF_BENCH( return SkNEW_ARGS(RRectBench, (1)); ) |
| 314 DEF_BENCH( return SkNEW_ARGS(RRectBench, (p, 1, 4)); ) | 314 DEF_BENCH( return SkNEW_ARGS(RRectBench, (1, 4)); ) |
| 315 DEF_BENCH( return SkNEW_ARGS(RRectBench, (p, 3)); ) | 315 DEF_BENCH( return SkNEW_ARGS(RRectBench, (3)); ) |
| 316 DEF_BENCH( return SkNEW_ARGS(RRectBench, (p, 3, 4)); ) | 316 DEF_BENCH( return SkNEW_ARGS(RRectBench, (3, 4)); ) |
| 317 DEF_BENCH( return SkNEW_ARGS(PointsBench, (p, SkCanvas::kPoints_PointMode, "poin
ts")); ) | 317 DEF_BENCH( return SkNEW_ARGS(PointsBench, (SkCanvas::kPoints_PointMode, "points"
)); ) |
| 318 DEF_BENCH( return SkNEW_ARGS(PointsBench, (p, SkCanvas::kLines_PointMode, "lines
")); ) | 318 DEF_BENCH( return SkNEW_ARGS(PointsBench, (SkCanvas::kLines_PointMode, "lines"))
; ) |
| 319 DEF_BENCH( return SkNEW_ARGS(PointsBench, (p, SkCanvas::kPolygon_PointMode, "pol
ygon")); ) | 319 DEF_BENCH( return SkNEW_ARGS(PointsBench, (SkCanvas::kPolygon_PointMode, "polygo
n")); ) |
| 320 | 320 |
| 321 DEF_BENCH( return SkNEW_ARGS(SrcModeRectBench, (p)); ) | 321 DEF_BENCH( return SkNEW_ARGS(SrcModeRectBench, ()); ) |
| 322 | 322 |
| 323 DEF_BENCH( return SkNEW_ARGS(AARectBench, (p, false)); ) | 323 DEF_BENCH( return SkNEW_ARGS(AARectBench, (false)); ) |
| 324 DEF_BENCH( return SkNEW_ARGS(AARectBench, (p, true)); ) | 324 DEF_BENCH( return SkNEW_ARGS(AARectBench, (true)); ) |
| 325 | 325 |
| 326 /* init the blitmask bench | 326 /* init the blitmask bench |
| 327 */ | 327 */ |
| 328 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, | 328 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, |
| 329 (p, SkCanvas::kPoints_PointMode, | 329 (SkCanvas::kPoints_PointMode, |
| 330 BlitMaskBench::kMaskOpaque, "maskopaque") | 330 BlitMaskBench::kMaskOpaque, "maskopaque") |
| 331 ); ) | 331 ); ) |
| 332 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, | 332 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, |
| 333 (p, SkCanvas::kPoints_PointMode, | 333 (SkCanvas::kPoints_PointMode, |
| 334 BlitMaskBench::kMaskBlack, "maskblack") | 334 BlitMaskBench::kMaskBlack, "maskblack") |
| 335 ); ) | 335 ); ) |
| 336 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, | 336 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, |
| 337 (p, SkCanvas::kPoints_PointMode, | 337 (SkCanvas::kPoints_PointMode, |
| 338 BlitMaskBench::kMaskColor, "maskcolor") | 338 BlitMaskBench::kMaskColor, "maskcolor") |
| 339 ); ) | 339 ); ) |
| 340 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, | 340 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench, |
| 341 (p, SkCanvas::kPoints_PointMode, | 341 (SkCanvas::kPoints_PointMode, |
| 342 BlitMaskBench::KMaskShader, "maskshader") | 342 BlitMaskBench::KMaskShader, "maskshader") |
| 343 ); ) | 343 ); ) |
| OLD | NEW |