X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.h;h=2833f60cddf90d5063cf7b40d8f951d5b1e0181c;hb=ee659c84695e9f94b1f6a5f8be203dc0012ca685;hp=8da0320484a455560c430103885a4b43df298bde;hpb=3176ebeffe825a5f998b13755c09cfa312b0e8d3;p=apitrace diff --git a/gui/apitrace.h b/gui/apitrace.h index 8da0320..2833f60 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -20,6 +20,37 @@ public: FrameMarker_Finish, FrameMarker_Clear }; + enum SearchResult { + SearchResult_NotFound, + SearchResult_Found, + SearchResult_Wrapped + }; + struct SearchRequest { + enum Direction { + Next, + Prev + }; + SearchRequest() + : direction(Next) + {} + SearchRequest(Direction dir, + ApiTraceFrame *f, + ApiTraceCall *call, + QString str, + Qt::CaseSensitivity caseSens) + : direction(dir), + frame(f), + from(call), + text(str), + cs(caseSens) + {} + Direction direction; + ApiTraceFrame *frame; + ApiTraceCall *from; + QString text; + Qt::CaseSensitivity cs; + }; + static bool isCallAFrameMarker(const ApiTraceCall *call, FrameMarker marker); public: @@ -34,9 +65,7 @@ public: ApiTraceState defaultState() const; - QVector calls() const; ApiTraceCall *callWithIndex(int idx) const; - int numCalls() const; QList frames() const; ApiTraceFrame *frameAt(int idx) const; @@ -56,9 +85,21 @@ 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); @@ -71,23 +112,43 @@ signals: void changed(ApiTraceCall *call); void startedSaving(); void saved(); - void frameLoaded(ApiTraceFrame *frame); + void findResult(const ApiTrace::SearchRequest &request, + 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 loaderSearch(const ApiTrace::SearchRequest &request); + 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(const ApiTrace::SearchRequest &request, + ApiTrace::SearchResult result, + ApiTraceCall *call); + private: - void detectFrames(); + int callInFrame(int callIdx) const; + bool isFrameLoading(ApiTraceFrame *frame) const; private: QString m_fileName; QString m_tempFileName; QList m_frames; - QVector m_calls; FrameMarker m_frameMarker; @@ -100,6 +161,8 @@ private: bool m_needsSaving; QSet m_errors; + QList< QPair > m_queuedErrors; + QSet m_loadingFrames; }; #endif