Index: tools/PictureBenchmark.cpp |
diff --git a/tools/PictureBenchmark.cpp b/tools/PictureBenchmark.cpp |
index a358ad4179d917eda54fb654d84a6647d3e9984c..155d097760bd8847ddfcb50879fa2dc0b9bb0fbf 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; |
+ } |
+ |
+ SkString timeFormat; |
+ if (TimerData::kPerIter_Result == fTimerResult) { |
+ timeFormat = fRenderer->getPerIterTimeFormat(); |
+ } else { |
+ timeFormat = fRenderer->getNormalTimeFormat(); |
+ } |
+ |
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); |
+ SkAssertResult(perTileTimerData.appendTimes(perTileTimer.get())); |
} |
longRunningTimer->truncatedEnd(); |
tiledRenderer->resetState(true); |
longRunningTimer->end(); |
- longRunningTimerData.appendTimes(longRunningTimer.get(), true); |
+ SkAssertResult(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.c_str(), 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); |
+ SkAssertResult(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.c_str(), |
+ fTimerResult, |
+ configName.c_str(), |
+ timerTypes); |
result.append("\n"); |
this->logProgress(result.c_str()); |
} |