blob: b1ac5328d75acd9b5de613fcdaff0dd699070d3d [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)));
Zack Rusinca164112011-04-11 02:23:09 -040018}
19
20TraceProcess::~TraceProcess()
21{
22}
23
José Fonseca2cdc9402012-02-28 17:12:24 +000024void TraceProcess::setApi(const QString &str)
25{
26 m_api = str;
27}
28
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020029void TraceProcess::setExecutablePathAndWorkingDir(const QString &execPath, const QString &workingDir)
Zack Rusinca164112011-04-11 02:23:09 -040030{
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020031 m_execPath = execPath;
32 m_workingDir = workingDir;
Zack Rusinca164112011-04-11 02:23:09 -040033
34 QFileInfo fi(m_execPath);
José Fonsecaf72e5932011-11-25 13:16:35 +000035 QString baseName = fi.baseName();
Zack Rusinca164112011-04-11 02:23:09 -040036
José Fonsecaf72e5932011-11-25 13:16:35 +000037 QString format = QString::fromLatin1("%1.trace");
Zack Rusinca164112011-04-11 02:23:09 -040038
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020039 QDir traceFileDir(workingDir);
40 m_tracePath = traceFileDir.filePath(format
41 .arg(baseName));
Zack Rusinca164112011-04-11 02:23:09 -040042
43 int i = 1;
44 while (QFile::exists(m_tracePath)) {
José Fonsecaf72e5932011-11-25 13:16:35 +000045 format = QString::fromLatin1("%1.%2.trace");
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020046 m_tracePath = traceFileDir.filePath(
47 format.arg(baseName)
48 .arg(i++));
Zack Rusinca164112011-04-11 02:23:09 -040049 }
50}
51
52QString TraceProcess::executablePath() const
53{
54 return m_execPath;
55}
56
57void TraceProcess::setArguments(const QStringList &args)
58{
59 m_args = args;
60}
61
62QStringList TraceProcess::arguments() const
63{
64 return m_args;
65}
66
67void TraceProcess::traceFinished()
68{
69#if 0
70 qDebug()<<"trace finished on " << m_tracePath;
71 qDebug()<<"\terr = "<<m_process->readAllStandardError();
72 qDebug()<<"\tout = "<<m_process->readAllStandardOutput();
73#endif
74 emit tracedFile(m_tracePath);
75}
76
77void TraceProcess::traceError(QProcess::ProcessError err)
78{
79#if 1
80 qDebug()<<"trace error = "<<m_tracePath;
81 qDebug()<<"\terr = "<<m_process->readAllStandardError();
82 qDebug()<<"\tout = "<<m_process->readAllStandardOutput();
83#endif
84 emit error(m_process->readAllStandardError());
85}
86
87
88void TraceProcess::start()
89{
José Fonsecaf72e5932011-11-25 13:16:35 +000090 QStringList arguments;
91
92 arguments << QLatin1String("trace");
José Fonseca2cdc9402012-02-28 17:12:24 +000093 arguments << QLatin1String("--api");
94 arguments << m_api;
José Fonsecaf72e5932011-11-25 13:16:35 +000095 arguments << QLatin1String("--output");
96 arguments << m_tracePath;
97 arguments << QLatin1String("--");
98 arguments << m_execPath;
99 arguments << m_args;
100
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +0200101 m_process->setWorkingDirectory(m_workingDir);
José Fonsecaf72e5932011-11-25 13:16:35 +0000102 m_process->start(QLatin1String("apitrace"), arguments);
Zack Rusinca164112011-04-11 02:23:09 -0400103}
104
105bool TraceProcess::canTrace() const
106{
107 return m_canTrace;
108}
109
110#include "traceprocess.moc"