NaCl Debugger: Implement overview and filters, cleanup

(SkipBuildbotRuns) since no bots build the debugger.
Review URL: https://codereview.chromium.org/12449006

git-svn-id: http://skia.googlecode.com/svn/trunk@8095 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/debugger/SkDebugger.cpp b/debugger/SkDebugger.cpp
index caa361e..5ed1187 100644
--- a/debugger/SkDebugger.cpp
+++ b/debugger/SkDebugger.cpp
@@ -7,6 +7,8 @@
  */
 
 #include "SkDebugger.h"
+#include "SkString.h"
+
 
 SkDebugger::SkDebugger() {
     // Create this some other dynamic way?
@@ -43,3 +45,83 @@
     newPicture->endRecording();
     return newPicture;
 }
+
+void SkDebugger::getOverviewText(const SkTDArray<double>* typeTimes,
+                                 double totTime,
+                                 SkString* overview) {
+    const SkTDArray<SkDrawCommand*>& commands = this->getDrawCommands();
+
+    SkTDArray<int> counts;
+    counts.setCount(LAST_DRAWTYPE_ENUM+1);
+    for (int i = 0; i < LAST_DRAWTYPE_ENUM+1; ++i) {
+        counts[i] = 0;
+    }
+
+    for (int i = 0; i < commands.count(); i++) {
+        counts[commands[i]->getType()]++;
+    }
+
+    overview->reset();
+    int total = 0;
+#ifdef SK_DEBUG
+    double totPercent = 0, tempSum = 0;
+#endif
+    for (int i = 0; i < LAST_DRAWTYPE_ENUM+1; ++i) {
+        if (0 == counts[i]) {
+            // if there were no commands of this type then they should've consumed no time
+            SkASSERT(NULL == typeTimes || 0.0 == (*typeTimes)[i]);
+            continue;
+        }
+
+        overview->append(SkDrawCommand::GetCommandString((DrawType) i));
+        overview->append(": ");
+        overview->appendScalar(counts[i]);
+        if (NULL != typeTimes) {
+            overview->append(" - ");
+            overview->appendScalar((*typeTimes)[i]);
+            overview->append("ms");
+            overview->append(" - ");
+            double percent = 100.0*(*typeTimes)[i]/totTime;
+            overview->appendScalar(percent);
+            overview->append("%");
+#ifdef SK_DEBUG
+            totPercent += percent;
+            tempSum += (*typeTimes)[i];
+#endif
+        }
+        overview->append("<br/>");
+        total += counts[i];
+    }
+#ifdef SK_DEBUG
+    if (NULL != typeTimes) {
+        SkASSERT(SkScalarNearlyEqual(totPercent, 100.0));
+        SkASSERT(SkScalarNearlyEqual(tempSum, totTime));
+    }
+#endif
+
+    if (totTime > 0.0) {
+        overview->append("Total Time: ");
+        overview->appendScalar(totTime);
+        overview->append("ms");
+#ifdef SK_DEBUG
+        overview->append(" ");
+        overview->appendScalar(totPercent);
+        overview->append("% ");
+#endif
+        overview->append("<br/>");
+    }
+
+    SkString totalStr;
+    totalStr.append("Total Draw Commands: ");
+    totalStr.appendScalar(total);
+    totalStr.append("<br/>");
+    overview->insert(0, totalStr);
+
+    overview->append("<br/>");
+    overview->append("SkPicture Width: ");
+    overview->appendScalar(pictureWidth());
+    overview->append("px<br/>");
+    overview->append("SkPicture Height: ");
+    overview->appendScalar(pictureHeight());
+    overview->append("px");
+}