Chromium Code Reviews| Index: tools/PictureBenchmark.cpp |
| diff --git a/tools/PictureBenchmark.cpp b/tools/PictureBenchmark.cpp |
| index a358ad4179d917eda54fb654d84a6647d3e9984c..adab9453d61223de046a9eae2ebdb38759f00956 100644 |
| --- a/tools/PictureBenchmark.cpp |
| +++ b/tools/PictureBenchmark.cpp |
| @@ -12,7 +12,6 @@ |
| #include "SkPicture.h" |
| #include "SkString.h" |
| #include "picture_utils.h" |
| -#include "TimerData.h" |
| namespace sk_tools { |
| @@ -20,13 +19,8 @@ PictureBenchmark::PictureBenchmark() |
| : fRepeats(1) |
| , fLogger(NULL) |
| , fRenderer(NULL) |
| -, fLogPerIter(false) |
| -, fPrintMin(false) |
| -, fShowWallTime(false) |
| -, fShowTruncatedWallTime(false) |
| -, fShowCpuTime(true) |
| -, fShowTruncatedCpuTime(false) |
| -, fShowGpuTime(false) |
| +, fTimerResult(TimerData::kAvg_Result) |
| +, fTimerTypes(0) |
| , fTimeIndividualTiles(false) |
| {} |
| @@ -34,6 +28,19 @@ PictureBenchmark::~PictureBenchmark() { |
| SkSafeUnref(fRenderer); |
| } |
| +void PictureBenchmark::setTimersToShow(bool wall, |
| + bool truncatedWall, |
| + bool cpu, |
| + bool truncatedCpu, |
| + bool gpu) { |
| + fTimerTypes = 0; |
| + fTimerTypes |= wall ? TimerData::kWall_Flag : 0; |
| + fTimerTypes |= truncatedWall ? TimerData::kTruncatedWall_Flag : 0; |
| + fTimerTypes |= cpu ? TimerData::kCpu_Flag : 0; |
| + fTimerTypes |= truncatedCpu ? TimerData::kTruncatedCpu_Flag : 0; |
| + fTimerTypes |= gpu ? TimerData::kGpu_Flag : 0; |
| +} |
| + |
| BenchTimer* PictureBenchmark::setupTimer(bool useGLTimer) { |
| #if SK_SUPPORT_GPU |
| if (useGLTimer && fRenderer != NULL && fRenderer->isUsingGpuDevice()) { |
| @@ -77,6 +84,18 @@ void PictureBenchmark::run(SkPicture* pict) { |
| usingGpu = fRenderer->isUsingGpuDevice(); |
| #endif |
| + uint32_t timerTypes = fTimerTypes; |
| + if (!usingGpu) { |
| + timerTypes &= ~TimerData::kGpu_Flag; |
| + } |
| + |
| + const char* timeFormat; |
| + if (TimerData::kPerIter_Result == fTimerResult) { |
| + timeFormat = fRenderer->getPerIterTimeFormat().c_str(); |
|
scroggo
2013/07/30 19:12:34
This is causing the problem: getPerIterTimeFormat
bsalomon
2013/07/31 15:21:39
Done.
|
| + } else { |
| + timeFormat = fRenderer->getNormalTimeFormat().c_str(); |
| + } |
| + |
| if (fTimeIndividualTiles) { |
| TiledPictureRenderer* tiledRenderer = fRenderer->getTiledRenderer(); |
| SkASSERT(tiledRenderer && tiledRenderer->supportsTimingIndividualTiles()); |
| @@ -110,11 +129,9 @@ void PictureBenchmark::run(SkPicture* pict) { |
| // platforms. To work around this, we disable the gpu timer on the |
| // long running timer. |
| SkAutoTDelete<BenchTimer> longRunningTimer(this->setupTimer()); |
| - TimerData longRunningTimerData(tiledRenderer->getPerIterTimeFormat(), |
| - tiledRenderer->getNormalTimeFormat()); |
| + TimerData longRunningTimerData(1); |
| SkAutoTDelete<BenchTimer> perTileTimer(this->setupTimer(false)); |
| - TimerData perTileTimerData(tiledRenderer->getPerIterTimeFormat(), |
| - tiledRenderer->getNormalTimeFormat()); |
| + TimerData perTileTimerData(fRepeats); |
| longRunningTimer->start(); |
| for (int i = 0; i < fRepeats; ++i) { |
| perTileTimer->start(); |
| @@ -122,20 +139,18 @@ void PictureBenchmark::run(SkPicture* pict) { |
| perTileTimer->truncatedEnd(); |
| tiledRenderer->resetState(false); |
| perTileTimer->end(); |
| - perTileTimerData.appendTimes(perTileTimer.get(), fRepeats - 1 == i); |
| + perTileTimerData.appendTimes(perTileTimer.get()); |
| } |
| longRunningTimer->truncatedEnd(); |
| tiledRenderer->resetState(true); |
| longRunningTimer->end(); |
| - longRunningTimerData.appendTimes(longRunningTimer.get(), true); |
| + longRunningTimerData.appendTimes(longRunningTimer.get()); |
| SkString configName = tiledRenderer->getConfigName(); |
| configName.appendf(": tile [%i,%i] out of [%i,%i]", x, y, xTiles, yTiles); |
| - SkString result = perTileTimerData.getResult(fLogPerIter, fPrintMin, fRepeats, |
| - configName.c_str(), fShowWallTime, |
| - fShowTruncatedWallTime, fShowCpuTime, |
| - fShowTruncatedCpuTime, |
| - usingGpu && fShowGpuTime); |
| + |
| + SkString result = perTileTimerData.getResult(timeFormat, fTimerResult, |
| + configName.c_str(), timerTypes); |
| result.append("\n"); |
| // TODO(borenet): Turn off per-iteration tile time reporting for now. Avoiding logging the time |
| @@ -147,15 +162,16 @@ void PictureBenchmark::run(SkPicture* pict) { |
| #endif |
| configName.append(" <averaged>"); |
| - SkString longRunningResult = longRunningTimerData.getResult(false, false, fRepeats, |
| - configName.c_str(), fShowWallTime, fShowTruncatedWallTime, |
| - fShowCpuTime, fShowTruncatedCpuTime, usingGpu && fShowGpuTime); |
| + SkString longRunningResult = longRunningTimerData.getResult( |
| + tiledRenderer->getNormalTimeFormat().c_str(), |
| + TimerData::kAvg_Result, |
| + configName.c_str(), timerTypes, fRepeats); |
| longRunningResult.append("\n"); |
| this->logProgress(longRunningResult.c_str()); |
| } |
| } else { |
| SkAutoTDelete<BenchTimer> timer(this->setupTimer()); |
| - TimerData timerData(fRenderer->getPerIterTimeFormat(), fRenderer->getNormalTimeFormat()); |
| + TimerData timerData(fRepeats); |
| for (int i = 0; i < fRepeats; ++i) { |
| fRenderer->setup(); |
| @@ -167,14 +183,15 @@ void PictureBenchmark::run(SkPicture* pict) { |
| fRenderer->resetState(true); |
| timer->end(); |
| - timerData.appendTimes(timer.get(), fRepeats - 1 == i); |
| + timerData.appendTimes(timer.get()); |
| } |
| SkString configName = fRenderer->getConfigName(); |
| - SkString result = timerData.getResult(fLogPerIter, fPrintMin, fRepeats, |
| - configName.c_str(), fShowWallTime, |
| - fShowTruncatedWallTime, fShowCpuTime, |
| - fShowTruncatedCpuTime, usingGpu && fShowGpuTime); |
| + |
| + SkString result = timerData.getResult(timeFormat, |
| + fTimerResult, |
| + configName.c_str(), |
| + timerTypes); |
| result.append("\n"); |
| this->logProgress(result.c_str()); |
| } |