blob: 32c7f1669e65883371a03de52ecec660610893cc [file] [log] [blame]
Zack Rusin20b1f6d2011-09-06 11:50:07 -04001#ifndef TRACELOADER_H
2#define TRACELOADER_H
3
4
5#include "apitrace.h"
6#include "trace_file.hpp"
7#include "trace_parser.hpp"
8
9#include <QObject>
10#include <QList>
11#include <QMap>
12
13class TraceLoader : public QObject
14{
15 Q_OBJECT
16public:
Zack Rusinebf971e2011-09-06 17:44:43 -040017 TraceLoader(QObject *parent=0);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040018 ~TraceLoader();
19
Zack Rusinebf971e2011-09-06 17:44:43 -040020
21 ApiTraceCallSignature *signature(unsigned id);
22 void addSignature(unsigned id, ApiTraceCallSignature *signature);
23
24 ApiTraceEnumSignature *enumSignature(unsigned id);
25 void addEnumSignature(unsigned id, ApiTraceEnumSignature *signature);
26
Zack Rusin20b1f6d2011-09-06 11:50:07 -040027public slots:
28 void loadTrace(const QString &filename);
29 void loadFrame(int frameIdx);
30 void setFrameMarker(ApiTrace::FrameMarker marker);
31
32signals:
33 void startedParsing();
Zack Rusinebf971e2011-09-06 17:44:43 -040034 void parsed(int percent);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040035 void finishedParsing();
36
37 void framesLoaded(const QList<ApiTraceFrame*> &frames);
38 void frameLoaded(int frameIdx,
39 const QVector<ApiTraceCall*> &calls,
40 quint64 binaryDataSize);
41
42private:
43 struct FrameOffset {
44 FrameOffset()
45 : numberOfCalls(0)
46 {}
47 FrameOffset(const Trace::File::Offset &s)
48 : start(s),
49 numberOfCalls(0)
50 {}
51
52 Trace::File::Offset start;
53 int numberOfCalls;
54 unsigned callNumber;
55 };
56 bool isCallAFrameMarker(const Trace::Call *call) const;
57 int numberOfFrames() const;
58 int numberOfCallsInFrame(int frameIdx) const;
59
60 void loadHelpFile();
61 void scanTrace();
62 void parseTrace();
Zack Rusinebf971e2011-09-06 17:44:43 -040063
Zack Rusin20b1f6d2011-09-06 11:50:07 -040064private:
Zack Rusin20b1f6d2011-09-06 11:50:07 -040065 Trace::Parser m_parser;
66 QString m_fileName;
67 ApiTrace::FrameMarker m_frameMarker;
68
69 typedef QMap<int, FrameOffset> FrameOffsets;
70 FrameOffsets m_frameOffsets;
71
72 QHash<QString, QUrl> m_helpHash;
Zack Rusinebf971e2011-09-06 17:44:43 -040073
74 QVector<ApiTraceCallSignature*> m_signatures;
75 QVector<ApiTraceEnumSignature*> m_enumSignatures;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040076};
77
78#endif