]> git.cworth.org Git - apitrace/blob - gui/traceprocess.cpp
5961444cd6e1370974cc20b829f6b2157a471050
[apitrace] / gui / traceprocess.cpp
1 #include "traceprocess.h"
2
3 #include <QDebug>
4 #include <QDir>
5 #include <QFile>
6 #include <QFileInfo>
7
8 TraceProcess::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     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
30 TraceProcess::~TraceProcess()
31 {
32 }
33
34 void TraceProcess::setExecutablePath(const QString &str)
35 {
36     m_execPath = str;
37
38     QFileInfo fi(m_execPath);
39     QString baseName = fi.baseName();
40
41     QString format = QString::fromLatin1("%1.trace");
42
43     m_tracePath = format
44                   .arg(baseName);
45
46     int i = 1;
47     while (QFile::exists(m_tracePath)) {
48         format = QString::fromLatin1("%1.%2.trace");
49         m_tracePath = format
50                       .arg(baseName)
51                       .arg(i++);
52     }
53 }
54
55 QString TraceProcess::executablePath() const
56 {
57     return m_execPath;
58 }
59
60 void TraceProcess::setArguments(const QStringList &args)
61 {
62     m_args = args;
63 }
64
65 QStringList TraceProcess::arguments() const
66 {
67     return m_args;
68 }
69
70 void TraceProcess::traceFinished()
71 {
72 #if 0
73     qDebug()<<"trace finished on " << m_tracePath;
74     qDebug()<<"\terr = "<<m_process->readAllStandardError();
75     qDebug()<<"\tout = "<<m_process->readAllStandardOutput();
76 #endif
77     emit tracedFile(m_tracePath);
78 }
79
80 void TraceProcess::traceError(QProcess::ProcessError err)
81 {
82 #if 1
83     qDebug()<<"trace error = "<<m_tracePath;
84     qDebug()<<"\terr = "<<m_process->readAllStandardError();
85     qDebug()<<"\tout = "<<m_process->readAllStandardOutput();
86 #endif
87     emit error(m_process->readAllStandardError());
88 }
89
90
91 void TraceProcess::start()
92 {
93     QStringList arguments;
94
95     arguments << QLatin1String("trace");
96     arguments << QLatin1String("--output");
97     arguments << m_tracePath;
98     arguments << QLatin1String("--");
99     arguments << m_execPath;
100     arguments << m_args;
101
102     m_process->start(QLatin1String("apitrace"), arguments);
103 }
104
105 bool TraceProcess::canTrace() const
106 {
107     return m_canTrace;
108 }
109
110 #include "traceprocess.moc"