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/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp
index 600800f..d3c6fad 100644
--- a/debugger/QT/SkDebuggerGUI.cpp
+++ b/debugger/QT/SkDebuggerGUI.cpp
@@ -404,7 +404,7 @@
item->setData(Qt::UserRole + 4, 100.0*temp);
}
- setupOverviewText(picture.typeTimes(), picture.totTime(), kNumRepeats);
+ setupOverviewText(picture.typeTimes(), picture.totTime());
}
void SkDebuggerGUI::actionCancel() {
@@ -1032,7 +1032,7 @@
setupListWidget(commands);
setupComboBox(commands);
- setupOverviewText(NULL, 0.0, 1);
+ setupOverviewText(NULL, 0.0);
fInspectorWidget.setDisabled(false);
fSettingsWidget.setDisabled(false);
fMenuEdit.setDisabled(false);
@@ -1070,87 +1070,10 @@
}
}
-void SkDebuggerGUI::setupOverviewText(const SkTDArray<double>* typeTimes,
- double totTime,
- int numRuns) {
-
- const SkTDArray<SkDrawCommand*>& commands = fDebugger.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()]++;
- }
-
- QString overview;
- 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.append(QString::number(counts[i]));
- if (NULL != typeTimes) {
- overview.append(" - ");
- overview.append(QString::number((*typeTimes)[i]/(float)numRuns, 'f', 1));
- overview.append("ms");
- overview.append(" - ");
- double percent = 100.0*(*typeTimes)[i]/totTime;
- overview.append(QString::number(percent, 'f', 1));
- 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.append(QString::number(totTime/(float)numRuns, 'f', 2));
- overview.append("ms");
-#ifdef SK_DEBUG
- overview.append(" ");
- overview.append(QString::number(totPercent));
- overview.append("% ");
-#endif
- overview.append("<br/>");
- }
-
- QString totalStr;
- totalStr.append("Total Draw Commands: ");
- totalStr.append(QString::number(total));
- totalStr.append("<br/>");
- overview.insert(0, totalStr);
-
- overview.append("<br/>");
- overview.append("SkPicture Width: ");
- // NOTE(chudy): This is where we can pull out the SkPictures width.
- overview.append(QString::number(fDebugger.pictureWidth()));
- overview.append("px<br/>");
- overview.append("SkPicture Height: ");
- overview.append(QString::number(fDebugger.pictureHeight()));
- overview.append("px");
- fInspectorWidget.setText(overview, SkInspectorWidget::kOverview_TabType);
+void SkDebuggerGUI::setupOverviewText(const SkTDArray<double>* typeTimes, double totTime) {
+ SkString overview;
+ fDebugger.getOverviewText(typeTimes, totTime, &overview);
+ fInspectorWidget.setText(overview.c_str(), SkInspectorWidget::kOverview_TabType);
}
void SkDebuggerGUI::setupComboBox(SkTArray<SkString>* command) {
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");
+}
diff --git a/debugger/SkDebugger.h b/debugger/SkDebugger.h
index 6749ff7..a6ef786 100644
--- a/debugger/SkDebugger.h
+++ b/debugger/SkDebugger.h
@@ -14,6 +14,8 @@
#include "SkPicture.h"
#include "SkTArray.h"
+class SkString;
+
class SkDebugger {
public:
SkDebugger();
@@ -105,6 +107,7 @@
}
}
+ void getOverviewText(const SkTDArray<double>* typeTimes, double totTime, SkString* overview);
private:
SkDebugCanvas* fDebugCanvas;