Index: bench/nanobench.cpp |
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp |
index 4bc1484da0251134d79255d6a6e891d8bfa72673..07600ef3a447445737dc50626dc6d35e90bd97bd 100644 |
--- a/bench/nanobench.cpp |
+++ b/bench/nanobench.cpp |
@@ -102,10 +102,7 @@ bool Target::init(SkImageInfo info, Benchmark* bench) { |
return true; |
} |
bool Target::capturePixels(SkBitmap* bmp) { |
- if (!this->surface.get()) { |
- return false; |
- } |
- SkCanvas* canvas = this->surface->getCanvas(); |
+ SkCanvas* canvas = this->getCanvas(); |
if (!canvas) { |
return false; |
} |
@@ -168,24 +165,19 @@ struct GPUTarget : public Target { |
#endif |
-static double time(int loops, Benchmark* bench, SkCanvas* canvas, Target* target) { |
+static double time(int loops, Benchmark* bench, Target* target) { |
+ SkCanvas* canvas = target->getCanvas(); |
if (canvas) { |
canvas->clear(SK_ColorWHITE); |
} |
WallTimer timer; |
timer.start(); |
- if (target) { |
- canvas = target->beginTiming(canvas); |
- } |
- if (bench) { |
- bench->draw(loops, canvas); |
- } |
+ canvas = target->beginTiming(canvas); |
+ bench->draw(loops, canvas); |
if (canvas) { |
canvas->flush(); |
} |
- if (target) { |
- target->endTiming(); |
- } |
+ target->endTiming(); |
timer.end(); |
return timer.fWall; |
} |
@@ -193,7 +185,10 @@ static double time(int loops, Benchmark* bench, SkCanvas* canvas, Target* target |
static double estimate_timer_overhead() { |
double overhead = 0; |
for (int i = 0; i < FLAGS_overheadLoops; i++) { |
- overhead += time(1, NULL, NULL, NULL); |
+ WallTimer timer; |
+ timer.start(); |
+ timer.end(); |
+ overhead += timer.fWall; |
} |
return overhead / FLAGS_overheadLoops; |
} |
@@ -224,8 +219,8 @@ static bool write_canvas_png(Target* target, const SkString& filename) { |
if (filename.isEmpty()) { |
return false; |
} |
- if (target->surface.get() && target->surface->getCanvas() && |
- kUnknown_SkColorType == target->surface->getCanvas()->imageInfo().colorType()) { |
+ if (target->getCanvas() && |
+ kUnknown_SkColorType == target->getCanvas()->imageInfo().colorType()) { |
return false; |
} |
@@ -253,7 +248,7 @@ static bool write_canvas_png(Target* target, const SkString& filename) { |
} |
static int kFailedLoops = -2; |
-static int cpu_bench(const double overhead, Benchmark* bench, SkCanvas* canvas, double* samples) { |
+static int cpu_bench(const double overhead, Target* target, Benchmark* bench, double* samples) { |
// First figure out approximately how many loops of bench it takes to make overhead negligible. |
double bench_plus_overhead = 0.0; |
int round = 0; |
@@ -264,7 +259,7 @@ static int cpu_bench(const double overhead, Benchmark* bench, SkCanvas* canvas, |
bench->getUniqueName(), HUMANIZE(bench_plus_overhead), HUMANIZE(overhead)); |
return kFailedLoops; |
} |
- bench_plus_overhead = time(1, bench, canvas, NULL); |
+ bench_plus_overhead = time(1, bench, target); |
} |
} |
@@ -295,14 +290,13 @@ static int cpu_bench(const double overhead, Benchmark* bench, SkCanvas* canvas, |
} |
for (int i = 0; i < FLAGS_samples; i++) { |
- samples[i] = time(loops, bench, canvas, NULL) / loops; |
+ samples[i] = time(loops, bench, target) / loops; |
} |
return loops; |
} |
static int gpu_bench(Target* target, |
Benchmark* bench, |
- SkCanvas* canvas, |
double* samples) { |
// First, figure out how many loops it'll take to get a frame up to FLAGS_gpuMs. |
int loops = FLAGS_loops; |
@@ -320,7 +314,7 @@ static int gpu_bench(Target* target, |
// _this_ round, not still timing last round. We force this by looping |
// more times than any reasonable GPU will allow frames to lag. |
for (int i = 0; i < FLAGS_gpuFrameLag; i++) { |
- elapsed = time(loops, bench, canvas, target); |
+ elapsed = time(loops, bench, target); |
} |
} while (elapsed < FLAGS_gpuMs); |
@@ -337,12 +331,12 @@ static int gpu_bench(Target* target, |
// Pretty much the same deal as the calibration: do some warmup to make |
// sure we're timing steady-state pipelined frames. |
for (int i = 0; i < FLAGS_gpuFrameLag; i++) { |
- time(loops, bench, canvas, target); |
+ time(loops, bench, target); |
} |
// Now, actually do the timing! |
for (int i = 0; i < FLAGS_samples; i++) { |
- samples[i] = time(loops, bench, canvas, target) / loops; |
+ samples[i] = time(loops, bench, target) / loops; |
} |
return loops; |
@@ -839,7 +833,7 @@ int nanobench_main() { |
} |
for (int j = 0; j < targets.count(); j++) { |
// During HWUI output this canvas may be NULL. |
- SkCanvas* canvas = targets[j]->surface.get() ? targets[j]->surface->getCanvas() : NULL; |
+ SkCanvas* canvas = targets[j]->getCanvas(); |
const char* config = targets[j]->config.name; |
targets[j]->setup(); |
@@ -847,8 +841,8 @@ int nanobench_main() { |
const int loops = |
targets[j]->needsFrameTiming() |
- ? gpu_bench(targets[j], bench.get(), canvas, samples.get()) |
- : cpu_bench(overhead, bench.get(), canvas, samples.get()); |
+ ? gpu_bench(targets[j], bench.get(), samples.get()) |
+ : cpu_bench(overhead, targets[j], bench.get(), samples.get()); |
bench->perCanvasPostDraw(canvas); |