blob: d01e7a0cfd81f3770d4157823eca0de538e7495c [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
Zack Rusinebf971e2011-09-06 17:44:43 -04009class TraceLoader;
Zack Rusind809a062011-04-17 23:30:58 -040010class SaverThread;
Zack Rusinebf971e2011-09-06 17:44:43 -040011class QThread;
Zack Rusinf6667d12011-03-30 11:03:37 -040012
13class ApiTrace : public QObject
14{
15 Q_OBJECT
16public:
17 enum FrameMarker {
18 FrameMarker_SwapBuffers,
19 FrameMarker_Flush,
20 FrameMarker_Finish,
21 FrameMarker_Clear
22 };
23 static bool isCallAFrameMarker(const ApiTraceCall *call,
24 FrameMarker marker);
25public:
26 ApiTrace();
27 ~ApiTrace();
28
29 bool isEmpty() const;
30
31 QString fileName() const;
32
33 FrameMarker frameMarker() const;
34
Zack Rusine2dfa2e2011-04-13 01:35:03 -040035 ApiTraceState defaultState() const;
36
Zack Rusin4d0ef5d2011-08-28 22:05:31 -040037 QVector<ApiTraceCall*> calls() 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 Rusin3176ebe2011-09-06 21:11:36 -040061 void loadFrame(ApiTraceFrame *frame);
Zack Rusinf6667d12011-03-30 11:03:37 -040062
63signals:
Zack Rusinebf971e2011-09-06 17:44:43 -040064 void loadTrace(const QString &name);
Zack Rusin3176ebe2011-09-06 21:11:36 -040065 void requestFrame(ApiTraceFrame *frame);
Zack Rusinde4ea412011-03-30 11:30:08 -040066 void startedLoadingTrace();
Zack Rusinebf971e2011-09-06 17:44:43 -040067 void loaded(int percent);
Zack Rusinde4ea412011-03-30 11:30:08 -040068 void finishedLoadingTrace();
Zack Rusinf6667d12011-03-30 11:03:37 -040069 void invalidated();
70 void framesInvalidated();
Zack Rusin661842d2011-04-17 01:59:16 -040071 void changed(ApiTraceCall *call);
Zack Rusin9af5bff2011-04-18 01:05:50 -040072 void startedSaving();
73 void saved();
Zack Rusinf6667d12011-03-30 11:03:37 -040074
Zack Rusinb56e03d2011-04-20 23:58:52 -040075 void beginAddingFrames(int oldCount, int numAdded);
76 void endAddingFrames();
Zack Rusinf6667d12011-03-30 11:03:37 -040077 void callsAdded(int oldCount, int numAdded);
Zack Rusinf682e192011-09-07 01:36:41 -040078 void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
79 void endLoadingFrame(ApiTraceFrame *frame);
Zack Rusinf6667d12011-03-30 11:03:37 -040080
81private slots:
82 void addFrames(const QList<ApiTraceFrame*> &frames);
Zack Rusin9af5bff2011-04-18 01:05:50 -040083 void slotSaved();
Zack Rusinf682e192011-09-07 01:36:41 -040084 void finishedParsing();
85 void frameLoadFinished(ApiTraceFrame *frame);
86
Zack Rusinf6667d12011-03-30 11:03:37 -040087private:
88 void detectFrames();
89private:
90 QString m_fileName;
Zack Rusin63efea82011-04-17 17:10:45 -040091 QString m_tempFileName;
Zack Rusinf6667d12011-03-30 11:03:37 -040092
93 QList<ApiTraceFrame*> m_frames;
Zack Rusin4d0ef5d2011-08-28 22:05:31 -040094 QVector<ApiTraceCall*> m_calls;
Zack Rusinf6667d12011-03-30 11:03:37 -040095
96 FrameMarker m_frameMarker;
97
Zack Rusinebf971e2011-09-06 17:44:43 -040098 TraceLoader *m_loader;
99 QThread *m_loaderThread;
Zack Rusind809a062011-04-17 23:30:58 -0400100 SaverThread *m_saver;
Zack Rusin661842d2011-04-17 01:59:16 -0400101
102 QSet<ApiTraceCall*> m_editedCalls;
Zack Rusin63efea82011-04-17 17:10:45 -0400103
104 bool m_needsSaving;
Zack Rusincc0b4912011-04-19 01:59:20 -0400105
106 QSet<ApiTraceCall*> m_errors;
Zack Rusinf6667d12011-03-30 11:03:37 -0400107};
108
109#endif