diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-01-05 03:34:50 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-01-05 03:34:50 +0000 |
commit | bd700c391dd45acd8ea1a40321789c9d92a14bb8 (patch) | |
tree | d50c239aec1ef78706d419284a1bad35bd566831 /bench/RectBench.cpp | |
parent | 1550a42d9647162edc4e6758fc2958fa4ab7f6ca (diff) |
add benchmark framework
git-svn-id: http://skia.googlecode.com/svn/trunk@52 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/RectBench.cpp')
-rw-r--r-- | bench/RectBench.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/bench/RectBench.cpp b/bench/RectBench.cpp new file mode 100644 index 0000000000..081e2421d7 --- /dev/null +++ b/bench/RectBench.cpp @@ -0,0 +1,113 @@ +#include "SkBenchmark.h" +#include "SkCanvas.h" +#include "SkPaint.h" +#include "SkRandom.h" + +class RectBench : public SkBenchmark { +public: + enum { + W = 640, + H = 480, + N = 100 + }; + SkRect fRects[N]; + SkColor fColors[N]; + + RectBench() { + SkRandom rand; + for (int i = 0; i < N; i++) { + int x = rand.nextU() % W; + int y = rand.nextU() % H; + int w = rand.nextU() % W; + int h = rand.nextU() % H; + w >>= 1; + h >>= 1; + x -= w/2; + y -= h/2; + fRects[i].set(SkIntToScalar(x), SkIntToScalar(y), + SkIntToScalar(x+w), SkIntToScalar(y+h)); + fColors[i] = rand.nextU() | 0xFF808080; + } + } + +protected: + virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { + c->drawRect(r, p); + } + + virtual const char* onGetName() { return "rectangles"; } + virtual SkIPoint onGetSize() { return SkMakeIPoint(640, 480); } + virtual void onDraw(SkCanvas* canvas) { + SkPaint paint; + for (int i = 0; i < N; i++) { + paint.setColor(fColors[i]); + this->drawThisRect(canvas, fRects[i], paint); + } + } +}; + +class OvalBench : public RectBench { +protected: + virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { + c->drawOval(r, p); + } + virtual const char* onGetName() { return "ovals"; } +}; + +class RRectBench : public RectBench { +protected: + virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) { + c->drawRoundRect(r, r.width() / 4, r.height() / 4, p); + } + virtual const char* onGetName() { return "roundrects"; } +}; + +class PointsBench : public RectBench { +public: + SkCanvas::PointMode fMode; + const char* fName; + + PointsBench(SkCanvas::PointMode mode, const char* name) : fMode(mode) { + fName = name; + } + +protected: + virtual void onDraw(SkCanvas* canvas) { + static const SkScalar gSizes[] = { + SkIntToScalar(7), 0 + }; + + SkPaint paint; + paint.setAntiAlias(true); + paint.setStrokeCap(SkPaint::kRound_Cap); + + for (size_t i = 0; i < SK_ARRAY_COUNT(gSizes); i++) { + paint.setStrokeWidth(gSizes[i]); + canvas->drawPoints(fMode, N * 2, + reinterpret_cast<const SkPoint*>(fRects), paint); + paint.setColor(fColors[i]); + } + } + virtual const char* onGetName() { return fName; } +}; + +static SkBenchmark* RectFactory() { return SkNEW(RectBench); } +static SkBenchmark* OvalFactory() { return SkNEW(OvalBench); } +static SkBenchmark* RRectFactory() { return SkNEW(RRectBench); } +static SkBenchmark* PointsFactory() { + return SkNEW_ARGS(PointsBench, (SkCanvas::kPoints_PointMode, "points")); +} +static SkBenchmark* LinesFactory() { + return SkNEW_ARGS(PointsBench, (SkCanvas::kLines_PointMode, "lines")); +} +static SkBenchmark* PolygonFactory() { + return SkNEW_ARGS(PointsBench, (SkCanvas::kPolygon_PointMode, "polygon")); +} + +static SkTRegistry<SkBenchmark> gRectReg(RectFactory); +static SkTRegistry<SkBenchmark> gOvalReg(OvalFactory); +static SkTRegistry<SkBenchmark> gRRectReg(RRectFactory); +static SkTRegistry<SkBenchmark> gPointsReg(PointsFactory); +static SkTRegistry<SkBenchmark> gLinesReg(LinesFactory); +static SkTRegistry<SkBenchmark> gPolygonReg(PolygonFactory); + |