From 090601c9170b4157d141676344d15dad1931f441 Mon Sep 17 00:00:00 2001 From: "robertphillips@google.com" Date: Tue, 17 Dec 2013 13:40:20 +0000 Subject: [PATCH] Make bench_pictures' timing more GPU friendly https://codereview.chromium.org/113873005/ git-svn-id: http://skia.googlecode.com/svn/trunk@12705 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tools/PictureBenchmark.cpp | 45 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/tools/PictureBenchmark.cpp b/tools/PictureBenchmark.cpp index 155d09776..f4c488551 100644 --- a/tools/PictureBenchmark.cpp +++ b/tools/PictureBenchmark.cpp @@ -170,30 +170,49 @@ void PictureBenchmark::run(SkPicture* pict) { this->logProgress(longRunningResult.c_str()); } } else { - SkAutoTDelete timer(this->setupTimer()); - TimerData timerData(fRepeats); + SkAutoTDelete longRunningTimer(this->setupTimer()); + TimerData longRunningTimerData(1); + SkAutoTDelete perRunTimer(this->setupTimer(false)); + TimerData perRunTimerData(fRepeats); + + longRunningTimer->start(); for (int i = 0; i < fRepeats; ++i) { fRenderer->setup(); - timer->start(); + perRunTimer->start(); fRenderer->render(NULL); - timer->truncatedEnd(); + perRunTimer->truncatedEnd(); + fRenderer->resetState(false); + perRunTimer->end(); - // Finishes gl context - fRenderer->resetState(true); - timer->end(); - - SkAssertResult(timerData.appendTimes(timer.get())); + SkAssertResult(perRunTimerData.appendTimes(perRunTimer.get())); } + longRunningTimer->truncatedEnd(); + fRenderer->resetState(true); + longRunningTimer->end(); + SkAssertResult(longRunningTimerData.appendTimes(longRunningTimer.get())); SkString configName = fRenderer->getConfigName(); - SkString result = timerData.getResult(timeFormat.c_str(), - fTimerResult, - configName.c_str(), - timerTypes); + // Beware - since the per-run-timer doesn't ever include a glFinish it can + // report a lower time then the long-running-timer +#if 0 + SkString result = perRunTimerData.getResult(timeFormat.c_str(), + fTimerResult, + configName.c_str(), + timerTypes); + result.append("\n"); + + this->logProgress(result.c_str()); +#else + SkString result = longRunningTimerData.getResult(timeFormat.c_str(), + fTimerResult, + configName.c_str(), + timerTypes, + fRepeats); result.append("\n"); this->logProgress(result.c_str()); +#endif } fRenderer->end();