From 2caa06d01202fe4e8ba9893439de17bf62d0bf85 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Wed, 30 Mar 2011 18:30:20 -0400 Subject: [PATCH] Let retrace dump state. without parsing it right now --- gui/apitrace.cpp | 1 - gui/apitracecall.h | 1 + gui/loaderthread.cpp | 2 +- gui/mainwindow.cpp | 106 ++++++++++++++++++++++++++++--------------- gui/mainwindow.h | 6 +++ gui/ui/mainwindow.ui | 9 ++++ 6 files changed, 87 insertions(+), 38 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 4d7a17c..45fbfda 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -152,7 +152,6 @@ void ApiTrace::detectFrames() currentFrame->number = m_frames.count(); } apiCall->parentFrame = currentFrame; - apiCall->index = currentFrame->calls.count(); currentFrame->calls.append(apiCall); if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) { diff --git a/gui/apitracecall.h b/gui/apitracecall.h index 8f38bda..fcafd58 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -153,6 +153,7 @@ public: int number; QList calls; + QMap state; int numChildren() const; QStaticText staticText() const; diff --git a/gui/loaderthread.cpp b/gui/loaderthread.cpp index 2ec06ec..207c2a5 100644 --- a/gui/loaderthread.cpp +++ b/gui/loaderthread.cpp @@ -9,6 +9,7 @@ apiCallFromTraceCall(const Trace::Call *call) { 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) { @@ -54,7 +55,6 @@ void LoaderThread::run() ApiTraceCall *apiCall = apiCallFromTraceCall(call); apiCall->parentFrame = currentFrame; - apiCall->index = currentFrame->calls.count(); currentFrame->calls.append(apiCall); if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) { diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 63864bf..472ff27 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -20,7 +20,8 @@ MainWindow::MainWindow() : QMainWindow(), - m_replayProcess(0) + m_replayProcess(0), + m_findingState(false) { m_ui.setupUi(this); @@ -59,6 +60,8 @@ MainWindow::MainWindow() this, SLOT(replayStart())); connect(m_ui.actionStop, SIGNAL(triggered()), this, SLOT(replayStop())); + connect(m_ui.actionLookupState, SIGNAL(triggered()), + this, SLOT(lookupState())); connect(m_ui.callView, SIGNAL(activated(const QModelIndex &)), this, SLOT(callItemSelected(const QModelIndex &))); @@ -99,7 +102,9 @@ void MainWindow::callItemSelected(const QModelIndex &index) if (call) { m_ui.detailsWebView->setHtml(call->toHtml()); m_ui.detailsDock->show(); + m_currentFrame = call->parentFrame; } else { + m_currentFrame = index.data().value(); m_ui.detailsDock->hide(); } } @@ -111,38 +116,7 @@ void MainWindow::filterTrace() void MainWindow::replayStart() { - if (!m_replayProcess) { -#ifdef Q_OS_WIN - QString format = QLatin1String("%1;"); -#else - QString format = QLatin1String("%1:"); -#endif - QString buildPath = format.arg(BUILD_DIR); - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("PATH", buildPath + env.value("PATH")); - - qputenv("PATH", env.value("PATH").toLatin1()); - - m_replayProcess = new QProcess(this); - m_replayProcess->setProcessEnvironment(env); - - connect(m_replayProcess, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(replayFinished())); - connect(m_replayProcess, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(replayError(QProcess::ProcessError))); - } - - if (m_traceFileName.isEmpty()) - return; - - QStringList arguments; - arguments << m_traceFileName; - - m_replayProcess->start(QLatin1String("glretrace"), - arguments); - - m_ui.actionStop->setEnabled(true); - m_ui.actionReplay->setEnabled(false); + replayTrace(false); } void MainWindow::replayStop() @@ -152,6 +126,7 @@ void MainWindow::replayStop() m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); + m_ui.actionLookupState->setEnabled(true); } } @@ -162,8 +137,10 @@ void MainWindow::newTraceFile(const QString &fileName) if (m_traceFileName.isEmpty()) { m_ui.actionReplay->setEnabled(false); + m_ui.actionLookupState->setEnabled(false); } else { m_ui.actionReplay->setEnabled(true); + m_ui.actionLookupState->setEnabled(true); } } @@ -171,16 +148,19 @@ void MainWindow::replayFinished() { m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); + m_ui.actionLookupState->setEnabled(true); - QString output = m_replayProcess->readAllStandardOutput(); + QByteArray output = m_replayProcess->readAllStandardOutput(); -#if 0 +#if 1 qDebug()<<"Process finished = "; qDebug()<<"\terr = "<readAllStandardError(); qDebug()<<"\tout = "<showMessage(output); } } @@ -189,6 +169,8 @@ void MainWindow::replayError(QProcess::ProcessError err) { m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); + m_ui.actionLookupState->setEnabled(true); + m_findingState = false; qDebug()<<"Process error = "<setProcessEnvironment(env); + + connect(m_replayProcess, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(replayFinished())); + connect(m_replayProcess, SIGNAL(error(QProcess::ProcessError)), + this, SLOT(replayError(QProcess::ProcessError))); + } + + if (m_traceFileName.isEmpty()) + return; + + QStringList arguments; + if (dumpState && + m_currentFrame && !m_currentFrame->calls.isEmpty()) { + arguments << QLatin1String("-D"); + arguments << QString::number(m_currentFrame->calls.first()->index); + } + arguments << m_traceFileName; + + m_replayProcess->start(QLatin1String("glretrace"), + arguments); + + m_ui.actionStop->setEnabled(true); +} + +void MainWindow::lookupState() +{ + if (!m_currentFrame) { + QMessageBox::warning( + this, tr("Unknown Frame"), + tr("To inspect the state select a frame in the trace.")); + return; + } + m_findingState = true; + replayTrace(true); +} + #include "mainwindow.moc" diff --git a/gui/mainwindow.h b/gui/mainwindow.h index a771bd9..598a612 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -7,6 +7,7 @@ #include class ApiTrace; +class ApiTraceFrame; class ApiTraceModel; class ApiTraceFilter; class QLineEdit; @@ -33,9 +34,11 @@ private slots: void replayError(QProcess::ProcessError err); void startedLoadingTrace(); void finishedLoadingTrace(); + void lookupState(); private: void newTraceFile(const QString &fileName); + void replayTrace(bool dumpState); private: Ui_MainWindow m_ui; @@ -49,6 +52,9 @@ private: QProgressBar *m_progressBar; QString m_traceFileName; + + ApiTraceFrame *m_currentFrame; + bool m_findingState; }; diff --git a/gui/ui/mainwindow.ui b/gui/ui/mainwindow.ui index f60042c..229aaeb 100644 --- a/gui/ui/mainwindow.ui +++ b/gui/ui/mainwindow.ui @@ -50,6 +50,7 @@ + @@ -165,6 +166,14 @@ &Stop + + + false + + + Lookup State + + -- 2.43.0