]> git.cworth.org Git - apitrace/blob - gui/traceloader.h
Merge branch 'master' into d3d10
[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     void searchNext(int startFrame,
32                     const QString &str,
33                     Qt::CaseSensitivity sensitivity);
34     void searchPrev(int startFrame,
35                     const QString &str,
36                     Qt::CaseSensitivity sensitivity);
37     void findFrameStart(ApiTraceFrame *frame);
38     void findFrameEnd(ApiTraceFrame *frame);
39     void findCallIndex(int index);
40
41 signals:
42     void startedParsing();
43     void parsed(int percent);
44     void finishedParsing();
45
46     void framesLoaded(const QList<ApiTraceFrame*> &frames);
47     void frameContentsLoaded(ApiTraceFrame *frame,
48                              const QVector<ApiTraceCall*> &calls,
49                              quint64 binaryDataSize);
50
51     void searchResult(ApiTrace::SearchResult result, ApiTraceCall *call);
52     void foundFrameStart(ApiTraceFrame *frame);
53     void foundFrameEnd(ApiTraceFrame *frame);
54     void foundCallIndex(ApiTraceCall *call);
55 private:
56     struct FrameBookmark {
57         FrameBookmark()
58             : numberOfCalls(0)
59         {}
60         FrameBookmark(const Trace::ParseBookmark &s)
61             : start(s),
62               numberOfCalls(0)
63         {}
64
65         Trace::ParseBookmark start;
66         int numberOfCalls;
67     };
68     bool isCallAFrameMarker(const Trace::Call *call) const;
69     int numberOfFrames() const;
70     int numberOfCallsInFrame(int frameIdx) const;
71
72     void loadHelpFile();
73     void scanTrace();
74     void parseTrace();
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 QString &str,
84                                Qt::CaseSensitivity sensitivity);
85
86 private:
87     Trace::Parser m_parser;
88     QString m_fileName;
89     ApiTrace::FrameMarker m_frameMarker;
90
91     typedef QMap<int, FrameBookmark> FrameBookmarks;
92     FrameBookmarks m_frameBookmarks;
93     QList<ApiTraceFrame*> m_createdFrames;
94
95     QHash<QString, QUrl> m_helpHash;
96
97     QVector<ApiTraceCallSignature*> m_signatures;
98     QVector<ApiTraceEnumSignature*> m_enumSignatures;
99 };
100
101 #endif