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
+