]> git.cworth.org Git - apitrace/blob - gui/traceloader.h
Switch the gui to the on-demand-loader.
[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(int frameIdx);
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(int frameIdx,
39                      const QVector<ApiTraceCall*> &calls,
40                      quint64 binaryDataSize);
41
42 private:
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();
63
64 private:
65     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;
73
74     QVector<ApiTraceCallSignature*> m_signatures;
75     QVector<ApiTraceEnumSignature*> m_enumSignatures;
76 };
77
78 #endif