Make bench_pictures' timing more GPU friendly
authorrobertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 17 Dec 2013 13:40:20 +0000 (13:40 +0000)
committerrobertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 17 Dec 2013 13:40:20 +0000 (13:40 +0000)
https://codereview.chromium.org/113873005/

git-svn-id: http://skia.googlecode.com/svn/trunk@12705 2bbb7eff-a529-9590-31e7-b0007b416f81

tools/PictureBenchmark.cpp

index 155d097760bd8847ddfcb50879fa2dc0b9bb0fbf..f4c4885510a4316062ba582009c2169f7af55a8e 100644 (file)
@@ -170,30 +170,49 @@ void PictureBenchmark::run(SkPicture* pict) {
             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();
-
-            // Finishes gl context
-            fRenderer->resetState(true);
-            timer->end();
+            perRunTimer->truncatedEnd();
+            fRenderer->resetState(false);
+            perRunTimer->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();