1 #include "SkBenchmark.h"
6 #include "SkTRegistry.h"
8 class RectBench : public SkBenchmark {
19 RectBench(int shift) : fShift(shift) {
21 for (int i = 0; i < N; i++) {
22 int x = rand.nextU() % W;
23 int y = rand.nextU() % H;
24 int w = rand.nextU() % W;
25 int h = rand.nextU() % H;
30 fRects[i].set(SkIntToScalar(x), SkIntToScalar(y),
31 SkIntToScalar(x+w), SkIntToScalar(y+h));
32 fColors[i] = rand.nextU() | 0xFF808080;
37 const char* computeName(const char root[]) {
39 fName.appendS32(fShift);
44 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
48 virtual const char* onGetName() { return computeName("rects"); }
49 virtual SkIPoint onGetSize() { return SkMakeIPoint(640, 480); }
50 virtual void onDraw(SkCanvas* canvas) {
52 for (int i = 0; i < N; i++) {
53 paint.setColor(fColors[i]);
54 this->setupPaint(&paint);
55 this->drawThisRect(canvas, fRects[i], paint);
60 class OvalBench : public RectBench {
62 OvalBench(int shift) : RectBench(shift) {}
64 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
67 virtual const char* onGetName() { return computeName("ovals"); }
70 class RRectBench : public RectBench {
72 RRectBench(int shift) : RectBench(shift) {}
74 virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
75 c->drawRoundRect(r, r.width() / 4, r.height() / 4, p);
77 virtual const char* onGetName() { return computeName("rrects"); }
80 class PointsBench : public RectBench {
82 SkCanvas::PointMode fMode;
85 PointsBench(SkCanvas::PointMode mode, const char* name) :
86 RectBench(2), fMode(mode) {
91 virtual void onDraw(SkCanvas* canvas) {
92 static const SkScalar gSizes[] = {
97 paint.setStrokeCap(SkPaint::kRound_Cap);
99 for (size_t i = 0; i < SK_ARRAY_COUNT(gSizes); i++) {
100 paint.setStrokeWidth(gSizes[i]);
101 this->setupPaint(&paint);
102 canvas->drawPoints(fMode, N * 2,
103 reinterpret_cast<const SkPoint*>(fRects), paint);
104 paint.setColor(fColors[i]);
107 virtual const char* onGetName() { return fName; }
110 static SkBenchmark* RectFactory1(void*) { return SkNEW_ARGS(RectBench, (1)); }
111 static SkBenchmark* RectFactory2(void*) { return SkNEW_ARGS(RectBench, (3)); }
112 static SkBenchmark* OvalFactory1(void*) { return SkNEW_ARGS(OvalBench, (1)); }
113 static SkBenchmark* OvalFactory2(void*) { return SkNEW_ARGS(OvalBench, (3)); }
114 static SkBenchmark* RRectFactory1(void*) { return SkNEW_ARGS(RRectBench, (1)); }
115 static SkBenchmark* RRectFactory2(void*) { return SkNEW_ARGS(RRectBench, (3)); }
116 static SkBenchmark* PointsFactory(void*) {
117 return SkNEW_ARGS(PointsBench, (SkCanvas::kPoints_PointMode, "points"));
119 static SkBenchmark* LinesFactory(void*) {
120 return SkNEW_ARGS(PointsBench, (SkCanvas::kLines_PointMode, "lines"));
122 static SkBenchmark* PolygonFactory(void*) {
123 return SkNEW_ARGS(PointsBench, (SkCanvas::kPolygon_PointMode, "polygon"));
126 static SkTRegistry<SkBenchmark*, void*> gRectReg1(RectFactory1);
127 static SkTRegistry<SkBenchmark*, void*> gRectReg2(RectFactory2);
128 static SkTRegistry<SkBenchmark*, void*> gOvalReg1(OvalFactory1);
129 static SkTRegistry<SkBenchmark*, void*> gOvalReg2(OvalFactory2);
130 static SkTRegistry<SkBenchmark*, void*> gRRectReg1(RRectFactory1);
131 static SkTRegistry<SkBenchmark*, void*> gRRectReg2(RRectFactory2);
132 static SkTRegistry<SkBenchmark*, void*> gPointsReg(PointsFactory);
133 static SkTRegistry<SkBenchmark*, void*> gLinesReg(LinesFactory);
134 static SkTRegistry<SkBenchmark*, void*> gPolygonReg(PolygonFactory);