]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Delete loadertest and cleanup some of the new api.
[apitrace] / gui / apitrace.h
1 #ifndef APITRACE_H
2 #define APITRACE_H
3
4 #include "apitracecall.h"
5
6 #include <QObject>
7 #include <QSet>
8
9 class TraceLoader;
10 class SaverThread;
11 class QThread;
12
13 class ApiTrace : public QObject
14 {
15     Q_OBJECT
16 public:
17     enum FrameMarker {
18         FrameMarker_SwapBuffers,
19         FrameMarker_Flush,
20         FrameMarker_Finish,
21         FrameMarker_Clear
22     };
23     enum SearchResult {
24         SearchResult_NotFound,
25         SearchResult_Found,
26         SearchResult_Wrapped
27     };
28
29     static bool isCallAFrameMarker(const ApiTraceCall *call,
30                                    FrameMarker marker);
31 public:
32     ApiTrace();
33     ~ApiTrace();
34
35     bool isEmpty() const;
36
37     QString fileName() const;
38
39     FrameMarker frameMarker() const;
40
41     ApiTraceState defaultState() const;
42
43     ApiTraceCall *callWithIndex(int idx) const;
44
45     QList<ApiTraceFrame*> frames() const;
46     ApiTraceFrame *frameAt(int idx) const;
47     int numFrames() const;
48     int numCallsInFrame(int idx) const;
49
50     void callEdited(ApiTraceCall *call);
51     void callReverted(ApiTraceCall *call);
52     void callError(ApiTraceCall *call);
53
54     bool edited() const;
55     bool needsSaving() const;
56
57     bool isSaving() const;
58
59     bool hasErrors() const;
60
61 public slots:
62     void setFileName(const QString &name);
63     void save();
64     void loadFrame(ApiTraceFrame *frame);
65     void findNext(ApiTraceFrame *frame,
66                   ApiTraceCall *call,
67                   const QString &str,
68                   Qt::CaseSensitivity sensitivity);
69     void findPrev(ApiTraceFrame *frame,
70                   ApiTraceCall *call,
71                   const QString &str,
72                   Qt::CaseSensitivity sensitivity);
73     void findFrameStart(ApiTraceFrame *frame);
74     void findFrameEnd(ApiTraceFrame *frame);
75     void findCallIndex(int index);
76     void setCallError(const ApiTraceError &error);
77
78
79 signals:
80     void loadTrace(const QString &name);
81     void requestFrame(ApiTraceFrame *frame);
82     void startedLoadingTrace();
83     void loaded(int percent);
84     void finishedLoadingTrace();
85     void invalidated();
86     void framesInvalidated();
87     void changed(ApiTraceCall *call);
88     void startedSaving();
89     void saved();
90     void findResult(ApiTrace::SearchResult result,
91                     ApiTraceCall *call);
92
93     void beginAddingFrames(int oldCount, int numAdded);
94     void endAddingFrames();
95     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
96     void endLoadingFrame(ApiTraceFrame *frame);
97     void foundFrameStart(ApiTraceFrame *frame);
98     void foundFrameEnd(ApiTraceFrame *frame);
99     void foundCallIndex(ApiTraceCall *call);
100
101 signals:
102     void loaderSearchNext(int startFrame,
103                           const QString &str,
104                           Qt::CaseSensitivity sensitivity);
105     void loaderSearchPrev(int startFrame,
106                           const QString &str,
107                           Qt::CaseSensitivity sensitivity);
108     void loaderFindFrameStart(ApiTraceFrame *frame);
109     void loaderFindFrameEnd(ApiTraceFrame *frame);
110     void loaderFindCallIndex(int index);
111
112 private slots:
113     void addFrames(const QList<ApiTraceFrame*> &frames);
114     void slotSaved();
115     void finishedParsing();
116     void loaderFrameLoaded(ApiTraceFrame *frame,
117                            const QVector<ApiTraceCall*> &calls,
118                            quint64 binaryDataSize);
119     void loaderSearchResult(ApiTrace::SearchResult result,
120                             ApiTraceCall *call);
121
122 private:
123     int callInFrame(int callIdx) const;
124 private:
125     QString m_fileName;
126     QString m_tempFileName;
127
128     QList<ApiTraceFrame*> m_frames;
129     QVector<ApiTraceCall*> m_calls;
130
131     FrameMarker m_frameMarker;
132
133     TraceLoader *m_loader;
134     QThread     *m_loaderThread;
135     SaverThread  *m_saver;
136
137     QSet<ApiTraceCall*> m_editedCalls;
138
139     bool m_needsSaving;
140
141     QSet<ApiTraceCall*> m_errors;
142     QList< QPair<ApiTraceFrame*, ApiTraceError> > m_queuedErrors;
143 };
144
145 #endif