]> git.cworth.org Git - apitrace/commitdiff
Make apitracecall an actual class.
authorZack Rusin <zack@kde.org>
Sat, 16 Apr 2011 02:16:18 +0000 (22:16 -0400)
committerZack Rusin <zack@kde.org>
Sat, 16 Apr 2011 02:16:18 +0000 (22:16 -0400)
abstract the data in preparation for editing the arguments

gui/apitrace.cpp
gui/apitracecall.cpp
gui/apitracecall.h
gui/apitracefilter.cpp
gui/apitracemodel.cpp
gui/argumentseditor.cpp
gui/loaderthread.cpp
gui/mainwindow.cpp

index 592202fee3f0d1d9529d3dc5bcd700db25d4dcd0..40032ba6352367f275415ce844d793247ac2a793 100644 (file)
@@ -29,13 +29,13 @@ bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call,
 
     switch (marker) {
     case FrameMarker_SwapBuffers:
-        return call->name.contains(QLatin1String("SwapBuffers"));
+        return call->name().contains(QLatin1String("SwapBuffers"));
     case FrameMarker_Flush:
-        return call->name == QLatin1String("glFlush");
+        return call->name() == QLatin1String("glFlush");
     case FrameMarker_Finish:
-        return call->name == QLatin1String("glFinish");
+        return call->name() == QLatin1String("glFinish");
     case FrameMarker_Clear:
-        return call->name == QLatin1String("glClear");
+        return call->name() == QLatin1String("glClear");
     }
 
     Q_ASSERT(!"unknown frame marker");
@@ -153,7 +153,7 @@ void ApiTrace::detectFrames()
             currentFrame = new ApiTraceFrame();
             currentFrame->number = m_frames.count();
         }
