]> git.cworth.org Git - apitrace/blob - gui/trimprocess.cpp
c23475d50d86a62e078594f6786073628f4ebd9a
[apitrace] / gui / trimprocess.cpp
1 #include "trimprocess.h"
2 #include "apitrace.h"
3
4 #include <QDebug>
5 #include <QDir>
6 #include <QFile>
7 #include <QFileInfo>
8
9 TrimProcess::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
30 TrimProcess::~TrimProcess()
31 {
32 }
33
34 void 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
47 void 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
61 void 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
81 int TrimProcess::trimIndex()
82 {
83     return m_trimIndex;
84 }
85
86 void TrimProcess::setTrimIndex(int trimIndex)
87 {
88     m_trimIndex = trimIndex;
89
90     updateTrimPath();
91 }
92
93 void TrimProcess::setTracePath(const QString &str)
94 {
95     m_tracePath = str;
96
97     updateTrimPath();
98 }
99
100 QString TrimProcess::tracePath() const
101 {
102     return m_tracePath;
103 }
104
105 void 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"