aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/RectBench.cpp
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-01-05 03:34:50 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-01-05 03:34:50 +0000
commitbd700c391dd45acd8ea1a40321789c9d92a14bb8 (patch)
treed50c239aec1ef78706d419284a1bad35bd566831 /bench/RectBench.cpp
parent1550a42d9647162edc4e6758fc2958fa4ab7f6ca (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.cpp113
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);
+