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