blob: d0b76fa6b5dc0c1894730a9e86b4df7ffcf8bc4d [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 Rusincc0b4912011-04-19 01:59:20 -040055 bool hasErrors() const;
56
Zack Rusinf6667d12011-03-30 11:03:37 -040057public slots:
58 void setFileName(const QString &name);
59 void setFrameMarker(FrameMarker marker);
Zack Rusin63efea82011-04-17 17:10:45 -040060 void save();
Zack Rusinf6667d12011-03-30 11:03:37 -040061
62signals:
Zack Rusinde4ea412011-03-30 11:30:08 -040063 void startedLoadingTrace();
64 void finishedLoadingTrace();
Zack Rusinf6667d12011-03-30 11:03:37 -040065 void invalidated();
66 void framesInvalidated();
Zack Rusin661842d2011-04-17 01:59:16 -040067 void changed(ApiTraceCall *call);
Zack Rusin9af5bff2011-04-18 01:05:50 -040068 void startedSaving();
69 void saved();
Zack Rusinf6667d12011-03-30 11:03:37 -040070
71 void framesAdded(int oldCount, int numAdded);
72 void callsAdded(int oldCount, int numAdded);
73
74private slots:
75 void addFrames(const QList<ApiTraceFrame*> &frames);
Zack Rusin9af5bff2011-04-18 01:05:50 -040076 void slotSaved();
Zack Rusinf6667d12011-03-30 11:03:37 -040077private:
78 void detectFrames();
79private:
80 QString m_fileName;
Zack Rusin63efea82011-04-17 17:10:45 -040081 QString m_tempFileName;
Zack Rusinf6667d12011-03-30 11:03:37 -040082
83 QList<ApiTraceFrame*> m_frames;
84 QList<ApiTraceCall*> m_calls;
85
86 FrameMarker m_frameMarker;
87
88 LoaderThread *m_loader;
Zack Rusind809a062011-04-17 23:30:58 -040089 SaverThread *m_saver;
Zack Rusin661842d2011-04-17 01:59:16 -040090
91 QSet<ApiTraceCall*> m_editedCalls;
Zack Rusin63efea82011-04-17 17:10:45 -040092
93 bool m_needsSaving;
Zack Rusincc0b4912011-04-19 01:59:20 -040094
95 QSet<ApiTraceCall*> m_errors;
Zack Rusinf6667d12011-03-30 11:03:37 -040096};
97
98#endif