]> git.cworth.org Git - apitrace/commitdiff
Allow filling state for frames and calls.
authorZack Rusin <zack@kde.org>
Fri, 1 Apr 2011 03:58:07 +0000 (23:58 -0400)
committerZack Rusin <zack@kde.org>
Fri, 1 Apr 2011 03:58:07 +0000 (23:58 -0400)
gui/apitracecall.cpp
gui/apitracecall.h
gui/mainwindow.cpp
gui/mainwindow.h

index dd05eeee49b40b8c28c523399843c15974cf61e6..a7685dcd6c333b93a457afb2e59d1a29d14a19a5 100644 (file)
@@ -367,3 +367,13 @@ ApiTraceEvent::ApiTraceEvent(Type t)
 ApiTraceCall::~ApiTraceCall()
 {
 }
+
+QVariantMap ApiTraceEvent::state() const
+{
+    return m_state;
+}
+
+void ApiTraceEvent::setState(const QVariantMap &state)
+{
+    m_state = state;
+}
index f5c734a20a60f47f44f50e01d90d5de62f3e54a3..c69a484e392947b8147dd87406c12827b24a15de 100644 (file)
@@ -117,8 +117,12 @@ public:
     virtual QStaticText staticText() const = 0;
     virtual int numChildren() const = 0;
 
+    QVariantMap state() const;
+    void setState(const QVariantMap &state);
+
 protected:
     Type m_type;
+    QVariantMap m_state;
 };
 Q_DECLARE_METATYPE(ApiTraceEvent*);
 
@@ -153,8 +157,6 @@ public:
     int number;
     QList<ApiTraceCall*> calls;
 
-    QVariantMap state;
-
     int numChildren() const;
     QStaticText staticText() const;
 private:
index 8a23ea3ad0b112f606d7fa96a70187e4508ab5b3..6ba7f408ef48e2c4999e909f078387affda8cdc0 100644 (file)
@@ -23,8 +23,8 @@
 MainWindow::MainWindow()
     : QMainWindow(),
       m_replayProcess(0),
-      m_currentFrame(0),
-      m_stateFrame(0),
+      m_selectedEvent(0),
+      m_stateEvent(0),
       m_findingState(false),
       m_jsonParser(new QJson::Parser())
 {
@@ -108,12 +108,12 @@ void MainWindow::callItemSelected(const QModelIndex &index)
     if (call) {
         m_ui.detailsWebView->setHtml(call->toHtml());
         m_ui.detailsDock->show();
-        m_currentFrame = call->parentFrame;
+        m_selectedEvent = call;
     } else {
-        m_currentFrame = index.data().value<ApiTraceFrame*>();
+        m_selectedEvent = index.data().value<ApiTraceFrame*>();
         m_ui.detailsDock->hide();
     }
-    if (m_currentFrame && !m_currentFrame->state.isEmpty()) {
+    if (m_selectedEvent && !m_selectedEvent->state().isEmpty()) {
         fillStateForFrame();
     } else
         m_ui.stateDock->hide();
@@ -175,7 +175,7 @@ void MainWindow::replayFinished()
     } else if (output.length() < 80) {
         statusBar()->showMessage(output);
     }
-    m_stateFrame = 0;
+    m_stateEvent = 0;
     m_findingState = false;
 }
 
@@ -185,7 +185,7 @@ void MainWindow::replayError(QProcess::ProcessError err)
     m_ui.actionReplay->setEnabled(true);
     m_ui.actionLookupState->setEnabled(true);
     m_findingState = false;
-    m_stateFrame = 0;
+    m_stateEvent = 0;
 
     qDebug()<<"Process error = "<<err;
     qDebug()<<"\terr = "<<m_replayProcess->readAllStandardError();
@@ -243,9 +243,24 @@ void MainWindow::replayTrace(bool dumpState)
 
     QStringList arguments;
     if (dumpState &&
-        m_currentFrame && !m_currentFrame->calls.isEmpty()) {
+        m_selectedEvent) {
+        int index = 0;
+        if (m_selectedEvent->type() == ApiTraceEvent::Call) {
+            index = static_cast<ApiTraceCall*>(m_selectedEvent)->index;
+        } else if (m_selectedEvent->type() == ApiTraceEvent::Frame) {
+            ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(m_selectedEvent);
+            if (frame->calls.isEmpty()) {
+                //XXX i guess we could still get the current state
+                qDebug()<<"tried to get a state for an empty frame";
+                return;
+            }
+            index = frame->calls.first()->index;
+        } else {
+            qDebug()<<"Unknown event type";
+            return;
+        }
         arguments << QLatin1String("-D");
-        arguments << QString::number(m_currentFrame->calls.first()->index);
+        arguments << QString::number(index);
     }
     arguments << m_traceFileName;
 
@@ -257,13 +272,13 @@ void MainWindow::replayTrace(bool dumpState)
 
 void MainWindow::lookupState()
 {
-    if (!m_currentFrame) {
+    if (!m_selectedEvent) {
         QMessageBox::warning(
-            this, tr("Unknown Frame"),
-            tr("To inspect the state select a frame in the trace."));
+            this, tr("Unknown Event"),
+            tr("To inspect the state select an event in the event list."));
         return;
     }
-    m_stateFrame = m_currentFrame;
+    m_stateEvent = m_selectedEvent;
     m_findingState = true;
     replayTrace(true);
 }
@@ -277,9 +292,8 @@ void MainWindow::parseState(const QVariantMap &params)
 {
     QVariantMap::const_iterator itr;
 
-    m_stateFrame->state.clear();
-    m_stateFrame->state = params;
-    if (m_currentFrame == m_stateFrame) {
+    m_stateEvent->setState(params);
+    if (m_selectedEvent == m_stateEvent) {
         fillStateForFrame();
     } else {
         m_ui.stateDock->hide();
@@ -313,11 +327,11 @@ void MainWindow::fillStateForFrame()
     QVariantMap::const_iterator itr;
     QVariantMap params;
 
-    if (!m_currentFrame || m_currentFrame->state.isEmpty())
+    if (!m_selectedEvent || m_selectedEvent->state().isEmpty())
         return;
 
     m_ui.stateTreeWidget->clear();
-    params = m_currentFrame->state;
+    params = m_selectedEvent->state();
     QList<QTreeWidgetItem *> items;
     for (itr = params.constBegin(); itr != params.constEnd(); ++itr) {
         QString key = itr.key();
index 9fbd7a8cce2fa763a292edd0082a1d96e758e26d..0f8e2151b8bc28f763f1aba53f75e3ebbd7e510b 100644 (file)
@@ -7,9 +7,10 @@
 #include <QProcess>
 
 class ApiTrace;
+class ApiTraceEvent;
+class ApiTraceFilter;
 class ApiTraceFrame;
 class ApiTraceModel;
-class ApiTraceFilter;
 class QLineEdit;
 class QModelIndex;
 class QProcess;
@@ -60,9 +61,9 @@ private:
 
     QString m_traceFileName;
 
-    ApiTraceFrame *m_currentFrame;
+    ApiTraceEvent *m_selectedEvent;
 
-    ApiTraceFrame *m_stateFrame;
+    ApiTraceEvent *m_stateEvent;
     bool m_findingState;
 
     QJson::Parser *m_jsonParser;