]> git.cworth.org Git - apitrace/blob - gui/traceloader.h
First working on demand loading!
[apitrace] / gui / traceloader.h
1 #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
13 class TraceLoader : public QObject
14 {
15     Q_OBJECT
16 public:
17     TraceLoader(QObject *parent=0);
18     ~TraceLoader();
19
20
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
27 public slots:
28     void loadTrace(const QString &filename);
29     void loadFrame(ApiTraceFrame *frame);
30     void setFrameMarker(ApiTrace::FrameMarker marker);
31
32 signals:
33     void startedParsing();
34     void parsed(int percent);
35     void finishedParsing();
36
37     void framesLoaded(const QList<ApiTraceFrame*> &frames);
38     void frameLoaded(ApiTraceFrame *frame);
39
40 private:
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();
61
62 private:
63     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;
71
72     QVector<ApiTraceCallSignature*> m_signatures;
73     QVector<ApiTraceEnumSignature*> m_enumSignatures;
74 };
75
76 #endif