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