add benchmark framework
git-svn-id: http://skia.googlecode.com/svn/trunk@52 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/BenchTool/main.cpp b/bench/BenchTool/main.cpp
new file mode 100644
index 0000000..ae0dc58
--- /dev/null
+++ b/bench/BenchTool/main.cpp
@@ -0,0 +1,70 @@
+//#include <iostream>
+#include "SkCanvas.h"
+#include "SkImageDecoder.h"
+#include "SkString.h"
+
+#include "SkBenchmark.h"
+
+typedef SkTRegistry<SkBenchmark> BenchRegistry;
+
+class Iter {
+public:
+ Iter() {
+ fBench = BenchRegistry::Head();
+ }
+
+ SkBenchmark* next() {
+ if (fBench) {
+ BenchRegistry::Factory f = fBench->factory();
+ fBench = fBench->next();
+ return f();
+ }
+ return NULL;
+ }
+
+private:
+ const BenchRegistry* fBench;
+};
+
+static void make_filename(const char name[], SkString* path) {
+ path->set(name);
+ for (int i = 0; name[i]; i++) {
+ switch (name[i]) {
+ case '/':
+ case '\\':
+ case ' ':
+ case ':':
+ path->writable_str()[i] = '-';
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+int main (int argc, char * const argv[]) {
+ const int w = 640;
+ const int h = 480;
+
+ SkBitmap bm;
+ bm.setConfig(SkBitmap::kARGB_8888_Config, w, h);
+ bm.allocPixels();
+
+ SkCanvas canvas(bm);
+
+ Iter iter;
+ SkBenchmark* bench;
+ while ((bench = iter.next()) != NULL) {
+ canvas.drawColor(SK_ColorWHITE);
+ bench->draw(&canvas);
+
+ SkString str;
+ make_filename(bench->getName(), &str);
+ str.prepend("/skimages/");
+ str.append(".png");
+ ::remove(str.c_str());
+ SkImageEncoder::EncodeFile(str.c_str(), bm, SkImageEncoder::kPNG_Type);
+ }
+
+ return 0;
+}