blob: a493fd2eb1e23beea9ef62b68c9b234747130887 [file] [log] [blame]
Zack Rusinf6667d12011-03-30 11:03:37 -04001#ifndef APITRACE_H
2#define APITRACE_H
3
4#include "apitracecall.h"
5
6#include <QObject>
Zack Rusin661842d2011-04-17 01:59:16 -04007#include <QSet>
Zack Rusinf6667d12011-03-30 11:03:37 -04008
9class LoaderThread;
Zack Rusind809a062011-04-17 23:30:58 -040010class SaverThread;
Zack Rusinf6667d12011-03-30 11:03:37 -040011
12class ApiTrace : public QObject
13{
14 Q_OBJECT
15public:
16 enum FrameMarker {
17 FrameMarker_SwapBuffers,
18 FrameMarker_Flush,
19 FrameMarker_Finish,
20 FrameMarker_Clear
21 };
22 static bool isCallAFrameMarker(const ApiTraceCall *call,
23 FrameMarker marker);
24public:
25 ApiTrace();
26 ~ApiTrace();
27
28 bool isEmpty() const;
29
30 QString fileName() const;
31
32 FrameMarker frameMarker() const;
33
Zack Rusine2dfa2e2011-04-13 01:35:03 -040034 ApiTraceState defaultState() const;
35
Zack Rusinf6667d12011-03-30 11:03:37 -040036 QList<ApiTraceCall*> calls() const;
37 ApiTraceCall *callAt(int idx) const;
Zack Rusinf04cf8a2011-04-12 23:21:52 -040038 ApiTraceCall *callWithIndex(int idx) const;
Zack Rusinf6667d12011-03-30 11:03:37 -040039 int numCalls() const;
40
41 QList<ApiTraceFrame*> frames() const;
42 ApiTraceFrame *frameAt(int idx) const;
43 int numFrames() const;
44 int numCallsInFrame(int idx) const;
45
Zack Rusin661842d2011-04-17 01:59:16 -040046 void callEdited(ApiTraceCall *call);
47 void callReverted(ApiTraceCall *call);
Zack Rusinb53b1612011-04-19 01:33:58 -040048 void callError(ApiTraceCall *call);
Zack Rusin661842d2011-04-17 01:59:16 -040049
Zack Rusin0ddd2502011-04-17 02:34:45 -040050 bool edited() const;
Zack Rusin63efea82011-04-17 17:10:45 -040051 bool needsSaving() const;
Zack Rusin661842d2011-04-17 01:59:16 -040052
Zack Rusin9af5bff2011-04-18 01:05:50 -040053 bool isSaving() const;
54
Zack Rusinf6667d12011-03-30 11:03:37 -040055public slots:
56 void setFileName(const QString &name);
57 void setFrameMarker(FrameMarker marker);
Zack Rusin63efea82011-04-17 17:10:45 -040058 void save();
Zack Rusinf6667d12011-03-30 11:03:37 -040059
60signals:
Zack Rusinde4ea412011-03-30 11:30:08 -040061 void startedLoadingTrace();
62 void finishedLoadingTrace();
Zack Rusinf6667d12011-03-30 11:03:37 -040063 void invalidated();
64 void framesInvalidated();
Zack Rusin661842d2011-04-17 01:59:16 -040065 void changed(ApiTraceCall *call);
Zack Rusin9af5bff2011-04-18 01:05:50 -040066 void startedSaving();
67 void saved();
Zack Rusinf6667d12011-03-30 11:03:37 -040068
69 void framesAdded(int oldCount, int numAdded);
70 void callsAdded(int oldCount, int numAdded);
71
72private slots:
73 void addFrames(const QList<ApiTraceFrame*> &frames);
Zack Rusin9af5bff2011-04-18 01:05:50 -040074 void slotSaved();
Zack Rusinf6667d12011-03-30 11:03:37 -040075private:
76 void detectFrames();
77private:
78 QString m_fileName;
Zack Rusin63efea82011-04-17 17:10:45 -040079 QString m_tempFileName;
Zack Rusinf6667d12011-03-30 11:03:37 -040080
81 QList<ApiTraceFrame*> m_frames;
82 QList<ApiTraceCall*> m_calls;
83
84 FrameMarker m_frameMarker;
85
86 LoaderThread *m_loader;
Zack Rusind809a062011-04-17 23:30:58 -040087 SaverThread *m_saver;
Zack Rusin661842d2011-04-17 01:59:16 -040088
89 QSet<ApiTraceCall*> m_editedCalls;
Zack Rusin63efea82011-04-17 17:10:45 -040090
91 bool m_needsSaving;
Zack Rusinf6667d12011-03-30 11:03:37 -040092};
93
94#endif