blob: c23475d50d86a62e078594f6786073628f4ebd9a [file] [log] [blame]
Dan McCabe1c3ddde2012-03-21 09:53:45 -07001#include "trimprocess.h"
2#include "apitrace.h"
3
4#include <QDebug>
5#include <QDir>
6#include <QFile>
7#include <QFileInfo>
8
9TrimProcess::TrimProcess(QObject *parent)
10 : QObject(parent)
11{
12 m_process = new QProcess(this);
13
14 connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)),
15 this, SLOT(trimFinished()));
16 connect(m_process, SIGNAL(error(QProcess::ProcessError)),
17 this, SLOT(trimError(QProcess::ProcessError)));
18
19#ifdef Q_OS_WIN
20 QString format = QLatin1String("%1;");
21#else
22 QString format = QLatin1String("%1:");
23#endif
24 QString buildPath = format.arg(APITRACE_BINARY_DIR);
25 QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
26 env.insert("PATH", buildPath + env.value("PATH"));
27 qputenv("PATH", env.value("PATH").toLatin1());
28}
29
30TrimProcess::~TrimProcess()
31{
32}
33
34void TrimProcess::trimFinished()
35{
36 // consume verbose output spew
37 QByteArray outputStrings = m_process->readAllStandardOutput();
38 QByteArray errorStrings = m_process->readAllStandardError();
39#if 0
40 qDebug()<<"trim finished on " << m_trimPath;
41 qDebug()<<"\terr = "<<errorStrings;
42 qDebug()<<"\tout = "<<outputStrings;
43#endif
44 emit trimmedFile(m_trimPath);
45}
46
47void TrimProcess::trimError(QProcess::ProcessError err)
48{
49 // consume verbose output spew
50 QByteArray outputStrings = m_process->readAllStandardOutput();
51 QByteArray errorStrings = m_process->readAllStandardError();
52#if 1
53 qDebug()<<"trace error = "<<m_tracePath;
54 qDebug()<<"\terr = "<<errorStrings;
55 qDebug()<<"\tout = "<<outputStrings;
56#endif
57 emit error(errorStrings);
58}
59
60
61void TrimProcess::start()
62{
63 QStringList arguments;
64
65 QString outputFormat = QLatin1String("--output=%1");
66 QString outputArgument = outputFormat
67 .arg(m_trimPath);
68
69 QString callSetFormat = QLatin1String("--calls=0-%1");
70 QString callSetArgument = callSetFormat
71 .arg(m_trimIndex);
72
73 arguments << QLatin1String("trim");
74 arguments << outputArgument;
75 arguments << callSetArgument;
76 arguments << m_tracePath;
77
78 m_process->start(QLatin1String("apitrace"), arguments);
79}
80
81int TrimProcess::trimIndex()
82{
83 return m_trimIndex;
84}
85
86void TrimProcess::setTrimIndex(int trimIndex)
87{
88 m_trimIndex = trimIndex;
89
90 updateTrimPath();
91}
92
93void TrimProcess::setTracePath(const QString &str)
94{
95 m_tracePath = str;
96
97 updateTrimPath();
98}
99
100QString TrimProcess::tracePath() const
101{
102 return m_tracePath;
103}
104
105void TrimProcess::updateTrimPath()
106{
107
108 QFileInfo fi(m_tracePath);
109 QString baseName = fi.baseName();
110 QString path = fi.path();
111
112 QString format = QString::fromLatin1("%1/%2.%3.trim.trace");
113
114 m_trimPath = format
115 .arg(path)
116 .arg(baseName)
117 .arg(m_trimIndex);
118}
119
120#include "trimprocess.moc"