X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.h;h=04e295cd7e39470476990d834b5085be7bf77997;hb=940cdb8b143455fe2fc002ffd50f5e2ffcaf1260;hp=c400debff6706afeb60f5bef5537790e5bb289b7;hpb=f6667d1331849a8534ead1c653ab4a1aeaeddcc8;p=apitrace diff --git a/gui/apitrace.h b/gui/apitrace.h index c400deb..04e295c 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -3,22 +3,50 @@ #include "apitracecall.h" +#include "trace_api.hpp" + #include +#include -class LoaderThread; +class TraceLoader; +class SaverThread; +class QThread; class ApiTrace : public QObject { Q_OBJECT public: - enum FrameMarker { - FrameMarker_SwapBuffers, - FrameMarker_Flush, - 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: ApiTrace(); ~ApiTrace(); @@ -27,41 +55,109 @@ public: QString fileName() const; - FrameMarker frameMarker() const; + ApiTraceState defaultState() const; - QList calls() const; - ApiTraceCall *callAt(int idx) const; - int numCalls() const; + ApiTraceCall *callWithIndex(int idx) const; - QList frames() const; + const QList & frames() const; ApiTraceFrame *frameAt(int idx) const; int numFrames() const; int numCallsInFrame(int idx) const; + void callEdited(ApiTraceCall *call); + void callReverted(ApiTraceCall *call); + void callError(ApiTraceCall *call); + + bool edited() const; + bool needsSaving() const; + + bool isSaving() const; + + bool hasErrors() const; + + trace::API api() const; + 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); + + void bindThumbnailsToFrames(const QList &thumbnails); signals: + void loadTrace(const QString &name); + void requestFrame(ApiTraceFrame *frame); + void startedLoadingTrace(); + void loaded(int percent); + void finishedLoadingTrace(); void invalidated(); void framesInvalidated(); + void changed(ApiTraceEvent *event); + void startedSaving(); + void saved(); + void findResult(const ApiTrace::SearchRequest &request, + ApiTrace::SearchResult result, + ApiTraceCall *call); + + void beginAddingFrames(int oldCount, int numAdded); + void endAddingFrames(); + void beginLoadingFrame(ApiTraceFrame *frame, int numAdded); + void endLoadingFrame(ApiTraceFrame *frame); + void foundFrameStart(ApiTraceFrame *frame); + void foundFrameEnd(ApiTraceFrame *frame); + void foundCallIndex(ApiTraceCall *call); - void framesAdded(int oldCount, int numAdded); - void callsAdded(int oldCount, int numAdded); +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 guessedApi(int api); + 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; - QList m_calls; + trace::API m_api; + + TraceLoader *m_loader; + QThread *m_loaderThread; + SaverThread *m_saver; + + QSet m_editedCalls; - FrameMarker m_frameMarker; + bool m_needsSaving; - LoaderThread *m_loader; + QSet m_errors; + QList< QPair > m_queuedErrors; + QSet m_loadingFrames; }; #endif