make help - shows options in makefile
add optional image-encoding to bench
git-svn-id: http://skia.googlecode.com/svn/trunk@74 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/main.cpp b/bench/main.cpp
index 7c6848e..d9bd577 100644
--- a/bench/main.cpp
+++ b/bench/main.cpp
@@ -1,4 +1,5 @@
-//#include <iostream>
+#define SAVE_FILE
+
#include "SkCanvas.h"
#include "SkImageEncoder.h"
#include "SkString.h"
@@ -43,6 +44,45 @@
}
}
+static void saveFile(const char name[], const char config[], const char dir[],
+ const SkBitmap& bm) {
+#ifdef SAVE_FILE
+ SkBitmap copy;
+ if (!bm.copyTo(©, SkBitmap::kARGB_8888_Config)) {
+ return;
+ }
+
+ SkString str;
+ make_filename(name, &str);
+ str.appendf("_%s.png", config);
+ str.prepend(dir);
+ ::remove(str.c_str());
+ SkImageEncoder::EncodeFile(str.c_str(), copy, SkImageEncoder::kPNG_Type,
+ 100);
+#endif
+}
+
+static void performClip(SkCanvas* canvas, int w, int h) {
+ SkRect r;
+
+ r.set(SkIntToScalar(10), SkIntToScalar(10),
+ SkIntToScalar(w*2/3), SkIntToScalar(h*2/3));
+ canvas->clipRect(r, SkRegion::kIntersect_Op);
+
+ r.set(SkIntToScalar(w/3), SkIntToScalar(h/3),
+ SkIntToScalar(w-10), SkIntToScalar(h-10));
+ canvas->clipRect(r, SkRegion::kXOR_Op);
+}
+
+static void performRotate(SkCanvas* canvas, int w, int h) {
+ const SkScalar x = SkIntToScalar(w) / 2;
+ const SkScalar y = SkIntToScalar(h) / 2;
+
+ canvas->translate(x, y);
+ canvas->rotate(SkIntToScalar(35));
+ canvas->translate(-x, -y);
+}
+
static const struct {
SkBitmap::Config fConfig;
const char* fName;
@@ -53,10 +93,21 @@
{ SkBitmap::kA8_Config, "A8", }
};
+static int findConfig(const char config[]) {
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) {
+ if (!strcmp(config, gConfigs[i].fName)) {
+ return i;
+ }
+ }
+ return -1;
+}
+
int main (int argc, char * const argv[]) {
int repeatDraw = 1;
int forceAlpha = 0xFF;
bool forceAA = true;
+ bool doRotate = false;
+ bool doClip = false;
SkString outDir;
SkBitmap::Config outConfig = SkBitmap::kARGB_8888_Config;
@@ -71,14 +122,6 @@
outDir.append("/");
}
}
- } else if (strcmp(*argv, "-8888") == 0) {
- outConfig = SkBitmap::kARGB_8888_Config;
- } else if (strcmp(*argv, "-565") == 0) {
- outConfig = SkBitmap::kRGB_565_Config;
- } else if (strcmp(*argv, "-4444") == 0) {
- outConfig = SkBitmap::kARGB_4444_Config;
- } else if (strcmp(*argv, "-a8") == 0) {
- outConfig = SkBitmap::kA8_Config;
} else if (strcmp(*argv, "-repeat") == 0) {
argv++;
if (argv < stop) {
@@ -90,6 +133,10 @@
fprintf(stderr, "missing arg for -repeat\n");
return -1;
}
+ } else if (!strcmp(*argv, "-rotate")) {
+ doRotate = true;
+ } else if (!strcmp(*argv, "-clip")) {
+ doClip = true;
} else if (strcmp(*argv, "-forceAA") == 0) {
forceAA = true;
} else if (strcmp(*argv, "-forceBW") == 0) {
@@ -98,6 +145,11 @@
forceAlpha = 0x80;
} else if (strcmp(*argv, "-forceOpaque") == 0) {
forceAlpha = 0xFF;
+ } else {
+ int index = findConfig(*argv);
+ if (index >= 0) {
+ outConfig = gConfigs[index].fConfig;
+ }
}
}
@@ -115,7 +167,7 @@
bench->setForceAlpha(forceAlpha);
bench->setForceAA(forceAA);
- printf("running bench %16s", bench->getName());
+ printf("running bench %8s", bench->getName());
for (int configIndex = 0; configIndex < configCount; configIndex++) {
if (configCount > 1) {
@@ -130,26 +182,27 @@
SkCanvas canvas(bm);
canvas.drawColor(SK_ColorWHITE);
+ if (doClip) {
+ performClip(&canvas, dim.fX, dim.fY);
+ }
+ if (doRotate) {
+ performRotate(&canvas, dim.fX, dim.fY);
+ }
+
SkMSec now = SkTime::GetMSecs();
for (int i = 0; i < repeatDraw; i++) {
+ SkAutoCanvasRestore acr(&canvas, true);
bench->draw(&canvas);
}
if (repeatDraw > 1) {
printf(" %4s:%7.2f", configName,
(SkTime::GetMSecs() - now) / (double)repeatDraw);
}
+ if (outDir.size() > 0) {
+ saveFile(bench->getName(), configName, outDir.c_str(), bm);
+ }
}
printf("\n");
-
-#if 0
- SkString str;
- make_filename(bench->getName(), &str);
- str.prepend(outDir);
- str.append(".png");
- ::remove(str.c_str());
- SkImageEncoder::EncodeFile(str.c_str(), bm, SkImageEncoder::kPNG_Type,
- 100);
-#endif
}
return 0;