]> git.cworth.org Git - apitrace/blobdiff - gui/trimprocess.cpp
Add trim support to qapitrace GUI app.
[apitrace] / gui / trimprocess.cpp
diff --git a/gui/trimprocess.cpp b/gui/trimprocess.cpp
new file mode 100644 (file)
index 0000000..c23475d
--- /dev/null
@@ -0,0 +1,120 @@
+#include "trimprocess.h"
+#include "apitrace.h"
+
+#include <QDebug>
+#include <QDir>
+#include <QFile>
+#include <QFileInfo>
+
+TrimProcess::TrimProcess(QObject *parent)
+    : QObject(parent)
+{
+    m_process = new QProcess(this);
+
+    connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)),
+            this, SLOT(trimFinished()));
+    connect(m_process, SIGNAL(error(QProcess::ProcessError)),
+            this, SLOT(trimError(QProcess::ProcessError)));
+
+#ifdef Q_OS_WIN
+    QString format = QLatin1String("%1;");
+#else
+    QString format = QLatin1String("%1:");
+#endif
+    QString buildPath = format.arg(APITRACE_BINARY_DIR);
+    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+    env.insert("PATH", buildPath + env.value("PATH"));
+    qputenv("PATH", env.value("PATH").toLatin1());
+}
+
+TrimProcess::~TrimProcess()
+{
+}
+
+void TrimProcess::trimFinished()
+{
+    // consume verbose output spew
+    QByteArray outputStrings = m_process->readAllStandardOutput();
+    QByteArray errorStrings = m_process->readAllStandardError();
+#if 0
+    qDebug()<<"trim finished on " << m_trimPath;
+    qDebug()<<"\terr = "<<errorStrings;
+    qDebug()<<"\tout = "<<outputStrings;
+#endif
+    emit trimmedFile(m_trimPath);
+}
+
+void TrimProcess::trimError(QProcess::ProcessError err)
+{
+    // consume verbose output spew
+    QByteArray outputStrings = m_process->readAllStandardOutput();
+    QByteArray errorStrings = m_process->readAllStandardError();
+#if 1
+    qDebug()<<"trace error = "<<m_tracePath;
+    qDebug()<<"\terr = "<<errorStrings;
+    qDebug()<<"\tout = "<<outputStrings;
+#endif
+    emit error(errorStrings);
+}
+
+
+void TrimProcess::start()
+{
+    QStringList arguments;
+
+    QString outputFormat = QLatin1String("--output=%1");
+    QString outputArgument = outputFormat
+                                .arg(m_trimPath);
+
+    QString callSetFormat = QLatin1String("--calls=0-%1");
+    QString callSetArgument = callSetFormat
+                                .arg(m_trimIndex);
+
+    arguments << QLatin1String("trim");
+    arguments << outputArgument;
+    arguments << callSetArgument;
+    arguments << m_tracePath;
+
+    m_process->start(QLatin1String("apitrace"), arguments);
+}
+
+int TrimProcess::trimIndex()
+{
+    return m_trimIndex;
+}
+
+void TrimProcess::setTrimIndex(int trimIndex)
+{
+    m_trimIndex = trimIndex;
+
+    updateTrimPath();
+}
+
+void TrimProcess::setTracePath(const QString &str)
+{
+    m_tracePath = str;
+
+    updateTrimPath();
+}
+
+QString TrimProcess::tracePath() const
+{
+    return m_tracePath;
+}
+
+void TrimProcess::updateTrimPath()
+{
+
+    QFileInfo fi(m_tracePath);
+    QString baseName = fi.baseName();
+    QString path = fi.path();
+
+    QString format = QString::fromLatin1("%1/%2.%3.trim.trace");
+
+    m_trimPath = format
+                  .arg(path)
+                  .arg(baseName)
+                  .arg(m_trimIndex);
+}
+
+#include "trimprocess.moc"