blob: b36cab8471efcd6408a31829ce52606505f79f57 [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 Rusin93e4d152011-09-13 02:23:39 -040031 void findFrameStart(ApiTraceFrame *frame);
32 void findFrameEnd(ApiTraceFrame *frame);
Zack Rusinda7579b2011-09-13 17:33:05 -040033 void findCallIndex(int index);
Zack Rusinad513b32011-09-25 14:33:41 -040034 void search(const ApiTrace::SearchRequest &request);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040035
36signals:
37 void startedParsing();
Zack Rusinebf971e2011-09-06 17:44:43 -040038 void parsed(int percent);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040039 void finishedParsing();
40
41 void framesLoaded(const QList<ApiTraceFrame*> &frames);
Zack Rusin8f98c3a2011-09-11 18:21:29 -040042 void frameContentsLoaded(ApiTraceFrame *frame,
43 const QVector<ApiTraceCall*> &calls,
44 quint64 binaryDataSize);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040045
Zack Rusinad513b32011-09-25 14:33:41 -040046 void searchResult(const ApiTrace::SearchRequest &request,
47 ApiTrace::SearchResult result,
48 ApiTraceCall *call);
Zack Rusin93e4d152011-09-13 02:23:39 -040049 void foundFrameStart(ApiTraceFrame *frame);
50 void foundFrameEnd(ApiTraceFrame *frame);
Zack Rusinda7579b2011-09-13 17:33:05 -040051 void foundCallIndex(ApiTraceCall *call);
Zack Rusin20b1f6d2011-09-06 11:50:07 -040052private:
José Fonseca61e61f72011-09-11 16:53:34 +010053 struct FrameBookmark {
54 FrameBookmark()
Zack Rusin20b1f6d2011-09-06 11:50:07 -040055 : numberOfCalls(0)
56 {}
José Fonseca61e61f72011-09-11 16:53:34 +010057 FrameBookmark(const Trace::ParseBookmark &s)
Zack Rusin20b1f6d2011-09-06 11:50:07 -040058 : start(s),
59 numberOfCalls(0)
60 {}
61
José Fonseca61e61f72011-09-11 16:53:34 +010062 Trace::ParseBookmark start;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040063 int numberOfCalls;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040064 };
65 bool isCallAFrameMarker(const Trace::Call *call) const;
66 int numberOfFrames() const;
67 int numberOfCallsInFrame(int frameIdx) const;
68
69 void loadHelpFile();
70 void scanTrace();
71 void parseTrace();
Zack Rusinebf971e2011-09-06 17:44:43 -040072
Zack Rusinad513b32011-09-25 14:33:41 -040073 void searchNext(const ApiTrace::SearchRequest &request);
74 void searchPrev(const ApiTrace::SearchRequest &request);
75
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,
Zack Rusinad513b32011-09-25 14:33:41 -040083 const ApiTrace::SearchRequest &request);
Zack Rusin8f98c3a2011-09-11 18:21:29 -040084
Zack Rusin20b1f6d2011-09-06 11:50:07 -040085private:
Zack Rusin20b1f6d2011-09-06 11:50:07 -040086 Trace::Parser m_parser;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040087 ApiTrace::FrameMarker m_frameMarker;
88
José Fonseca61e61f72011-09-11 16:53:34 +010089 typedef QMap<int, FrameBookmark> FrameBookmarks;
90 FrameBookmarks m_frameBookmarks;
Zack Rusin8f98c3a2011-09-11 18:21:29 -040091 QList<ApiTraceFrame*> m_createdFrames;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040092
93 QHash<QString, QUrl> m_helpHash;
Zack Rusinebf971e2011-09-06 17:44:43 -040094
95 QVector<ApiTraceCallSignature*> m_signatures;
96 QVector<ApiTraceEnumSignature*> m_enumSignatures;
Zack Rusin20b1f6d2011-09-06 11:50:07 -040097};
98
99#endif