add -config foo to restrict the output to just the specific config
add -match foo to restrict the benchmarks to those whose names match foo
git-svn-id: http://skia.googlecode.com/svn/trunk@305 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
index 99bdbd7..1977a7f 100644
--- a/bench/benchmain.cpp
+++ b/bench/benchmain.cpp
@@ -118,6 +118,16 @@
canvas->translate(-x, -y);
}
+static void performScale(SkCanvas* canvas, int w, int h) {
+ const SkScalar x = SkIntToScalar(w) / 2;
+ const SkScalar y = SkIntToScalar(h) / 2;
+
+ canvas->translate(x, y);
+ // just enough so we can't take the sprite case
+ canvas->scale(SK_Scalar1 * 99/100, SK_Scalar1 * 99/100);
+ canvas->translate(-x, -y);
+}
+
static void compare_pict_to_bitmap(SkPicture* pict, const SkBitmap& bm) {
SkBitmap bm2;
@@ -158,12 +168,16 @@
int repeatDraw = 1;
int forceAlpha = 0xFF;
bool forceAA = true;
+ bool doScale = false;
bool doRotate = false;
bool doClip = false;
bool doPict = false;
+ const char* matchStr = NULL;
SkString outDir;
- SkBitmap::Config outConfig = SkBitmap::kARGB_8888_Config;
+ SkBitmap::Config outConfig = SkBitmap::kNo_Config;
+ const char* configName = "";
+ int configCount = SK_ARRAY_COUNT(gConfigs);
char* const* stop = argv + argc;
for (++argv; argv < stop; ++argv) {
@@ -190,6 +204,8 @@
}
} else if (!strcmp(*argv, "-rotate")) {
doRotate = true;
+ } else if (!strcmp(*argv, "-scale")) {
+ doScale = true;
} else if (!strcmp(*argv, "-clip")) {
doClip = true;
} else if (strcmp(*argv, "-forceAA") == 0) {
@@ -200,17 +216,36 @@
forceAlpha = 0x80;
} else if (strcmp(*argv, "-forceOpaque") == 0) {
forceAlpha = 0xFF;
- } else {
- int index = findConfig(*argv);
- if (index >= 0) {
- outConfig = gConfigs[index].fConfig;
+ } else if (strcmp(*argv, "-match") == 0) {
+ argv++;
+ if (argv < stop) {
+ matchStr = *argv;
+ } else {
+ fprintf(stderr, "missing arg for -match\n");
+ return -1;
}
+ } else if (strcmp(*argv, "-config") == 0) {
+ argv++;
+ if (argv < stop) {
+ int index = findConfig(*argv);
+ if (index >= 0) {
+ outConfig = gConfigs[index].fConfig;
+ configName = gConfigs[index].fName;
+ configCount = 1;
+ } else {
+ fprintf(stderr, "unrecognized config %s\n", *argv);
+ return -1;
+ }
+ } else {
+ fprintf(stderr, "missing arg for -config\n");
+ return -1;
+ }
+ } else {
+ fprintf(stderr, "unrecognized arg %s\n", *argv);
+ return -1;
}
}
-
- const char* configName = "";
- int configCount = SK_ARRAY_COUNT(gConfigs);
-
+
Iter iter;
SkBenchmark* bench;
while ((bench = iter.next()) != NULL) {
@@ -222,6 +257,11 @@
bench->setForceAlpha(forceAlpha);
bench->setForceAA(forceAA);
+ // only run benchmarks if their name contains matchStr
+ if (matchStr && strstr(bench->getName(), matchStr) == NULL) {
+ continue;
+ }
+
printf("running bench %16s", bench->getName());
for (int configIndex = 0; configIndex < configCount; configIndex++) {
@@ -240,6 +280,9 @@
if (doClip) {
performClip(&canvas, dim.fX, dim.fY);
}
+ if (doScale) {
+ performScale(&canvas, dim.fX, dim.fY);
+ }
if (doRotate) {
performRotate(&canvas, dim.fX, dim.fY);
}