blob: 67cc64a252807145bee3be82ed3ef610afaae4c2 [file] [log] [blame]
Zack Rusinca164112011-04-11 02:23:09 -04001#include "traceprocess.h"
2
3#include <QDebug>
4#include <QDir>
5#include <QFile>
6#include <QFileInfo>
7
Zack Rusinca164112011-04-11 02:23:09 -04008TraceProcess::TraceProcess(QObject *parent)
9 : QObject(parent),
10 m_canTrace(true)
11{
12 m_process = new QProcess(this);
13
14 connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)),
15 this, SLOT(traceFinished()));
16 connect(m_process, SIGNAL(error(QProcess::ProcessError)),
17 this, SLOT(traceError(QProcess::ProcessError)));
18
19#ifdef Q_OS_WIN
20 qWarning()<<"Windows tracing isn't supported right now!";
21 m_canTrace = false;
22#else
José Fonsecaf72e5932011-11-25 13:16:35 +000023#ifdef Q_OS_WIN
24 QString format = QLatin1String("%1;");
25#else
26 QString format = QLatin1String("%1:");
27#endif
28 QString buildPath = format.arg(APITRACE_BINARY_DIR);
Zack Rusinca164112011-04-11 02:23:09 -040029 QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
José Fonsecaf72e5932011-11-25 13:16:35 +000030 env.insert("PATH", buildPath + env.value("PATH"));
31 qputenv("PATH", env.value("PATH").toLatin1());
Zack Rusinca164112011-04-11 02:23:09 -040032#endif
33}
34
35TraceProcess::~TraceProcess()
36{
37}
38
39void TraceProcess::setExecutablePath(const QString &str)
40{
41 m_execPath = str;
42
43 QFileInfo fi(m_execPath);
José Fonsecaf72e5932011-11-25 13:16:35 +000044 QString baseName = fi.baseName();
Zack Rusinca164112011-04-11 02:23:09 -040045
José Fonsecaf72e5932011-11-25 13:16:35 +000046 QString format = QString::fromLatin1("%1.trace");
Zack Rusinca164112011-04-11 02:23:09 -040047
48 m_tracePath = format
José Fonsecaf72e5932011-11-25 13:16:35 +000049 .arg(baseName);
Zack Rusinca164112011-04-11 02:23:09 -040050
51 int i = 1;
52 while (QFile::exists(m_tracePath)) {
José Fonsecaf72e5932011-11-25 13:16:35 +000053 format = QString::fromLatin1("%1.%2.trace");
Zack Rusinca164112011-04-11 02:23:09 -040054 m_tracePath = format
José Fonsecaf72e5932011-11-25 13:16:35 +000055 .arg(baseName)
Zack Rusinca164112011-04-11 02:23:09 -040056 .arg(i++);
57 }
58}
59
60QString TraceProcess::executablePath() const
61{
62 return m_execPath;
63}
64
65void TraceProcess::setArguments(const QStringList &args)
66{
67 m_args = args;
68}
69
70QStringList TraceProcess::arguments() const
71{
72 return m_args;
73}
74
75void TraceProcess::traceFinished()
76{
77#if 0
78 qDebug()<<"trace finished on " << m_tracePath;
79 qDebug()<<"\terr = "<<m_process->readAllStandardError();
80 qDebug()<<"\tout = "<<m_process->readAllStandardOutput();
81#endif
82 emit tracedFile(m_tracePath);
83}
84
85void TraceProcess::traceError(QProcess::ProcessError err)
86{
87#if 1
88 qDebug()<<"trace error = "<<m_tracePath;
89 qDebug()<<"\terr = "<<m_process->readAllStandardError();
90 qDebug()<<"\tout = "<<m_process->readAllStandardOutput();
91#endif
92 emit error(m_process->readAllStandardError());
93}
94
95
96void TraceProcess::start()
97{
José Fonsecaf72e5932011-11-25 13:16:35 +000098 QStringList arguments;
99
100 arguments << QLatin1String("trace");
101 arguments << QLatin1String("--output");
102 arguments << m_tracePath;
103 arguments << QLatin1String("--");
104 arguments << m_execPath;
105 arguments << m_args;
106
107 m_process->start(QLatin1String("apitrace"), arguments);
Zack Rusinca164112011-04-11 02:23:09 -0400108}
109
110bool TraceProcess::canTrace() const
111{
112 return m_canTrace;
113}
114
115#include "traceprocess.moc"