add benchmark framework
git-svn-id: http://skia.googlecode.com/svn/trunk@52 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/SkBenchmark.h b/bench/SkBenchmark.h
new file mode 100644
index 0000000..6256029
--- /dev/null
+++ b/bench/SkBenchmark.h
@@ -0,0 +1,54 @@
+#ifndef SkBenchmark_DEFINED
+#define SkBenchmark_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkPoint.h"
+
+class SkCanvas;
+
+class SkBenchmark : public SkRefCnt {
+public:
+ const char* getName();
+ SkIPoint getSize();
+ void draw(SkCanvas*);
+
+protected:
+ virtual const char* onGetName() = 0;
+ virtual SkIPoint onGetSize() = 0;
+ virtual void onDraw(SkCanvas*) = 0;
+};
+
+static inline SkIPoint SkMakeIPoint(int x, int y) {
+ SkIPoint p;
+ p.set(x, y);
+ return p;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename T> class SkTRegistry : SkNoncopyable {
+public:
+ typedef T* (*Factory)();
+
+ SkTRegistry(Factory fact) {
+ fFact = fact;
+ fChain = gHead;
+ gHead = this;
+ }
+
+ static const SkTRegistry* Head() { return gHead; }
+
+ SkTRegistry* next() const { return fChain; }
+ Factory factory() const { return fFact; }
+
+private:
+ Factory fFact;
+ SkTRegistry* fChain;
+
+ static SkTRegistry* gHead;
+};
+
+template <typename T> SkTRegistry<T>* SkTRegistry<T>::gHead;
+
+#endif
+