]> git.cworth.org Git - apitrace/blob - gui/apitrace.h
Implement jump to.
[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         SearchNotFound,
25         SearchFound,
26         SearchWrapped
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     QVector<ApiTraceCall*> calls() const;
44     ApiTraceCall *callWithIndex(int idx) const;
45     int numCalls() const;
46
47     QList<ApiTraceFrame*> frames() const;
48     ApiTraceFrame *frameAt(int idx) const;
49     int numFrames() const;
50     int numCallsInFrame(int idx) const;
51
52     void callEdited(ApiTraceCall *call);
53     void callReverted(ApiTraceCall *call);
54     void callError(ApiTraceCall *call);
55
56     bool edited() const;
57     bool needsSaving() const;
58
59     bool isSaving() const;
60
61     bool hasErrors() const;
62
63 public slots:
64     void setFileName(const QString &name);
65     void setFrameMarker(FrameMarker marker);
66     void save();
67     void loadFrame(ApiTraceFrame *frame);
68     void findNext(ApiTraceFrame *frame,
69                   ApiTraceCall *call,
70                   const QString &str,
71                   Qt::CaseSensitivity sensitivity);
72     void findPrev(ApiTraceFrame *frame,
73                   ApiTraceCall *call,
74                   const QString &str,
75                   Qt::CaseSensitivity sensitivity);
76     void findFrameStart(ApiTraceFrame *frame);
77     void findFrameEnd(ApiTraceFrame *frame);
78     void findCallIndex(int index);
79
80
81 signals:
82     void loadTrace(const QString &name);
83     void requestFrame(ApiTraceFrame *frame);
84     void startedLoadingTrace();
85     void loaded(int percent);
86     void finishedLoadingTrace();
87     void invalidated();
88     void framesInvalidated();
89     void changed(ApiTraceCall *call);
90     void startedSaving();
91     void saved();
92     void findResult(ApiTrace::SearchResult result,
93                     ApiTraceCall *call);
94
95     void beginAddingFrames(int oldCount, int numAdded);
96     void endAddingFrames();
97     void callsAdded(int oldCount, int numAdded);
98     void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
99     void endLoadingFrame(ApiTraceFrame *frame);
100     void foundFrameStart(ApiTraceFrame *frame);
101     void foundFrameEnd(ApiTraceFrame *frame);
102     void foundCallIndex(ApiTraceCall *call);
103
104 signals:
105     void loaderSearchNext(int startFrame,
106                           const QString &str,
107                           Qt::CaseSensitivity sensitivity);
108     void loaderSearchPrev(int startFrame,
109                           const QString &str,
110                           Qt::CaseSensitivity sensitivity);
111     void loaderFindFrameStart(ApiTraceFrame *frame);
112     void loaderFindFrameEnd(ApiTraceFrame *frame);
113     void loaderFindCallIndex(int index);
114
115 private slots:
116     void addFrames(const QList<ApiTraceFrame*> &frames);
117     void slotSaved();
118     void finishedParsing();
119     void loaderFrameLoaded(ApiTraceFrame *frame,
120                            const QVector<ApiTraceCall*> &calls,
121                            quint64 binaryDataSize);
122     void loaderSearchResult(ApiTrace::SearchResult result,
123                             ApiTraceCall *call);
124
125 private:
126     void detectFrames();
127     int callInFrame(int callIdx) const;
128 private:
129     QString m_fileName;
130     QString m_tempFileName;
131
132     QList<ApiTraceFrame*> m_frames;
133     QVector<ApiTraceCall*> m_calls;
134
135     FrameMarker m_frameMarker;
136
137     TraceLoader *m_loader;
138     QThread     *m_loaderThread;
139     SaverThread  *m_saver;
140
141     QSet<ApiTraceCall*> m_editedCalls;
142
143     bool m_needsSaving;
144
145     QSet<ApiTraceCall*> m_errors;
146 };
147
148 #endif