X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.h;h=b73acd6fd2d08c341b16dd8c168aa2c3db955246;hb=daf82af9d5f270c87434cc1142f32a6407703781;hp=e2c1451e733ff55d22cf47d600530fbb164a9efe;hpb=35c2793ac758997a0a1c2e558d384ab94754987d;p=apitrace diff --git a/gui/apitrace.h b/gui/apitrace.h index e2c1451..b73acd6 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -6,8 +6,9 @@ #include #include -class LoaderThread; +class TraceLoader; class SaverThread; +class QThread; class ApiTrace : public QObject { @@ -19,6 +20,12 @@ public: FrameMarker_Finish, FrameMarker_Clear }; + enum SearchResult { + SearchResult_NotFound, + SearchResult_Found, + SearchResult_Wrapped + }; + static bool isCallAFrameMarker(const ApiTraceCall *call, FrameMarker marker); public: @@ -33,17 +40,7 @@ public: ApiTraceState defaultState() const; - ApiTraceCallSignature *signature(unsigned id); - void addSignature(unsigned id, ApiTraceCallSignature *signature); - - ApiTraceEnumSignature *enumSignature(unsigned id); - void addEnumSignature(unsigned id, ApiTraceEnumSignature *signature); - - - QList calls() const; - ApiTraceCall *callAt(int idx) const; ApiTraceCall *callWithIndex(int idx) const; - int numCalls() const; QList frames() const; ApiTraceFrame *frameAt(int idx) const; @@ -63,37 +60,77 @@ public: public slots: void setFileName(const QString &name); - void setFrameMarker(FrameMarker marker); void save(); + void loadFrame(ApiTraceFrame *frame); + void findNext(ApiTraceFrame *frame, + ApiTraceCall *call, + const QString &str, + Qt::CaseSensitivity sensitivity); + void findPrev(ApiTraceFrame *frame, + ApiTraceCall *call, + const QString &str, + Qt::CaseSensitivity sensitivity); + void findFrameStart(ApiTraceFrame *frame); + void findFrameEnd(ApiTraceFrame *frame); + void findCallIndex(int index); + void setCallError(const ApiTraceError &error); + signals: + void loadTrace(const QString &name); + void requestFrame(ApiTraceFrame *frame); void startedLoadingTrace(); + void loaded(int percent); void finishedLoadingTrace(); void invalidated(); void framesInvalidated(); void changed(ApiTraceCall *call); void startedSaving(); void saved(); + void findResult(ApiTrace::SearchResult result, + ApiTraceCall *call); void beginAddingFrames(int oldCount, int numAdded); void endAddingFrames(); - void callsAdded(int oldCount, int numAdded); + void beginLoadingFrame(ApiTraceFrame *frame, int numAdded); + void endLoadingFrame(ApiTraceFrame *frame); + void foundFrameStart(ApiTraceFrame *frame); + void foundFrameEnd(ApiTraceFrame *frame); + void foundCallIndex(ApiTraceCall *call); + +signals: + void loaderSearchNext(int startFrame, + const QString &str, + Qt::CaseSensitivity sensitivity); + void loaderSearchPrev(int startFrame, + const QString &str, + Qt::CaseSensitivity sensitivity); + void loaderFindFrameStart(ApiTraceFrame *frame); + void loaderFindFrameEnd(ApiTraceFrame *frame); + void loaderFindCallIndex(int index); private slots: void addFrames(const QList &frames); void slotSaved(); + void finishedParsing(); + void loaderFrameLoaded(ApiTraceFrame *frame, + const QVector &calls, + quint64 binaryDataSize); + void loaderSearchResult(ApiTrace::SearchResult result, + ApiTraceCall *call); + private: - void detectFrames(); + int callInFrame(int callIdx) const; private: QString m_fileName; QString m_tempFileName; QList m_frames; - QList m_calls; FrameMarker m_frameMarker; - LoaderThread *m_loader; + TraceLoader *m_loader; + QThread *m_loaderThread; SaverThread *m_saver; QSet m_editedCalls; @@ -101,8 +138,7 @@ private: bool m_needsSaving; QSet m_errors; - QVector m_signatures; - QVector m_enumSignatures; + QList< QPair > m_queuedErrors; }; #endif