]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Implement state diffing.
[apitrace] / gui / apitrace.h
1 #ifndef APITRACE_H
2 #define APITRACE_H
3
4 #include "apitracecall.h"
5
6 #include <QObject>
7
8 class LoaderThread;
9
10 class ApiTrace : public QObject
11 {
12     Q_OBJECT
13 public:
14     enum FrameMarker {
15         FrameMarker_SwapBuffers,
16         FrameMarker_Flush,
17         FrameMarker_Finish,
18         FrameMarker_Clear
19     };
20     static bool isCallAFrameMarker(const ApiTraceCall *call,
21                                    FrameMarker marker);
22 public:
23     ApiTrace();
24     ~ApiTrace();
25
26     bool isEmpty() const;
27
28     QString fileName() const;
29
30     FrameMarker frameMarker() const;
31
32     ApiTraceState defaultState() const;
33
34     QList<ApiTraceCall*> calls() const;
35     ApiTraceCall *callAt(int idx) const;
36     ApiTraceCall *callWithIndex(int idx) const;
37     int numCalls() const;
38
39     QList<ApiTraceFrame*> frames() const;
40     ApiTraceFrame *frameAt(int idx) const;
41     int numFrames() const;
42     int numCallsInFrame(int idx) const;
43
44 public slots:
45     void setFileName(const QString &name);
46     void setFrameMarker(FrameMarker marker);
47
48 signals:
49     void startedLoadingTrace();
50     void finishedLoadingTrace();
51     void invalidated();
52     void framesInvalidated();
53
54     void framesAdded(int oldCount, int numAdded);
55     void callsAdded(int oldCount, int numAdded);
56
57 private slots:
58     void addFrames(const QList<ApiTraceFrame*> &frames);
59 private:
60     void detectFrames();
61 private:
62     QString m_fileName;
63
64     QList<ApiTraceFrame*> m_frames;
65     QList<ApiTraceCall*> m_calls;
66
67     FrameMarker m_frameMarker;
68
69     LoaderThread *m_loader;
70 };
71
72 #endif