X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.h;h=060f34abea202a73654504ee4cea5bb163bfac2b;hb=9d50fbb84f9b3086aa8e985e32534961336563b2;hp=51abe8b9076e7568d667b05ac06901d84288d828;hpb=661842de4c97a5d1660b7148022fdbd6fd473827;p=apitrace diff --git a/gui/apitrace.h b/gui/apitrace.h index 51abe8b..060f34a 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -6,7 +6,9 @@ #include #include -class LoaderThread; +class TraceLoader; +class SaverThread; +class QThread; class ApiTrace : public QObject { @@ -18,6 +20,12 @@ public: FrameMarker_Finish, FrameMarker_Clear }; + enum SearchResult { + SearchNotFound, + SearchFound, + SearchWrapped + }; + static bool isCallAFrameMarker(const ApiTraceCall *call, FrameMarker marker); public: @@ -32,10 +40,7 @@ public: ApiTraceState defaultState() const; - QList calls() const; - ApiTraceCall *callAt(int idx) const; ApiTraceCall *callWithIndex(int idx) const; - int numCalls() const; QList frames() const; ApiTraceFrame *frameAt(int idx) const; @@ -44,38 +49,98 @@ public: void callEdited(ApiTraceCall *call); void callReverted(ApiTraceCall *call); + void callError(ApiTraceCall *call); + + bool edited() const; + bool needsSaving() const; - bool isEdited() const; + bool isSaving() const; + + bool hasErrors() 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); + 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 framesAdded(int oldCount, int numAdded); + 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; + QVector m_calls; FrameMarker m_frameMarker; - LoaderThread *m_loader; + TraceLoader *m_loader; + QThread *m_loaderThread; + SaverThread *m_saver; QSet m_editedCalls; + + bool m_needsSaving; + + QSet m_errors; }; #endif