blob: 791a19c8f3fc68bc5c0bd0cbc3832cc56743d020 [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);
Zack Rusin3176ebe2011-09-06 21:11:36 -040029 void loadFrame(ApiTraceFrame *frame);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040030 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);
Zack Rusin3176ebe2011-09-06 21:11:36 -040038 void frameLoaded(ApiTraceFrame *frame);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040039
40private:
41 struct FrameOffset {
42 FrameOffset()
43 : numberOfCalls(0)
44 {}
45 FrameOffset(const Trace::File::Offset &s)
46 : start(s),
47 numberOfCalls(0)
48 {}
49
50 Trace::File::Offset start;
51 int numberOfCalls;
52 unsigned callNumber;
53 };
54 bool isCallAFrameMarker(const Trace::Call *call) const;
55 int numberOfFrames() const;
56 int numberOfCallsInFrame(int frameIdx) const;
57
58 void loadHelpFile();
59 void scanTrace();
60 void parseTrace();
Zack Rusinebf971e2011-09-06 17:44:43 -040061
Zack Rusin20b1f6d2011-09-06 11:50:07 -040062private:
Zack Rusin20b1f6d2011-09-06 11:50:07 -040063 Trace::Parser m_parser;
64 QString m_fileName;
65 ApiTrace::FrameMarker m_frameMarker;
66
67 typedef QMap<int, FrameOffset> FrameOffsets;
68 FrameOffsets m_frameOffsets;
69
70 QHash<QString, QUrl> m_helpHash;
Zack Rusinebf971e2011-09-06 17:44:43 -040071
72 QVector<ApiTraceCallSignature*> m_signatures;
73 QVector<ApiTraceEnumSignature*> m_enumSignatures;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040074};
75
76#endif