+#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"