| Index: bench/nanobench.cpp
|
| diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
|
| index 59e85ed9e6d0bca42afd8755a29652a7980161e8..5cd3e2fbf40f1aaacb0abde41d9035275693b37a 100644
|
| --- a/bench/nanobench.cpp
|
| +++ b/bench/nanobench.cpp
|
| @@ -21,6 +21,7 @@
|
| #include "SkSurface.h"
|
|
|
| #if SK_SUPPORT_GPU
|
| + #include "gl/GrGLDefines.h"
|
| #include "GrContextFactory.h"
|
| GrContextFactory gGrFactory;
|
| #endif
|
| @@ -53,6 +54,8 @@ DEFINE_bool(resetGpuContext, true, "Reset the GrContext before running each benc
|
| DEFINE_int32(maxCalibrationAttempts, 3,
|
| "Try up to this many times to guess loops for a bench, or skip the bench.");
|
| DEFINE_int32(maxLoops, 1000000, "Never run a bench more times than this.");
|
| +DEFINE_string(key, "", "Space-separated key/value pairs to add to JSON.");
|
| +DEFINE_string(gitHash, "", "Git hash to add to JSON.");
|
|
|
|
|
| static SkString humanize(double ms) {
|
| @@ -276,13 +279,25 @@ static void fill_static_options(ResultsWriter* log) {
|
| #else
|
| log->option("system", "other");
|
| #endif
|
| -#if defined(SK_DEBUG)
|
| - log->option("build", "DEBUG");
|
| -#else
|
| - log->option("build", "RELEASE");
|
| -#endif
|
| }
|
|
|
| +#if SK_SUPPORT_GPU
|
| +static void fill_gpu_options(ResultsWriter* log, SkGLContextHelper* ctx) {
|
| + const GLubyte* version;
|
| + SK_GL_RET(*ctx, version, GetString(GR_GL_VERSION));
|
| + log->configOption("GL_VERSION", (const char*)(version));
|
| +
|
| + SK_GL_RET(*ctx, version, GetString(GR_GL_RENDERER));
|
| + log->configOption("GL_RENDERER", (const char*) version);
|
| +
|
| + SK_GL_RET(*ctx, version, GetString(GR_GL_VENDOR));
|
| + log->configOption("GL_VENDOR", (const char*) version);
|
| +
|
| + SK_GL_RET(*ctx, version, GetString(GR_GL_SHADING_LANGUAGE_VERSION));
|
| + log->configOption("GL_SHADING_LANGUAGE_VERSION", (const char*) version);
|
| +}
|
| +#endif
|
| +
|
| int tool_main(int argc, char** argv);
|
| int tool_main(int argc, char** argv) {
|
| SetupCrashHandler();
|
| @@ -295,12 +310,21 @@ int tool_main(int argc, char** argv) {
|
| }
|
|
|
| MultiResultsWriter log;
|
| - SkAutoTDelete<JSONResultsWriter> json;
|
| + SkAutoTDelete<NanoJSONResultsWriter> json;
|
| if (!FLAGS_outResultsFile.isEmpty()) {
|
| - json.reset(SkNEW(JSONResultsWriter(FLAGS_outResultsFile[0])));
|
| + const char* gitHash = FLAGS_gitHash.isEmpty() ? "unknown-revision" : FLAGS_gitHash[0];
|
| + json.reset(SkNEW(NanoJSONResultsWriter(FLAGS_outResultsFile[0], gitHash)));
|
| log.add(json.get());
|
| }
|
| CallEnd<MultiResultsWriter> ender(log);
|
| +
|
| + if (1 == FLAGS_key.count() % 2) {
|
| + SkDebugf("ERROR: --key must be passed with an even number of arguments.\n");
|
| + return 1;
|
| + }
|
| + for (int i = 1; i < FLAGS_key.count(); i += 2) {
|
| + log.key(FLAGS_key[i-1], FLAGS_key[i]);
|
| + }
|
| fill_static_options(&log);
|
|
|
| const double overhead = estimate_timer_overhead();
|
| @@ -323,12 +347,14 @@ int tool_main(int argc, char** argv) {
|
| if (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getName())) {
|
| continue;
|
| }
|
| - log.bench(bench->getName(), bench->getSize().fX, bench->getSize().fY);
|
|
|
| SkTDArray<Target*> targets;
|
| create_targets(bench.get(), &targets);
|
|
|
| - bench->preDraw();
|
| + if (!targets.isEmpty()) {
|
| + log.bench(bench->getName(), bench->getSize().fX, bench->getSize().fY);
|
| + bench->preDraw();
|
| + }
|
| for (int j = 0; j < targets.count(); j++) {
|
| SkCanvas* canvas = targets[j]->surface.get() ? targets[j]->surface->getCanvas() : NULL;
|
| const char* config = targets[j]->config;
|
| @@ -349,6 +375,11 @@ int tool_main(int argc, char** argv) {
|
|
|
| Stats stats(samples.get(), FLAGS_samples);
|
| log.config(config);
|
| +#if SK_SUPPORT_GPU
|
| + if (Benchmark::kGPU_Backend == targets[j]->backend) {
|
| + fill_gpu_options(&log, targets[j]->gl);
|
| + }
|
| +#endif
|
| log.timer("min_ms", stats.min);
|
| log.timer("median_ms", stats.median);
|
| log.timer("mean_ms", stats.mean);
|
|
|