blob: 4b88ec605041527e2c9464e1aabbc9ee9cd484da [file] [log] [blame]
Zack Rusin20b1f6d2011-09-06 11:50:07 -04001#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
13class TraceLoader : public QObject
14{
15 Q_OBJECT
16public:
Zack Rusinebf971e2011-09-06 17:44:43 -040017 TraceLoader(QObject *parent=0);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040018 ~TraceLoader();
19
Zack Rusinebf971e2011-09-06 17:44:43 -040020
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
Zack Rusin20b1f6d2011-09-06 11:50:07 -040027public slots:
28 void loadTrace(const QString &filename);
Zack Rusin3176ebe2011-09-06 21:11:36 -040029 void loadFrame(ApiTraceFrame *frame);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040030 void setFrameMarker(ApiTrace::FrameMarker marker);
Zack Rusin8f98c3a2011-09-11 18:21:29 -040031 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);
Zack Rusin93e4d152011-09-13 02:23:39 -040037 void findFrameStart(ApiTraceFrame *frame);
38 void findFrameEnd(ApiTraceFrame *frame);
Zack Rusinda7579b2011-09-13 17:33:05 -040039 void findCallIndex(int index);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040040
41signals:
42 void startedParsing();
Zack Rusinebf971e2011-09-06 17:44:43 -040043 void parsed(int percent);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040044 void finishedParsing();
45
46 void framesLoaded(const QList<ApiTraceFrame*> &frames);
Zack Rusin8f98c3a2011-09-11 18:21:29 -040047 void frameContentsLoaded(ApiTraceFrame *frame,
48 const QVector<ApiTraceCall*> &calls,
49 quint64 binaryDataSize);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040050
Zack Rusin8f98c3a2011-09-11 18:21:29 -040051 void searchResult(ApiTrace::SearchResult result, ApiTraceCall *call);
Zack Rusin93e4d152011-09-13 02:23:39 -040052 void foundFrameStart(ApiTraceFrame *frame);
53 void foundFrameEnd(ApiTraceFrame *frame);
Zack Rusinda7579b2011-09-13 17:33:05 -040054 void foundCallIndex(ApiTraceCall *call);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040055private:
José Fonseca61e61f72011-09-11 16:53:34 +010056 struct FrameBookmark {
57 FrameBookmark()
Zack Rusin20b1f6d2011-09-06 11:50:07 -040058 : numberOfCalls(0)
59 {}
José Fonseca61e61f72011-09-11 16:53:34 +010060 FrameBookmark(const Trace::ParseBookmark &s)
Zack Rusin20b1f6d2011-09-06 11:50:07 -040061 : start(s),
62 numberOfCalls(0)
63 {}
64
José Fonseca61e61f72011-09-11 16:53:34 +010065 Trace::ParseBookmark start;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040066 int numberOfCalls;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040067 };
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();
Zack Rusinebf971e2011-09-06 17:44:43 -040075
Zack Rusin8f98c3a2011-09-11 18:21:29 -040076 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);
Zack Rusin121e3162011-09-13 01:35:12 -040081 bool searchCallsBackwards(const QList<Trace::Call*> &calls,
82 int frameIdx,
83 const QString &str,
84 Qt::CaseSensitivity sensitivity);
Zack Rusin8f98c3a2011-09-11 18:21:29 -040085
Zack Rusin20b1f6d2011-09-06 11:50:07 -040086private:
Zack Rusin20b1f6d2011-09-06 11:50:07 -040087 Trace::Parser m_parser;
88 QString m_fileName;
89 ApiTrace::FrameMarker m_frameMarker;
90
José Fonseca61e61f72011-09-11 16:53:34 +010091 typedef QMap<int, FrameBookmark> FrameBookmarks;
92 FrameBookmarks m_frameBookmarks;
Zack Rusin8f98c3a2011-09-11 18:21:29 -040093 QList<ApiTraceFrame*> m_createdFrames;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040094
95 QHash<QString, QUrl> m_helpHash;
Zack Rusinebf971e2011-09-06 17:44:43 -040096
97 QVector<ApiTraceCallSignature*> m_signatures;
98 QVector<ApiTraceEnumSignature*> m_enumSignatures;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040099};
100
101#endif