]> git.cworth.org Git - apitrace/blob - gui/retracer.h
Properly handle and propagate retrace errors.
[apitrace] / gui / retracer.h
1 #ifndef RETRACER_H
2 #define RETRACER_H
3
4 #include "apitracecall.h"
5
6 #include <QThread>
7 #include <QProcess>
8
9 class ApiTraceState;
10 namespace QJson {
11     class Parser;
12 }
13
14 /* internal class used by the retracer to run
15  * in the thread */
16 class RetraceProcess : public QObject
17 {
18     Q_OBJECT
19 public:
20     RetraceProcess(QObject *parent=0);
21     ~RetraceProcess();
22
23     QProcess *process() const;
24
25     QString fileName() const;
26     void setFileName(const QString &name);
27
28     bool isBenchmarking() const;
29     void setBenchmarking(bool bench);
30
31     bool isDoubleBuffered() const;
32     void setDoubleBuffered(bool db);
33
34     void setCaptureAtCallNumber(qlonglong num);
35     qlonglong captureAtCallNumber() const;
36
37     bool captureState() const;
38     void setCaptureState(bool enable);
39
40 public slots:
41     void start();
42     void terminate();
43
44 signals:
45     void finished(const QString &output);
46     void error(const QString &msg);
47     void foundState(ApiTraceState *state);
48     void retraceErrors(const QList<ApiTraceError> &errors);
49
50 private slots:
51     void replayFinished();
52     void replayError(QProcess::ProcessError err);
53
54 private:
55     QString m_fileName;
56     bool m_benchmarking;
57     bool m_doubleBuffered;
58     bool m_captureState;
59     qlonglong m_captureCall;
60
61     QProcess *m_process;
62     QJson::Parser *m_jsonParser;
63 };
64
65 class Retracer : public QThread
66 {
67     Q_OBJECT
68 public:
69     Retracer(QObject *parent=0);
70
71     QString fileName() const;
72     void setFileName(const QString &name);
73
74     bool isBenchmarking() const;
75     void setBenchmarking(bool bench);
76
77     bool isDoubleBuffered() const;
78     void setDoubleBuffered(bool db);
79
80     void setCaptureAtCallNumber(qlonglong num);
81     qlonglong captureAtCallNumber() const;
82
83     bool captureState() const;
84     void setCaptureState(bool enable);
85
86 signals:
87     void finished(const QString &output);
88     void foundState(ApiTraceState *state);
89     void error(const QString &msg);
90     void retraceErrors(const QList<ApiTraceError> &errors);
91
92 protected:
93     virtual void run();
94
95 private slots:
96     void cleanup();
97 private:
98     QString m_fileName;
99     bool m_benchmarking;
100     bool m_doubleBuffered;
101     bool m_captureState;
102     qlonglong m_captureCall;
103
104     QProcessEnvironment m_processEnvironment;
105 };
106
107 #endif