Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2027)

Unified Diff: bench/nanobench.cpp

Issue 1419103004: nanobench: fix and simplify --samplingTime (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fmt Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bench/nanobench.cpp
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index de4545f2fa529e43b70a2490531c02554500b51d..dad280df0ba72ec637f5d288a1603c8c6947b298 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -25,7 +25,6 @@
#include "SubsetTranslateBench.h"
#include "SubsetZoomBench.h"
#include "Stats.h"
-#include "Timer.h"
#include "SkBitmapRegionDecoderInterface.h"
#include "SkBBoxHierarchy.h"
@@ -59,8 +58,6 @@
__SK_FORCE_IMAGE_DECODER_LINKING;
-static const int kTimedSampling = 0;
-
static const int kAutoTuneLoops = 0;
static const int kDefaultLoops =
@@ -87,8 +84,7 @@ static SkString to_string(int n) {
DEFINE_int32(loops, kDefaultLoops, loops_help_txt().c_str());
DEFINE_int32(samples, 10, "Number of samples to measure for each bench.");
-DEFINE_string(samplingTime, "0", "Amount of time to run each bench. Takes precedence over samples."
- "Must be \"0\", \"%%lfs\", or \"%%lfms\"");
+DEFINE_int32(ms, 0, "If >0, run each bench for this many ms instead of obeying --samples.");
DEFINE_int32(overheadLoops, 100000, "Loops to estimate timer overhead.");
DEFINE_double(overheadGoal, 0.0001,
"Loop until timer overhead is at most this fraction of our measurments.");
@@ -114,6 +110,8 @@ DEFINE_bool(gpuStats, false, "Print GPU stats after each gpu benchmark?");
DEFINE_bool(pngBuildTileIndex, false, "If supported, use png buildTileIndex/decodeSubset.");
DEFINE_bool(jpgBuildTileIndex, false, "If supported, use jpg buildTileIndex/decodeSubset.");
+static double now_ms() { return SkTime::GetNSecs() * 1e-6; }
+
static SkString humanize(double ms) {
if (FLAGS_verbose) return SkStringPrintf("%llu", (uint64_t)(ms*1e6));
return HumanizeMs(ms);
@@ -210,26 +208,23 @@ static double time(int loops, Benchmark* bench, Target* target) {
canvas->clear(SK_ColorWHITE);
}
bench->preDraw(canvas);
- WallTimer timer;
- timer.start();
+ double start = now_ms();
canvas = target->beginTiming(canvas);
bench->draw(loops, canvas);
if (canvas) {
canvas->flush();
}
target->endTiming();
- timer.end();
+ double elapsed = now_ms() - start;
bench->postDraw(canvas);
- return timer.fWall;
+ return elapsed;
}
static double estimate_timer_overhead() {
double overhead = 0;
for (int i = 0; i < FLAGS_overheadLoops; i++) {
- WallTimer timer;
- timer.start();
- timer.end();
- overhead += timer.fWall;
+ double start = now_ms();
+ overhead += now_ms() - start;
}
return overhead / FLAGS_overheadLoops;
}
@@ -1160,24 +1155,6 @@ int nanobench_main() {
FLAGS_verbose = true;
}
- double samplingTimeMs = 0;
- if (0 != strcmp("0", FLAGS_samplingTime[0])) {
- SkSTArray<8, char> timeUnit;
- timeUnit.push_back_n(static_cast<int>(strlen(FLAGS_samplingTime[0])) + 1);
- if (2 != sscanf(FLAGS_samplingTime[0], "%lf%s", &samplingTimeMs, timeUnit.begin()) ||
- (0 != strcmp("s", timeUnit.begin()) && 0 != strcmp("ms", timeUnit.begin()))) {
- SkDebugf("Invalid --samplingTime \"%s\". Must be \"0\", \"%%lfs\", or \"%%lfms\"\n",
- FLAGS_samplingTime[0]);
- exit(0);
- }
- if (0 == strcmp("s", timeUnit.begin())) {
- samplingTimeMs *= 1000;
- }
- if (samplingTimeMs) {
- FLAGS_samples = kTimedSampling;
- }
- }
-
if (kAutoTuneLoops != FLAGS_loops) {
FLAGS_samples = 1;
FLAGS_gpuFrameLag = 0;
@@ -1221,7 +1198,7 @@ int nanobench_main() {
SkDebugf("Fixed number of loops; times would only be misleading so we won't print them.\n");
} else if (FLAGS_quiet) {
SkDebugf("median\tbench\tconfig\n");
- } else if (kTimedSampling == FLAGS_samples) {
+ } else if (FLAGS_ms) {
SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\tsamples\tconfig\tbench\n");
} else {
SkDebugf("curr/maxrss\tloops\tmin\tmedian\tmean\tmax\tstddev\t%-*s\tconfig\tbench\n",
@@ -1261,23 +1238,17 @@ int nanobench_main() {
? setup_gpu_bench(target, bench.get(), maxFrameLag)
: setup_cpu_bench(overhead, target, bench.get());
- if (kTimedSampling != FLAGS_samples) {
+ if (FLAGS_ms) {
+ samples.reset();
+ auto stop = now_ms() + FLAGS_ms;
+ do {
+ samples.push_back(time(loops, bench, target) / loops);
+ } while (now_ms() < stop);
+ } else {
samples.reset(FLAGS_samples);
for (int s = 0; s < FLAGS_samples; s++) {
samples[s] = time(loops, bench, target) / loops;
}
- } else if (samplingTimeMs) {
- samples.reset();
- if (FLAGS_verbose) {
- SkDebugf("Begin sampling %s for %ims\n",
- bench->getUniqueName(), static_cast<int>(samplingTimeMs));
- }
- WallTimer timer;
- timer.start();
- do {
- samples.push_back(time(loops, bench, target) / loops);
- timer.end();
- } while (timer.fWall < samplingTimeMs);
}
bench->perCanvasPostDraw(canvas);
@@ -1331,8 +1302,7 @@ int nanobench_main() {
, HUMANIZE(stats.mean)
, HUMANIZE(stats.max)
, stddev_percent
- , kTimedSampling != FLAGS_samples ? stats.plot.c_str()
- : to_string(samples.count()).c_str()
+ , FLAGS_ms ? to_string(samples.count()).c_str() : stats.plot.c_str()
, config
, bench->getUniqueName()
);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698