X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;ds=sidebyside;f=gui%2Fretracer.cpp;h=17ac14d7d8d13a97da4f2e1a61455770e9b1104d;hb=b491d2958e2a8331f0f144de89626c284ae96121;hp=500d859aa3f6d73011acc0bbaabd38a58ed19287;hpb=ed40bc699e44f810d27c7e50d396f7749c8cc9c2;p=apitrace diff --git a/gui/retracer.cpp b/gui/retracer.cpp index 500d859..17ac14d 100644 --- a/gui/retracer.cpp +++ b/gui/retracer.cpp @@ -19,7 +19,7 @@ Retracer::Retracer(QObject *parent) #else QString format = QLatin1String("%1:"); #endif - QString buildPath = format.arg(BUILD_DIR); + QString buildPath = format.arg(APITRACE_BINARY_DIR); m_processEnvironment = QProcessEnvironment::systemEnvironment(); m_processEnvironment.insert("PATH", buildPath + m_processEnvironment.value("PATH")); @@ -38,6 +38,11 @@ void Retracer::setFileName(const QString &name) m_fileName = name; } +void Retracer::setAPI(trace::API api) +{ + m_api = api; +} + bool Retracer::isBenchmarking() const { return m_benchmarking; @@ -85,6 +90,7 @@ void Retracer::run() retrace->process()->setProcessEnvironment(m_processEnvironment); retrace->setFileName(m_fileName); + retrace->setAPI(m_api); retrace->setBenchmarking(m_benchmarking); retrace->setDoubleBuffered(m_doubleBuffered); retrace->setCaptureState(m_captureState); @@ -100,8 +106,8 @@ void Retracer::run() this, SIGNAL(error(const QString&))); connect(retrace, SIGNAL(foundState(ApiTraceState*)), this, SIGNAL(foundState(ApiTraceState*))); - connect(retrace, SIGNAL(retraceErrors(const QList&)), - this, SIGNAL(retraceErrors(const QList&))); + connect(retrace, SIGNAL(retraceErrors(const QList&)), + this, SIGNAL(retraceErrors(const QList&))); retrace->start(); @@ -118,8 +124,18 @@ void Retracer::run() void RetraceProcess::start() { + QString prog; QStringList arguments; + if (m_api == trace::API_GL) { + prog = QLatin1String("glretrace"); + } else if (m_api == trace::API_EGL) { + prog = QLatin1String("eglretrace"); + } else { + assert(0); + return; + } + if (m_doubleBuffered) { arguments << QLatin1String("-db"); } else { @@ -137,11 +153,11 @@ void RetraceProcess::start() arguments << m_fileName; - m_process->start(QLatin1String("glretrace"), arguments); + m_process->start(prog, arguments); } -void RetraceProcess::replayFinished() +void RetraceProcess::replayFinished(int exitCode, QProcess::ExitStatus exitStatus) { QByteArray output = m_process->readAllStandardOutput(); QString msg; @@ -152,22 +168,29 @@ void RetraceProcess::replayFinished() qDebug()<<"\terr = "<parse(output, &ok).toMap(); + ApiTraceState *state = new ApiTraceState(parsedJson); + emit foundState(state); + msg = tr("State fetched."); + } else { + msg = QString::fromUtf8(output); + } } QStringList errorLines = errStr.split('\n'); - QList errors; + QList errors; QRegExp regexp("(^\\d+): +(\\b\\w+\\b): (.+$)"); foreach(QString line, errorLines) { if (regexp.indexIn(line) != -1) { - RetraceError error; + ApiTraceError error; error.callIndex = regexp.cap(1).toInt(); error.type = regexp.cap(2); error.message = regexp.cap(3); @@ -182,25 +205,32 @@ void RetraceProcess::replayFinished() void RetraceProcess::replayError(QProcess::ProcessError err) { + /* + * XXX: this function is likely unnecessary and should be eliminated given + * that replayFinished is always called, even on errors. + */ + +#if 0 qDebug()<<"Process error = "<); +Q_DECLARE_METATYPE(QList); RetraceProcess::RetraceProcess(QObject *parent) : QObject(parent) { m_process = new QProcess(this); m_jsonParser = new QJson::Parser(); - qRegisterMetaType >(); + qRegisterMetaType >(); connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(replayFinished())); + this, SLOT(replayFinished(int, QProcess::ExitStatus))); connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(replayError(QProcess::ProcessError))); } @@ -220,6 +250,11 @@ void RetraceProcess::setFileName(const QString &name) m_fileName = name; } +void RetraceProcess::setAPI(trace::API api) +{ + m_api = api; +} + bool RetraceProcess::isBenchmarking() const { return m_benchmarking;