From b39e1c64410931066aa8d648fa9c765121a6ea42 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Tue, 19 Apr 2011 23:09:26 -0400 Subject: [PATCH] Large chunk of showing the replay errors. --- gui/mainwindow.cpp | 25 +++++++++++++++++++++++++ gui/mainwindow.h | 2 ++ gui/retracer.cpp | 24 ++++++++++++++++++++++-- gui/retracer.h | 8 ++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index e89f9f5..a5fbacc 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -654,6 +654,8 @@ void MainWindow::initConnections() this, SLOT(replayError(const QString&))); connect(m_retracer, SIGNAL(foundState(const ApiTraceState&)), this, SLOT(replayStateFound(const ApiTraceState&))); + connect(m_retracer, SIGNAL(retraceErrors(const QList&)), + this, SLOT(slotRetraceErrors(const QList&))); connect(m_ui.vertexInterpretButton, SIGNAL(clicked()), m_vdataInterpreter, SLOT(interpretData())); @@ -1010,4 +1012,27 @@ void MainWindow::slotTraceChanged(ApiTraceCall *call) } } +void MainWindow::slotRetraceErrors(const QList &errors) +{ + m_ui.errorsTreeWidget->clear(); + + foreach(RetraceError error, errors) { + ApiTraceCall *call = m_trace->callWithIndex(error.callIndex); + if (!call) + continue; + call->setError(error.message); + + QTreeWidgetItem *item = + new QTreeWidgetItem(m_ui.errorsTreeWidget); + item->setData(0, Qt::DisplayRole, error.callIndex); + item->setData(0, Qt::UserRole, QVariant::fromValue(call)); + QString type = error.type; + type[0] = type[0].toUpper(); + item->setData(1, Qt::DisplayRole, type); + item->setData(2, Qt::DisplayRole, error.message); + } + + m_ui.errorsDock->setVisible(!errors.isEmpty()); +} + #include "mainwindow.moc" diff --git a/gui/mainwindow.h b/gui/mainwindow.h index a08ead2..400f7a3 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -19,6 +19,7 @@ class JumpWidget; class QModelIndex; class QProgressBar; class QUrl; +class RetraceError; class Retracer; class SearchWidget; class ShadersSourceWidget; @@ -66,6 +67,7 @@ private slots: void slotGoFrameStart(); void slotGoFrameEnd(); void slotTraceChanged(ApiTraceCall *call); + void slotRetraceErrors(const QList &errors); private: void initObjects(); diff --git a/gui/retracer.cpp b/gui/retracer.cpp index f28f479..027cf5f 100644 --- a/gui/retracer.cpp +++ b/gui/retracer.cpp @@ -100,6 +100,8 @@ void Retracer::run() this, SIGNAL(error(const QString&))); connect(retrace, SIGNAL(foundState(const ApiTraceState&)), this, SIGNAL(foundState(const ApiTraceState&))); + connect(retrace, SIGNAL(retraceErrors(const QList&)), + this, SIGNAL(retraceErrors(const QList&))); retrace->start(); @@ -141,10 +143,11 @@ void RetraceProcess::replayFinished() { QByteArray output = m_process->readAllStandardOutput(); QString msg; + QString errStr = m_process->readAllStandardError(); #if 0 qDebug()<<"Process finished = "; - qDebug()<<"\terr = "<readAllStandardError(); + qDebug()<<"\terr = "<); RetraceProcess::RetraceProcess(QObject *parent) : QObject(parent) { m_process = new QProcess(this); m_jsonParser = new QJson::Parser(); + qRegisterMetaType >(); + connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(replayFinished())); connect(m_process, SIGNAL(error(QProcess::ProcessError)), diff --git a/gui/retracer.h b/gui/retracer.h index 617861e..1b5a4bd 100644 --- a/gui/retracer.h +++ b/gui/retracer.h @@ -9,6 +9,12 @@ namespace QJson { class Parser; } +struct RetraceError { + int callIndex; + QString type; + QString message; +}; + /* internal class used by the retracer to run * in the thread */ class RetraceProcess : public QObject @@ -43,6 +49,7 @@ signals: void finished(const QString &output); void error(const QString &msg); void foundState(const ApiTraceState &state); + void retraceErrors(const QList &errors); private slots: void replayFinished(); @@ -84,6 +91,7 @@ signals: void finished(const QString &output); void foundState(const ApiTraceState &state); void error(const QString &msg); + void retraceErrors(const QList &errors); protected: virtual void run(); -- 2.43.0