aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2014-07-14 11:30:37 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-14 11:30:37 -0700
commit60317d0ffb5053df7b08a627d6decd11b684e80d (patch)
treefcd1fbf65cb11c7889dcbeaf6a3e5351f8bf0d1f /bench
parent41b8687417c5f416406366351b1827bfde84265e (diff)
nanobench: support --outResultsFile
BUG=skia: R=kelvinly@google.com, mtklein@google.com Author: mtklein@chromium.org Review URL: https://codereview.chromium.org/390933002
Diffstat (limited to 'bench')
-rw-r--r--bench/nanobench.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 3f34740b69..cc9896ea1b 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -9,6 +9,7 @@
#include "Benchmark.h"
#include "CrashHandler.h"
+#include "ResultsWriter.h"
#include "Stats.h"
#include "Timer.h"
@@ -41,6 +42,8 @@ DEFINE_int32(gpuFrameLag, 5, "Overestimate of maximum number of frames GPU allow
DEFINE_bool(cpu, true, "Master switch for CPU-bound work.");
DEFINE_bool(gpu, true, "Master switch for GPU-bound work.");
+DEFINE_string(outResultsFile, "", "If given, write results here as JSON.");
+
static SkString humanize(double ms) {
if (ms > 1e+3) return SkStringPrintf("%.3gs", ms/1e3);
@@ -224,12 +227,40 @@ static void create_targets(Benchmark* bench, SkTDArray<Target*>* targets) {
#endif
}
+static void fill_static_options(ResultsWriter* log) {
+#if defined(SK_BUILD_FOR_WIN32)
+ log->option("system", "WIN32");
+#elif defined(SK_BUILD_FOR_MAC)
+ log->option("system", "MAC");
+#elif defined(SK_BUILD_FOR_ANDROID)
+ log->option("system", "ANDROID");
+#elif defined(SK_BUILD_FOR_UNIX)
+ log->option("system", "UNIX");
+#else
+ log->option("system", "other");
+#endif
+#if defined(SK_DEBUG)
+ log->option("build", "DEBUG");
+#else
+ log->option("build", "RELEASE");
+#endif
+}
+
int tool_main(int argc, char** argv);
int tool_main(int argc, char** argv) {
SetupCrashHandler();
SkAutoGraphics ag;
SkCommandLineFlags::Parse(argc, argv);
+ MultiResultsWriter log;
+ SkAutoTDelete<JSONResultsWriter> json;
+ if (!FLAGS_outResultsFile.isEmpty()) {
+ json.reset(SkNEW(JSONResultsWriter(FLAGS_outResultsFile[0])));
+ log.add(json.get());
+ }
+ CallEnd<MultiResultsWriter> ender(log);
+ fill_static_options(&log);
+
const double overhead = estimate_timer_overhead();
SkAutoTMalloc<double> samples(FLAGS_samples);
@@ -246,6 +277,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);
SkTDArray<Target*> targets;
create_targets(bench.get(), &targets);
@@ -265,6 +297,14 @@ int tool_main(int argc, char** argv) {
Stats stats(samples.get(), FLAGS_samples);
const char* config = targets[j]->config;
+
+ log.config(config);
+ log.timer("min_ms", stats.min);
+ log.timer("median_ms", stats.median);
+ log.timer("mean_ms", stats.mean);
+ log.timer("max_ms", stats.max);
+ log.timer("stddev_ms", sqrt(stats.var));
+
if (FLAGS_verbose) {
for (int i = 0; i < FLAGS_samples; i++) {
SkDebugf("%s ", humanize(samples[i]).c_str());