]> git.cworth.org Git - apitrace/blob - gui/traceloader.h
Implement an incremental on demand loader for the gui.
[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(ApiTrace *parent);
18     ~TraceLoader();
19
20 public slots:
21     void loadTrace(const QString &filename);
22     void loadFrame(int frameIdx);
23     void setFrameMarker(ApiTrace::FrameMarker marker);
24
25 signals:
26     void startedParsing();
27     void parsed(float percent);
28     void finishedParsing();
29
30     void framesLoaded(const QList<ApiTraceFrame*> &frames);
31     void frameLoaded(int frameIdx,
32                      const QVector<ApiTraceCall*> &calls,
33                      quint64 binaryDataSize);
34
35 private:
36     struct FrameOffset {
37         FrameOffset()
38             : numberOfCalls(0)
39         {}
40         FrameOffset(const Trace::File::Offset &s)
41             : start(s),
42               numberOfCalls(0)
43         {}
44
45         Trace::File::Offset start;
46         int numberOfCalls;
47         unsigned callNumber;
48     };
49     bool isCallAFrameMarker(const Trace::Call *call) const;
50     int numberOfFrames() const;
51     int numberOfCallsInFrame(int frameIdx) const;
52
53     void loadHelpFile();
54     void scanTrace();
55     void parseTrace();
56 private:
57     ApiTrace *m_trace;
58     Trace::Parser m_parser;
59     QString m_fileName;
60     ApiTrace::FrameMarker m_frameMarker;
61
62     typedef QMap<int, FrameOffset> FrameOffsets;
63     FrameOffsets m_frameOffsets;
64
65     QHash<QString, QUrl> m_helpHash;
66 };
67
68 #endif