blob: 6256029283965465dde93ae2a8a9e15869db3d0d [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;
8
9class SkBenchmark : public SkRefCnt {
10public:
11 const char* getName();
12 SkIPoint getSize();
13 void draw(SkCanvas*);
14
15protected:
16 virtual const char* onGetName() = 0;
17 virtual SkIPoint onGetSize() = 0;
18 virtual void onDraw(SkCanvas*) = 0;
19};
20
21static inline SkIPoint SkMakeIPoint(int x, int y) {
22 SkIPoint p;
23 p.set(x, y);
24 return p;
25}
26
27///////////////////////////////////////////////////////////////////////////////
28
29template <typename T> class SkTRegistry : SkNoncopyable {
30public:
31 typedef T* (*Factory)();
32
33 SkTRegistry(Factory fact) {
34 fFact = fact;
35 fChain = gHead;
36 gHead = this;
37 }
38
39 static const SkTRegistry* Head() { return gHead; }
40
41 SkTRegistry* next() const { return fChain; }
42 Factory factory() const { return fFact; }
43
44private:
45 Factory fFact;
46 SkTRegistry* fChain;
47
48 static SkTRegistry* gHead;
49};
50
51template <typename T> SkTRegistry<T>* SkTRegistry<T>::gHead;
52
53#endif
54