-        apiCall->parentFrame = currentFrame;
+        apiCall->setParentFrame(currentFrame);
         currentFrame->calls.append(apiCall);
         if (ApiTrace::isCallAFrameMarker(apiCall,
                                          m_frameMarker)) {
@@ -175,7 +175,7 @@ ApiTraceCall * ApiTrace::callWithIndex(int idx) const
 {
     for (int i = 0; i < m_calls.count(); ++i) {
         ApiTraceCall *call = m_calls[i];
-        if (call->index == idx)
+        if (call->index() == idx)
             return call;
     }
     return NULL;
index 3c58542f436d9ebb61c41c8670b4fb1e0570df8e..69bfdc7a104d1fc0680a84c3bfd0df48d443c64c 100644 (file)
@@ -240,10 +240,10 @@ QStaticText ApiTraceCall::staticText() const
     if (!m_staticText.text().isEmpty())
         return m_staticText;
 
-    QString richText = QString::fromLatin1("<span style=\"font-weight:bold\">%1</span>(").arg(name);
-    for (int i = 0; i < argNames.count(); ++i) {
+    QString richText = QString::fromLatin1("<span style=\"font-weight:bold\">%1</span>(").arg(m_name);
+    for (int i = 0; i < m_argNames.count(); ++i) {
         richText += QLatin1String("<span style=\"color:#0000ff\">");
-        QString argText = apiVariantToString(argValues[i]);
+        QString argText = apiVariantToString(m_argValues[i]);
 
         //if arguments are really long (e.g. shader text), cut them
         // and elide it
@@ -259,14 +259,14 @@ QStaticText ApiTraceCall::staticText() const
             richText += argText;
         }
         richText += QLatin1String("</span>");
-        if (i < argNames.count() - 1)
+        if (i < m_argNames.count() - 1)
             richText += QString::fromLatin1(", ");
     }
     richText += QLatin1String(")");
-    if (returnValue.isValid()) {
+    if (m_returnValue.isValid()) {
         richText += QLatin1String(" = ");
         richText += QLatin1String("<span style=\"color:#0000ff\">");
-        richText += apiVariantToString(returnValue);
+        richText += apiVariantToString(m_returnValue);
         richText += QLatin1String("</span>");
     }
 
@@ -284,34 +284,34 @@ QString ApiTraceCall::toHtml() const
     if (!m_richText.isEmpty())
         return m_richText;
 
-    if (helpUrl.isEmpty()) {
+    if (m_helpUrl.isEmpty()) {
         m_richText = QString::fromLatin1(
             "%1) <span style=\"font-weight:bold\">%2</span>(")
-                     .arg(index)
-                     .arg(name);
+                     .arg(m_index)
+                     .arg(m_name);
     } else {
         m_richText = QString::fromLatin1(
             "%1) <span style=\"font-weight:bold\"><a href=\"%2\">%3</a></span>(")
-                      .arg(index)
-                      .arg(helpUrl.toString())
-                      .arg(name);
+                      .arg(m_index)
+                      .arg(m_helpUrl.toString())
+                      .arg(m_name);
     }
 
-    for (int i = 0; i < argNames.count(); ++i) {
-        m_richText += argNames[i];
+    for (int i = 0; i < m_argNames.count(); ++i) {
+        m_richText += m_argNames[i];
         m_richText += QString::fromLatin1(" = ");
         m_richText += QLatin1String("<span style=\"color:#0000ff\">");
-        m_richText += apiVariantToString(argValues[i]);
+        m_richText += apiVariantToString(m_argValues[i]);
         m_richText += QLatin1String("</span>");
-        if (i < argNames.count() - 1)
+        if (i < m_argNames.count() - 1)
             m_richText += QString::fromLatin1(", ");
     }
     m_richText += QLatin1String(")");
 
-    if (returnValue.isValid()) {
+    if (m_returnValue.isValid()) {
         m_richText += QLatin1String(" = ");
         m_richText += QLatin1String("<span style=\"color:#0000ff\">");
-        m_richText += apiVariantToString(returnValue);
+        m_richText += apiVariantToString(m_returnValue);
         m_richText += QLatin1String("</span>");
     }
     return m_richText;
@@ -322,25 +322,25 @@ QString ApiTraceCall::filterText() const
     if (!m_filterText.isEmpty())
         return m_filterText;
 
-    m_filterText = name;
+    m_filterText = m_name;
     m_filterText += QLatin1String("(");
-    for (int i = 0; i < argNames.count(); ++i) {
-        m_filterText += argNames[i];
+    for (int i = 0; i < m_argNames.count(); ++i) {
+        m_filterText += m_argNames[i];
         m_filterText += QString::fromLatin1(" = ");
 
-        if (argValues[i].type() == QVariant::ByteArray) {
+        if (m_argValues[i].type() == QVariant::ByteArray) {
             m_hasBinaryData = true;
             m_binaryDataIndex = i;
         }
-        m_filterText += apiVariantToString(argValues[i]);
-        if (i < argNames.count() - 1)
+        m_filterText += apiVariantToString(m_argValues[i]);
+        if (i < m_argNames.count() - 1)
             m_filterText += QString::fromLatin1(", ");
     }
     m_filterText += QLatin1String(")");
 
-    if (returnValue.isValid()) {
+    if (m_returnValue.isValid()) {
         m_filterText += QLatin1String(" = ");
-        m_filterText += apiVariantToString(returnValue);
+        m_filterText += apiVariantToString(m_returnValue);
     }
     return m_filterText;
 }
@@ -536,3 +536,73 @@ QList<QVariant> ApiArray::values() const
 {
     return m_array;
 }
+
+int ApiTraceCall::index() const
+{
+    return m_index;
+}
+
+QString ApiTraceCall::name() const
+{
+    return m_name;
+}
+
+QStringList ApiTraceCall::argNames() const
+{
+    return m_argNames;
+}
+
+QVariantList ApiTraceCall::arguments() const
+{
+    return m_argValues;
+}
+
+QVariant ApiTraceCall::returnValue() const
+{
+    return m_returnValue;
+}
+
+QUrl ApiTraceCall::helpUrl() const
+{
+    return m_helpUrl;
+}
+
+ApiTraceCall::ApiTraceCall(const Trace::Call *call)
+    : ApiTraceEvent(ApiTraceEvent::Call),
+      m_hasBinaryData(false),
+      m_binaryDataIndex(0)
+{
+    m_name = QString::fromStdString(call->sig->name);
+    m_index = call->no;
+
+    QString argumentsText;
+    for (int i = 0; i < call->sig->arg_names.size(); ++i) {
+        m_argNames +=
+            QString::fromStdString(call->sig->arg_names[i]);
+    }
+    if (call->ret) {
+        VariantVisitor retVisitor;
+        call->ret->visit(retVisitor);
+        m_returnValue = retVisitor.variant();
+    }
+    for (int i = 0; i < call->args.size(); ++i) {
+        VariantVisitor argVisitor;
+        call->args[i]->visit(argVisitor);
+        m_argValues += argVisitor.variant();
+    }
+}
+
+void ApiTraceCall::setHelpUrl(const QUrl &url)
+{
+    m_helpUrl = url;
+}
+
+void ApiTraceCall::setParentFrame(ApiTraceFrame *frame)
+{
+    m_parentFrame = frame;
+}
+
+ApiTraceFrame * ApiTraceCall::parentFrame()const
+{
+    return m_parentFrame;
+}
index 355b8c8bfe9e94c36b0b8cc1088284d3d2a78a5b..14ef52d5df474ffcf83b5442311c1ecfaeaf89e0 100644 (file)
@@ -154,15 +154,18 @@ class ApiTraceCall : public ApiTraceEvent
 {
 public:
     ApiTraceCall();
+    ApiTraceCall(const Trace::Call *tcall);
     ~ApiTraceCall();
 
-    int index;
-    QString name;
-    QStringList argNames;
-    QVariantList argValues;
-    QVariant returnValue;
-    ApiTraceFrame *parentFrame;
-    QUrl helpUrl;
+    int index() const;
+    QString name() const;
+    QStringList argNames() const;
+    QVariantList arguments() const;
+    QVariant returnValue() const;
+    QUrl helpUrl() const;
+    void setHelpUrl(const QUrl &url);
+    ApiTraceFrame *parentFrame()const;
+    void setParentFrame(ApiTraceFrame *frame);
 
     QString toHtml() const;
     QString filterText() const;
@@ -171,6 +174,14 @@ public:
     bool hasBinaryData() const;
     int binaryDataIndex() const;
 private:
+    int m_index;
+    QString m_name;
+    QStringList m_argNames;
+    QVariantList m_argValues;
+    QVariant m_returnValue;
+    ApiTraceFrame *m_parentFrame;
+    QUrl m_helpUrl;
+
     mutable QString m_richText;
     mutable QString m_filterText;
     mutable QStaticText m_staticText;
index 8a40faf5d563cb8bc7475adc259cbde686ac597b..f541f736055bbbd5aa31aaec4d361e92ecca2a62 100644 (file)
@@ -29,7 +29,7 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
     }
 
     ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
-    QString function = call->name;
+    QString function = call->name();
 
     if (!m_regexp.isEmpty() && m_regexp.isValid()) {
         return function.contains(m_regexp);
index d3f3e6a7545aedbcef8d6269de04fe05b358ac14..b41920ee264b189968560bce2a35ef3724d07ed0 100644 (file)
@@ -44,12 +44,12 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const
             ApiTraceCall *call = static_cast<ApiTraceCall*>(itm);
             if (call->state().isEmpty())
                 return QString::fromLatin1("%1)&nbsp;<b>%2</b>")
-                    .arg(call->index)
-                    .arg(call->name);
+                    .arg(call->index())
+                    .arg(call->name());
             else
                 return QString::fromLatin1("%1)&nbsp;<b>%2</b><br/>%3")
-                    .arg(call->index)
-                    .arg(call->name)
+                    .arg(call->index())
+                    .arg(call->name())
                     .arg(stateText);
         } else {
             ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(itm);
@@ -145,9 +145,9 @@ QModelIndex ApiTraceModel::parent(const QModelIndex &index) const
     ApiTraceEvent *event = item(index);
     if (event && event->type() == ApiTraceEvent::Call) {
         ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
-        Q_ASSERT(call->parentFrame);
-        return createIndex(call->parentFrame->number,
-                           0, call->parentFrame);
+        Q_ASSERT(call->parentFrame());
+        return createIndex(call->parentFrame()->number,
+                           0, call->parentFrame());
     }
     return QModelIndex();
 }
@@ -240,7 +240,7 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event)
 
     if (event->type() == ApiTraceEvent::Call) {
         ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
-        ApiTraceFrame *frame = call->parentFrame;
+        ApiTraceFrame *frame = call->parentFrame();
         int row = frame->calls.indexOf(call);
         QModelIndex index = createIndex(row, 0, call);
         emit dataChanged(index, index);
@@ -265,12 +265,12 @@ QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const
         return QModelIndex();
     }
 
-    ApiTraceFrame *frame = call->parentFrame;
+    ApiTraceFrame *frame = call->parentFrame();
     Q_ASSERT(frame);
 
     int row = frame->calls.indexOf(call);
     if (row < 0) {
-        qDebug() << "Couldn't find call num "<<call->index<<" inside parent!";
+        qDebug() << "Couldn't find call num "<<call->index()<<" inside parent!";
         return QModelIndex();
     }
     return createIndex(row, 0, call);
index de467848125347d443f8b9dffe0ca58c47d40ff5..7f75d2c15ae4bf2b271933878678068da8b55918 100644 (file)
@@ -175,11 +175,11 @@ void ArgumentsEditor::setupCall()
     if (!m_call)
         return;
 
-    m_ui.callLabel->setText(m_call->name);
+    m_ui.callLabel->setText(m_call->name());
     QStandardItem *rootItem = m_model->invisibleRootItem();
-    for (int i = 0; i < m_call->argNames.count(); ++i) {
-        QString argName = m_call->argNames[i];
-        QVariant val = m_call->argValues[i];
+    for (int i = 0; i < m_call->argNames().count(); ++i) {
+        QString argName = m_call->argNames()[i];
+        QVariant val = m_call->arguments()[i];
         QStandardItem *nameItem = new QStandardItem(argName);
         nameItem->setFlags(nameItem->flags() ^ Qt::ItemIsEditable);
         QList<QStandardItem*> topRow;
index 37898a490ceb49a53dab23edee628087df38ca51..bc3d32e8e9da6fe1b928610f6cbce07581cf7548 100644 (file)
@@ -14,27 +14,9 @@ static ApiTraceCall *
 apiCallFromTraceCall(const Trace::Call *call,
                      const QHash<QString, QUrl> &helpHash)
 {
-    ApiTraceCall *apiCall = new ApiTraceCall();
-    apiCall->name = QString::fromStdString(call->sig->name);
-    apiCall->index = call->no;
-
-    QString argumentsText;
-    for (int i = 0; i < call->sig->arg_names.size(); ++i) {
-        apiCall->argNames +=
-            QString::fromStdString(call->sig->arg_names[i]);
-    }
-    if (call->ret) {
-        VariantVisitor retVisitor;
-        call->ret->visit(retVisitor);
-        apiCall->returnValue = retVisitor.variant();
-    }
-    for (int i = 0; i < call->args.size(); ++i) {
-        VariantVisitor argVisitor;
-        call->args[i]->visit(argVisitor);
-        apiCall->argValues += argVisitor.variant();
-    }
+    ApiTraceCall *apiCall = new ApiTraceCall(call);
 
-    apiCall->helpUrl = helpHash.value(apiCall->name);
+    apiCall->setHelpUrl(helpHash.value(apiCall->name()));
 
     //force generation of the internal state
     apiCall->filterText();
@@ -85,7 +67,7 @@ void LoaderThread::run()
             }
             ApiTraceCall *apiCall =
                 apiCallFromTraceCall(call, helpHash);
-            apiCall->parentFrame = currentFrame;
+            apiCall->setParentFrame(currentFrame);
             currentFrame->calls.append(apiCall);
             if (ApiTrace::isCallAFrameMarker(apiCall,
                                              m_frameMarker)) {
index d67bc03d5020475e8b0cd02cc841e1ef9d2a1642..420c715a7d4345c8562525be134646abe710bab9 100644 (file)
@@ -102,19 +102,20 @@ void MainWindow::callItemSelected(const QModelIndex &index)
         m_ui.detailsDock->show();
         if (call->hasBinaryData()) {
             QByteArray data =
-                call->argValues[call->binaryDataIndex()].toByteArray();
+                call->arguments()[call->binaryDataIndex()].toByteArray();
             m_vdataInterpreter->setData(data);
+            QVariantList args = call->arguments();
 
-            for (int i = 0; i < call->argNames.count(); ++i) {
-                QString name = call->argNames[i];
+            for (int i = 0; i < call->argNames().count(); ++i) {
+                QString name = call->argNames()[i];
                 if (name == QLatin1String("stride")) {
-                    int stride = call->argValues[i].toInt();
+                    int stride = args[i].toInt();
                     m_ui.vertexStrideSB->setValue(stride);
                 } else if (name == QLatin1String("size")) {
-                    int components = call->argValues[i].toInt();
+                    int components = args[i].toInt();
                     m_ui.vertexComponentsSB->setValue(components);
                 } else if (name == QLatin1String("type")) {
-                    QString val = call->argValues[i].toString();
+                    QString val = args[i].toString();
                     int textIndex = m_ui.vertexTypeCB->findText(val);
                     if (textIndex >= 0)
                         m_ui.vertexTypeCB->setCurrentIndex(textIndex);
@@ -242,7 +243,7 @@ void MainWindow::replayTrace(bool dumpState)
     if (m_retracer->captureState() && m_selectedEvent) {
         int index = 0;
         if (m_selectedEvent->type() == ApiTraceEvent::Call) {
-            index = static_cast<ApiTraceCall*>(m_selectedEvent)->index;
+            index = static_cast<ApiTraceCall*>(m_selectedEvent)->index();
         } else if (m_selectedEvent->type() == ApiTraceEvent::Frame) {
             ApiTraceFrame *frame =
                 static_cast<ApiTraceFrame*>(m_selectedEvent);
@@ -251,7 +252,7 @@ void MainWindow::replayTrace(bool dumpState)
                 qDebug()<<"tried to get a state for an empty frame";
                 return;
             }
-            index = frame->calls.first()->index;
+            index = frame->calls.first()->index();
         } else {
             qDebug()<<"Unknown event type";
             return;