Index: bench/nanobench.cpp |
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp |
index 445370741665cca3dd64c0c8cd6b41b266fe95b5..f7e75145b7b1ce1a392d0fac700ac99207f46a24 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 |
@@ -52,6 +53,8 @@ DEFINE_string(outResultsFile, "", "If given, write results here as JSON."); |
DEFINE_bool(resetGpuContext, true, "Reset the GrContext before running each bench."); |
DEFINE_int32(maxCalibrationAttempts, 3, |
"Try up to this many times to guess loops for a bench, or skip the bench."); |
+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) { |
@@ -260,13 +263,35 @@ 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) { |
+ if (!FLAGS_gpu) { |
+ return; |
+ } |
+ |
+ // Can't get a SkGLContextHelper until we've created a context of that type. |
+ gGrFactory.get(GrContextFactory::kNative_GLContextType); |
bsalomon
2014/07/17 13:35:04
We don't always want to use the kNative context. W
jcgregorio
2014/07/17 19:13:22
OK, changed it so that these are recorded per conf
|
+ SkGLContextHelper* ctx = gGrFactory.getGLContext(GrContextFactory::kNative_GLContextType); |
+ if (NULL != ctx) { |
+ const GLubyte* version; |
+ SK_GL_RET(*ctx, version, GetString(GR_GL_VERSION)); |
+ log->option("GL_VERSION", (const char*)(version)); |
+ |
+ SK_GL_RET(*ctx, version, GetString(GR_GL_RENDERER)); |
+ log->option("GL_RENDERER", (const char*) version); |
+ |
+ SK_GL_RET(*ctx, version, GetString(GR_GL_VENDOR)); |
+ log->option("GL_VENDOR", (const char*) version); |
+ |
+ SK_GL_RET(*ctx, version, GetString(GR_GL_SHADING_LANGUAGE_VERSION)); |
+ log->option("GL_SHADING_LANGUAGE_VERSION", (const char*) version); |
+ } |
+ gGrFactory.destroyContexts(); |
+} |
+#endif |
+ |
int tool_main(int argc, char** argv); |
int tool_main(int argc, char** argv) { |
SetupCrashHandler(); |
@@ -279,14 +304,27 @@ 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() ? "" : FLAGS_gitHash[0]; |
mtklein
2014/07/17 13:41:16
"" -> "unknown-revision" perhaps?
jcgregorio
2014/07/17 19:13:22
Done.
|
+ json.reset(SkNEW(NanoJSONResultsWriter(FLAGS_outResultsFile[0], gitHash))); |
log.add(json.get()); |
} |
CallEnd<MultiResultsWriter> ender(log); |
mtklein
2014/07/17 13:41:16
One of log.end() or this line can go away right?
jcgregorio
2014/07/17 19:13:22
Done.
|
+ |
+ if (1 == FLAGS_key.count() % 2) { |
+ SkDebugf("ERROR: --key must be passed with an even number of arguments.\n"); |
mtklein
2014/07/17 13:41:16
To be fair, you've written this in a way that we c
jcgregorio
2014/07/17 19:13:22
Acknowledged.
|
+ 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); |
+#if SK_SUPPORT_GPU |
+ fill_gpu_options(&log); |
+#endif |
+ |
const double overhead = estimate_timer_overhead(); |
SkAutoTMalloc<double> samples(FLAGS_samples); |
@@ -305,7 +343,7 @@ 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); |
+ bool loggedBench = false; |
SkTDArray<Target*> targets; |
create_targets(bench.get(), &targets); |
mtklein
2014/07/17 13:41:16
Ah, gotcha. Let's do it here as
if (!targets.isE
jcgregorio
2014/07/17 19:13:23
Done.
|
@@ -328,6 +366,10 @@ int tool_main(int argc, char** argv) { |
bench->getName(), config, humanize(overhead).c_str()); |
continue; |
} |
+ if (!loggedBench) { |
+ log.bench(bench->getName(), bench->getSize().fX, bench->getSize().fY); |
+ loggedBench = true; |
+ } |
Stats stats(samples.get(), FLAGS_samples); |
log.config(config); |
@@ -375,6 +417,7 @@ int tool_main(int argc, char** argv) { |
} |
#endif |
} |
+ log.end(); |
return 0; |
} |