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
diff --git a/tools/PictureBenchmark.cpp b/tools/PictureBenchmark.cpp
index 155d097..f4c4885 100644
--- a/tools/PictureBenchmark.cpp
+++ b/tools/PictureBenchmark.cpp
@@ -170,30 +170,49 @@
             this->logProgress(longRunningResult.c_str());
         }
     } else {
-        SkAutoTDelete<BenchTimer> timer(this->setupTimer());
-        TimerData timerData(fRepeats);
+        SkAutoTDelete<BenchTimer> longRunningTimer(this->setupTimer());
+        TimerData longRunningTimerData(1);
+        SkAutoTDelete<BenchTimer> 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();