remove duplicate SkTRegistry definition
[platform/upstream/libSkiaSharp.git] / bench / RectBench.cpp
1 #include "SkBenchmark.h"
2 #include "SkCanvas.h"
3 #include "SkPaint.h"
4 #include "SkRandom.h"
5 #include "SkString.h"
6 #include "SkTRegistry.h"
7
8 class RectBench : public SkBenchmark {
9 public:
10     int fShift;
11     enum {
12         W = 640,
13         H = 480,
14         N = 300
15     };
16     SkRect  fRects[N];
17     SkColor fColors[N];
18
19     RectBench(int shift) : fShift(shift) {
20         SkRandom rand;
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;
26             w >>= shift;
27             h >>= shift;
28             x -= w/2;
29             y -= h/2;
30             fRects[i].set(SkIntToScalar(x), SkIntToScalar(y),
31                           SkIntToScalar(x+w), SkIntToScalar(y+h));
32             fColors[i] = rand.nextU() | 0xFF808080;
33         }
34     }
35     
36     SkString fName;
37     const char* computeName(const char root[]) {
38         fName.set(root);
39         fName.appendS32(fShift);
40         return fName.c_str();
41     }
42         
43 protected:
44     virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
45         c->drawRect(r, p);
46     }
47
48     virtual const char* onGetName() { return computeName("rects"); }
49     virtual SkIPoint onGetSize() { return SkMakeIPoint(640, 480); }
50     virtual void onDraw(SkCanvas* canvas) {
51         SkPaint paint;
52         for (int i = 0; i < N; i++) {
53             paint.setColor(fColors[i]);
54             this->setupPaint(&paint);
55             this->drawThisRect(canvas, fRects[i], paint);
56         }
57     }
58 };
59
60 class OvalBench : public RectBench {
61 public:
62     OvalBench(int shift) : RectBench(shift) {}
63 protected:
64     virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
65         c->drawOval(r, p);
66     }
67     virtual const char* onGetName() { return computeName("ovals"); }
68 };
69
70 class RRectBench : public RectBench {
71 public:
72     RRectBench(int shift) : RectBench(shift) {}
73 protected:
74     virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
75         c->drawRoundRect(r, r.width() / 4, r.height() / 4, p);
76     }
77     virtual const char* onGetName() { return computeName("rrects"); }
78 };
79
80 class PointsBench : public RectBench {
81 public:
82     SkCanvas::PointMode fMode;
83     const char* fName;
84
85     PointsBench(SkCanvas::PointMode mode, const char* name) : 
86         RectBench(2), fMode(mode) {
87         fName = name;
88     }
89
90 protected:
91     virtual void onDraw(SkCanvas* canvas) {
92         static const SkScalar gSizes[] = {
93             SkIntToScalar(7), 0
94         };
95
96         SkPaint paint;
97         paint.setStrokeCap(SkPaint::kRound_Cap);
98         
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]);
105         }
106     }
107     virtual const char* onGetName() { return fName; }
108 };
109
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"));
118 }
119 static SkBenchmark* LinesFactory(void*) {
120     return SkNEW_ARGS(PointsBench, (SkCanvas::kLines_PointMode, "lines"));
121 }
122 static SkBenchmark* PolygonFactory(void*) {
123     return SkNEW_ARGS(PointsBench, (SkCanvas::kPolygon_PointMode, "polygon"));
124 }
125
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);
135