blob: 32e24084b26802545fb1dbe800d788239df5231f [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);
48
Zack Rusin0ddd2502011-04-17 02:34:45 -040049 bool edited() const;
Zack Rusin63efea82011-04-17 17:10:45 -040050 bool needsSaving() const;
Zack Rusin661842d2011-04-17 01:59:16 -040051
Zack Rusin9af5bff2011-04-18 01:05:50 -040052 bool isSaving() const;
53
Zack Rusinf6667d12011-03-30 11:03:37 -040054public slots:
55 void setFileName(const QString &name);
56 void setFrameMarker(FrameMarker marker);
Zack Rusin63efea82011-04-17 17:10:45 -040057 void save();
Zack Rusinf6667d12011-03-30 11:03:37 -040058
59signals:
Zack Rusinde4ea412011-03-30 11:30:08 -040060 void startedLoadingTrace();
61 void finishedLoadingTrace();
Zack Rusinf6667d12011-03-30 11:03:37 -040062 void invalidated();
63 void framesInvalidated();
Zack Rusin661842d2011-04-17 01:59:16 -040064 void changed(ApiTraceCall *call);
Zack Rusin9af5bff2011-04-18 01:05:50 -040065 void startedSaving();
66 void saved();
Zack Rusinf6667d12011-03-30 11:03:37 -040067
68 void framesAdded(int oldCount, int numAdded);
69 void callsAdded(int oldCount, int numAdded);
70
71private slots:
72 void addFrames(const QList<ApiTraceFrame*> &frames);
Zack Rusin9af5bff2011-04-18 01:05:50 -040073 void slotSaved();
Zack Rusinf6667d12011-03-30 11:03:37 -040074private:
75 void detectFrames();
76private:
77 QString m_fileName;
Zack Rusin63efea82011-04-17 17:10:45 -040078 QString m_tempFileName;
Zack Rusinf6667d12011-03-30 11:03:37 -040079
80 QList<ApiTraceFrame*> m_frames;
81 QList<ApiTraceCall*> m_calls;
82
83 FrameMarker m_frameMarker;
84
85 LoaderThread *m_loader;
Zack Rusind809a062011-04-17 23:30:58 -040086 SaverThread *m_saver;
Zack Rusin661842d2011-04-17 01:59:16 -040087
88 QSet<ApiTraceCall*> m_editedCalls;
Zack Rusin63efea82011-04-17 17:10:45 -040089
90 bool m_needsSaving;
Zack Rusinf6667d12011-03-30 11:03:37 -040091};
92
93#endif