diff options
author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-25 21:30:52 +0000 |
---|---|---|
committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-25 21:30:52 +0000 |
commit | 68f2a0df144197d8221f4761285e597f1788e4ff (patch) | |
tree | 3a45395747e6deafcd1df3fa299632ea7e29a04c /bench/TimerData.cpp | |
parent | 5dbdfee3bd9033e05362399297f74bb4c14c0999 (diff) |
This reverts commit 4052fd051db67bd1099fde2c4fe400cfbe1f2426.
git-svn-id: http://skia.googlecode.com/svn/trunk@10374 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/TimerData.cpp')
-rw-r--r-- | bench/TimerData.cpp | 187 |
1 files changed, 77 insertions, 110 deletions
diff --git a/bench/TimerData.cpp b/bench/TimerData.cpp index f3084b047a..18d41e4de1 100644 --- a/bench/TimerData.cpp +++ b/bench/TimerData.cpp @@ -13,130 +13,97 @@ using namespace std; -TimerData::TimerData(int maxNumTimings) -: fMaxNumTimings(maxNumTimings) -, fCurrTiming(0) -, fWallTimes(maxNumTimings) -, fTruncatedWallTimes(maxNumTimings) -, fCpuTimes(maxNumTimings) -, fTruncatedCpuTimes(maxNumTimings) -, fGpuTimes(maxNumTimings){ +TimerData::TimerData(const SkString& perIterTimeFormat, const SkString& normalTimeFormat) +: fWallStr(" msecs = ") +, fTruncatedWallStr(" Wmsecs = ") +, fCpuStr(" cmsecs = ") +, fTruncatedCpuStr(" Cmsecs = ") +, fGpuStr(" gmsecs = ") +, fWallSum(0.0) +, fWallMin((numeric_limits<double>::max)()) // Extra parens to make the windows build work, due to + // 'max' macro +, fTruncatedWallSum(0.0) +, fTruncatedWallMin((numeric_limits<double>::max)()) +, fCpuSum(0.0) +, fCpuMin((numeric_limits<double>::max)()) +, fTruncatedCpuSum(0.0) +, fTruncatedCpuMin((numeric_limits<double>::max)()) +, fGpuSum(0.0) +, fGpuMin((numeric_limits<double>::max)()) +, fPerIterTimeFormat(perIterTimeFormat) +, fNormalTimeFormat(normalTimeFormat) +{} + +static double Min(double a, double b) { + return (a < b) ? a : b; } -bool TimerData::appendTimes(BenchTimer* timer) { +void TimerData::appendTimes(BenchTimer* timer, bool last) { SkASSERT(timer != NULL); - if (fCurrTiming >= fMaxNumTimings) { - return false; + SkString formatString(fPerIterTimeFormat); + if (!last) { + formatString.append(","); } + const char* format = formatString.c_str(); + fWallStr.appendf(format, timer->fWall); + fCpuStr.appendf(format, timer->fCpu); + fTruncatedWallStr.appendf(format, timer->fTruncatedWall); + fTruncatedCpuStr.appendf(format, timer->fTruncatedCpu); + fGpuStr.appendf(format, timer->fGpu); + + // Store the minimum values. We do not need to special case the first time since we initialized + // to max double. + fWallMin = Min(fWallMin, timer->fWall); + fCpuMin = Min(fCpuMin, timer->fCpu); + fTruncatedWallMin = Min(fTruncatedWallMin, timer->fTruncatedWall); + fTruncatedCpuMin = Min(fTruncatedCpuMin, timer->fTruncatedCpu); + fGpuMin = Min(fGpuMin, timer->fGpu); + + // Tally the sum of each timer type. + fWallSum += timer->fWall; + fCpuSum += timer->fCpu; + fTruncatedWallSum += timer->fTruncatedWall; + fTruncatedCpuSum += timer->fTruncatedCpu; + fGpuSum += timer->fGpu; - fWallTimes[fCurrTiming] = timer->fWall; - fTruncatedWallTimes[fCurrTiming] = timer->fTruncatedWall; - fCpuTimes[fCurrTiming] = timer->fCpu; - fTruncatedCpuTimes[fCurrTiming] = timer->fTruncatedCpu; - fGpuTimes[fCurrTiming] = timer->fGpu; - - ++fCurrTiming; - - return true; } -SkString TimerData::getResult(const char* doubleFormat, - Result result, - const char *configName, - uint32_t timerFlags, - int itersPerTiming) { - SkASSERT(itersPerTiming >= 1); - - if (!fCurrTiming) { - return SkString(""); - } - - int numTimings = fCurrTiming; - - SkString wallStr(" msecs = "); - SkString truncWallStr(" Wmsecs = "); - SkString cpuStr(" cmsecs = "); - SkString truncCpuStr(" Cmsecs = "); - SkString gpuStr(" gmsecs = "); - - double wallMin = std::numeric_limits<double>::max(); - double truncWallMin = std::numeric_limits<double>::max(); - double cpuMin = std::numeric_limits<double>::max(); - double truncCpuMin = std::numeric_limits<double>::max(); - double gpuMin = std::numeric_limits<double>::max(); - - double wallSum = 0; - double truncWallSum = 0; - double cpuSum = 0; - double truncCpuSum = 0; - double gpuSum = 0; - - for (int i = 0; i < numTimings; ++i) { - if (kPerIter_Result == result) { - wallStr.appendf(doubleFormat, fWallTimes[i]); - truncWallStr.appendf(doubleFormat, fTruncatedWallTimes[i]); - cpuStr.appendf(doubleFormat, fCpuTimes[i]); - truncCpuStr.appendf(doubleFormat, fTruncatedCpuTimes[i]); - gpuStr.appendf(doubleFormat, fGpuTimes[i]); - - if (i != numTimings - 1) { - static const char kSep[] = ", "; - wallStr.append(kSep); - truncWallStr.append(kSep); - cpuStr.append(kSep); - truncCpuStr.append(kSep); - gpuStr.append(kSep); - } - } else if (kMin_Result == result) { - wallMin = SkTMin(wallMin, fWallTimes[i]); - truncWallMin = SkTMin(truncWallMin, fTruncatedWallTimes[i]); - cpuMin = SkTMin(cpuMin, fCpuTimes[i]); - truncCpuMin = SkTMin(truncCpuMin, fTruncatedCpuTimes[i]); - gpuMin = SkTMin(gpuMin, fGpuTimes[i]); - } else { - SkASSERT(kAvg_Result == result); - wallSum += fWallTimes[i]; - truncWallSum += fTruncatedWallTimes[i]; - cpuSum += fCpuTimes[i]; - truncCpuSum += fTruncatedCpuTimes[i]; - } - - // We always track the GPU sum because whether it is non-zero indicates if valid gpu times - // were recorded at all. - gpuSum += fGpuTimes[i]; +SkString TimerData::getResult(bool logPerIter, bool printMin, int repeatDraw, + const char *configName, bool showWallTime, bool showTruncatedWallTime, + bool showCpuTime, bool showTruncatedCpuTime, bool showGpuTime) { + // output each repeat (no average) if logPerIter is set, + // otherwise output only the average + if (!logPerIter) { + const char* format = fNormalTimeFormat.c_str(); + fWallStr.set(" msecs = "); + fWallStr.appendf(format, printMin ? fWallMin : fWallSum / repeatDraw); + fCpuStr.set(" cmsecs = "); + fCpuStr.appendf(format, printMin ? fCpuMin : fCpuSum / repeatDraw); + fTruncatedWallStr.set(" Wmsecs = "); + fTruncatedWallStr.appendf(format, + printMin ? fTruncatedWallMin : fTruncatedWallSum / repeatDraw); + fTruncatedCpuStr.set(" Cmsecs = "); + fTruncatedCpuStr.appendf(format, + printMin ? fTruncatedCpuMin : fTruncatedCpuSum / repeatDraw); + fGpuStr.set(" gmsecs = "); + fGpuStr.appendf(format, printMin ? fGpuMin : fGpuSum / repeatDraw); } - - if (kMin_Result == result) { - wallStr.appendf(doubleFormat, wallMin / itersPerTiming); - truncWallStr.appendf(doubleFormat, truncWallMin / itersPerTiming); - cpuStr.appendf(doubleFormat, cpuMin / itersPerTiming); - truncCpuStr.appendf(doubleFormat, truncCpuMin / itersPerTiming); - gpuStr.appendf(doubleFormat, gpuMin / itersPerTiming); - } else if (kAvg_Result == result) { - int divisor = numTimings * itersPerTiming; - wallStr.appendf(doubleFormat, wallSum / divisor); - truncWallStr.appendf(doubleFormat, truncWallSum / divisor); - cpuStr.appendf(doubleFormat, cpuSum / divisor); - truncCpuStr.appendf(doubleFormat, truncCpuSum / divisor); - gpuStr.appendf(doubleFormat, gpuSum / divisor); - } - SkString str; str.printf(" %4s:", configName); - if (timerFlags & kWall_Flag) { - str += wallStr; + if (showWallTime) { + str += fWallStr; } - if (timerFlags & kTruncatedWall_Flag) { - str += truncWallStr; + if (showTruncatedWallTime) { + str += fTruncatedWallStr; } - if (timerFlags & kCpu_Flag) { - str += cpuStr; + if (showCpuTime) { + str += fCpuStr; } - if (timerFlags & kTruncatedCpu_Flag) { - str += truncCpuStr; + if (showTruncatedCpuTime) { + str += fTruncatedCpuStr; } - if ((timerFlags & kGpu_Flag) && gpuSum > 0) { - str += gpuStr; + if (showGpuTime && fGpuSum > 0) { + str += fGpuStr; } return str; } |