Committed: http://code.google.com/p/skia/source/detail?r=10372

R=borenet@google.com, bungeman@google.com, robertphillips@google.com, scroggo@google.com, sglez@google.com

Author: bsalomon@google.com

Review URL: https://chromiumcodereview.appspot.com/19862002

git-svn-id: http://skia.googlecode.com/svn/trunk@10473 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
index 1ace7d1..2248753 100644
--- a/bench/benchmain.cpp
+++ b/bench/benchmain.cpp
@@ -348,20 +348,20 @@
 
     SkTDict<const char*> defineDict(1024);
     int repeatDraw = 1;
-    bool logPerIter = false;
+
     int forceAlpha = 0xFF;
     bool forceAA = true;
     bool forceFilter = false;
     SkTriState::State forceDither = SkTriState::kDefault;
-    bool timerWall = false;
-    bool truncatedTimerWall = false;
-    bool timerCpu = true;
-    bool truncatedTimerCpu = false;
-    bool timerGpu = true;
+
+    static const uint32_t kDefaultTimerTypes = TimerData::kCpu_Flag | TimerData::kGpu_Flag;
+    static const TimerData::Result kDefaultTimerResult = TimerData::kAvg_Result;
+    uint32_t timerTypes = kDefaultTimerTypes;
+    TimerData::Result timerResult = kDefaultTimerResult;
+
     bool doScale = false;
     bool doRotate = false;
     bool doClip = false;
-    bool printMin = false;
     bool hasStrokeWidth = false;
 
 #if SK_SUPPORT_GPU
@@ -410,22 +410,18 @@
                 return -1;
             }
         } else if (strcmp(*argv, "--logPerIter") == 0) {
-            logPerIter = true;
+            timerResult = TimerData::kPerIter_Result;
         } else if (strcmp(*argv, "--timers") == 0) {
             argv++;
             if (argv < stop) {
-                timerWall = false;
-                truncatedTimerWall = false;
-                timerCpu = false;
-                truncatedTimerCpu = false;
-                timerGpu = false;
+                timerTypes = 0;
                 for (char* t = *argv; *t; ++t) {
                     switch (*t) {
-                    case 'w': timerWall = true; break;
-                    case 'c': timerCpu = true; break;
-                    case 'W': truncatedTimerWall = true; break;
-                    case 'C': truncatedTimerCpu = true; break;
-                    case 'g': timerGpu = true; break;
+                    case 'w': timerTypes |= TimerData::kWall_Flag; break;
+                    case 'c': timerTypes |= TimerData::kCpu_Flag; break;
+                    case 'W': timerTypes |= TimerData::kTruncatedWall_Flag; break;
+                    case 'C': timerTypes |= TimerData::kTruncatedCpu_Flag; break;
+                    case 'g': timerTypes |= TimerData::kGpu_Flag; break;
                     }
                 }
             } else {
@@ -440,7 +436,7 @@
         } else if (!strcmp(*argv, "--clip")) {
             doClip = true;
         } else if (!strcmp(*argv, "--min")) {
-            printMin = true;
+            timerResult = TimerData::kMin_Result;
         } else if (strcmp(*argv, "--forceAA") == 0) {
             if (!parse_bool_arg(++argv, stop, &forceAA)) {
                 logger.logError("missing arg for --forceAA\n");
@@ -648,9 +644,9 @@
         str.printf("skia bench: alpha=0x%02X antialias=%d filter=%d "
                    "deferred=%s logperiter=%d",
                    forceAlpha, forceAA, forceFilter, deferredMode,
-                   logPerIter);
+                   TimerData::kPerIter_Result == timerResult);
         str.appendf(" rotate=%d scale=%d clip=%d min=%d",
-                   doRotate, doScale, doClip, printMin);
+                   doRotate, doScale, doClip, TimerData::kMin_Result == timerResult);
         str.appendf(" record=%d picturerecord=%d",
                     benchMode == kRecord_benchModes,
                     benchMode == kPictureRecord_benchModes);
@@ -883,7 +879,7 @@
                 }
 
                 // record timer values for each repeat, and their sum
-                TimerData timerData(perIterTimeformat, normalTimeFormat);
+                TimerData timerData(repeatDraw);
                 for (int i = 0; i < repeatDraw; i++) {
                     if ((benchMode == kRecord_benchModes || benchMode == kPictureRecord_benchModes)) {
                         // This will clear the recorded commands so that they do not
@@ -925,15 +921,24 @@
                     // have completed
                     timer->end();
 
-                    timerData.appendTimes(timer, repeatDraw - 1 == i);
+                    SkAssertResult(timerData.appendTimes(timer));
 
                 }
                 if (repeatDraw > 1) {
-                    SkString result = timerData.getResult(
-                                        logPerIter, printMin, repeatDraw, configName,
-                                        timerWall, truncatedTimerWall, timerCpu,
-                                        truncatedTimerCpu,
-                                        timerGpu && NULL != context);
+                    const char* timeFormat;
+                    if (TimerData::kPerIter_Result == timerResult) {
+                        timeFormat = perIterTimeformat.c_str();
+                    } else {
+                        timeFormat = normalTimeFormat.c_str();
+                    }
+                    uint32_t filteredTimerTypes = timerTypes;
+                    if (NULL == context) {
+                        filteredTimerTypes &= ~TimerData::kGpu_Flag;
+                    }
+                    SkString result = timerData.getResult(timeFormat,
+                                        timerResult,
+                                        configName,
+                                        filteredTimerTypes);
                     logger.logProgress(result);
                 }
                 if (outDir.size() > 0 && kNonRendering_Backend != backend) {