]> git.cworth.org Git - apitrace/blob - gui/traceloader.h
Use skiplist-based FastCallSet within trace::CallSet
[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 findFrameStart(ApiTraceFrame *frame);
31     void findFrameEnd(ApiTraceFrame *frame);
32     void findCallIndex(int index);
33     void search(const ApiTrace::SearchRequest &request);
34
35 signals:
36     void startedParsing();
37     void parsed(int percent);
38     void guessedApi(int api);
39     void finishedParsing();
40
41     void framesLoaded(const QList<ApiTraceFrame*> &frames);
42     void frameContentsLoaded(ApiTraceFrame *frame,
43                              const QVector<ApiTraceCall*> &calls,
44                              quint64 binaryDataSize);
45
46     void searchResult(const ApiTrace::SearchRequest &request,
47                       ApiTrace::SearchResult result,
48                       ApiTraceCall *call);
49     void foundFrameStart(ApiTraceFrame *frame);
50     void foundFrameEnd(ApiTraceFrame *frame);
51     void foundCallIndex(ApiTraceCall *call);
52 private:
53     struct FrameBookmark {
54         FrameBookmark()
55             : numberOfCalls(0)
56         {}
57         FrameBookmark(const trace::ParseBookmark &s)
58             : start(s),
59               numberOfCalls(0)
60         {}
61
62         trace::ParseBookmark start;
63         int numberOfCalls;
64     };
65     int numberOfFrames() const;
66     int numberOfCallsInFrame(int frameIdx) const;
67
68     void loadHelpFile();
69     void guessApi(const trace::Call *call);
70     void scanTrace();
71     void parseTrace();
72
73     void searchNext(const ApiTrace::SearchRequest &request);
74     void searchPrev(const ApiTrace::SearchRequest &request);
75
76     int callInFrame(int callIdx) const;
77     bool callContains(trace::Call *call,
78                       const QString &str,
79                       Qt::CaseSensitivity sensitivity);
80      QVector<ApiTraceCall*> fetchFrameContents(ApiTraceFrame *frame);
81      bool searchCallsBackwards(const QList<trace::Call*> &calls,
82                                int frameIdx,
83                                const ApiTrace::SearchRequest &request);
84
85 private:
86     trace::Parser m_parser;
87
88     typedef QMap<int, FrameBookmark> FrameBookmarks;
89     FrameBookmarks m_frameBookmarks;
90     QList<ApiTraceFrame*> m_createdFrames;
91
92     QHash<QString, QUrl> m_helpHash;
93
94     QVector<ApiTraceCallSignature*> m_signatures;
95     QVector<ApiTraceEnumSignature*> m_enumSignatures;
96 };
97
98 #endif