blob: 00dfb8425bca913bb1ae3e895d86a8c560b653f4 [file] [log] [blame]
reed@android.combd700c32009-01-05 03:34:50 +00001#ifndef SkBenchmark_DEFINED
2#define SkBenchmark_DEFINED
3
4#include "SkRefCnt.h"
5#include "SkPoint.h"
6
7class SkCanvas;
reed@android.com4bc19832009-01-19 20:08:35 +00008class SkPaint;
reed@android.combd700c32009-01-05 03:34:50 +00009
10class SkBenchmark : public SkRefCnt {
11public:
reed@android.com4bc19832009-01-19 20:08:35 +000012 SkBenchmark();
13
reed@android.combd700c32009-01-05 03:34:50 +000014 const char* getName();
15 SkIPoint getSize();
16 void draw(SkCanvas*);
reed@android.com4bc19832009-01-19 20:08:35 +000017
18 void setForceAlpha(int alpha) {
19 fForceAlpha = alpha;
20 }
21
22 void setForceAA(bool aa) {
23 fForceAA = aa;
24 }
reed@android.combd700c32009-01-05 03:34:50 +000025
26protected:
reed@android.com4bc19832009-01-19 20:08:35 +000027 void setupPaint(SkPaint* paint);
28
reed@android.combd700c32009-01-05 03:34:50 +000029 virtual const char* onGetName() = 0;
30 virtual SkIPoint onGetSize() = 0;
31 virtual void onDraw(SkCanvas*) = 0;
reed@android.com4bc19832009-01-19 20:08:35 +000032
33private:
34 int fForceAlpha;
35 bool fForceAA;
reed@android.combd700c32009-01-05 03:34:50 +000036};
37
38static inline SkIPoint SkMakeIPoint(int x, int y) {
39 SkIPoint p;
40 p.set(x, y);
41 return p;
42}
43
44///////////////////////////////////////////////////////////////////////////////
45
46template <typename T> class SkTRegistry : SkNoncopyable {
47public:
48 typedef T* (*Factory)();
49
50 SkTRegistry(Factory fact) {
51 fFact = fact;
52 fChain = gHead;
53 gHead = this;
54 }
55
56 static const SkTRegistry* Head() { return gHead; }
57
58 SkTRegistry* next() const { return fChain; }
59 Factory factory() const { return fFact; }
60
61private:
62 Factory fFact;
63 SkTRegistry* fChain;
64
65 static SkTRegistry* gHead;
66};
67
68template <typename T> SkTRegistry<T>* SkTRegistry<T>::gHead;
69
70#endif
71