X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitracecall.h;h=15bc627134edb082adf705d8050e2a9a8debb911;hb=d9d9d22837705de6a2c42ad3f9b23223a2b98fe0;hp=b9e23121181f26938b61204bf206e411cdd62ed7;hpb=661842de4c97a5d1660b7148022fdbd6fd473827;p=apitrace diff --git a/gui/apitracecall.h b/gui/apitracecall.h index b9e2312..15bc627 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -12,40 +12,84 @@ class ApiTrace; +class TraceLoader; -class VariantVisitor : public Trace::Visitor +class VariantVisitor : public trace::Visitor { public: - virtual void visit(Trace::Null *); - virtual void visit(Trace::Bool *node); - virtual void visit(Trace::SInt *node); - virtual void visit(Trace::UInt *node); - virtual void visit(Trace::Float *node); - virtual void visit(Trace::String *node); - virtual void visit(Trace::Enum *e); - virtual void visit(Trace::Bitmask *bitmask); - virtual void visit(Trace::Struct *str); - virtual void visit(Trace::Array *array); - virtual void visit(Trace::Blob *blob); - virtual void visit(Trace::Pointer *ptr); + VariantVisitor(TraceLoader *loader) + : m_loader(loader) + {} + virtual void visit(trace::Null *); + virtual void visit(trace::Bool *node); + virtual void visit(trace::SInt *node); + virtual void visit(trace::UInt *node); + virtual void visit(trace::Float *node); + virtual void visit(trace::Double *node); + virtual void visit(trace::String *node); + virtual void visit(trace::Enum *e); + virtual void visit(trace::Bitmask *bitmask); + virtual void visit(trace::Struct *str); + virtual void visit(trace::Array *array); + virtual void visit(trace::Blob *blob); + virtual void visit(trace::Pointer *ptr); + virtual void visit(trace::Repr *ptr); QVariant variant() const { return m_variant; } private: + TraceLoader *m_loader; QVariant m_variant; }; +struct ApiTraceError +{ + int callIndex; + QString type; + QString message; +}; + +class ApiTraceEnumSignature +{ +public: + ApiTraceEnumSignature(const trace::EnumSig *sig); + + QString name(signed long long value) const; + +private: + typedef QList > ValueList; + ValueList m_names; +}; + +class ApiEnum +{ +public: + ApiEnum(ApiTraceEnumSignature *sig=0, signed long long value = 0); + + QString toString() const; + + QVariant value() const; + QString name() const; +private: + ApiTraceEnumSignature *m_sig; + signed long long m_value; +}; +Q_DECLARE_METATYPE(ApiEnum); + class ApiPointer { public: - ApiPointer(int val=0); + ApiPointer(unsigned long long val=0); QString toString() const; + + unsigned long long value() const; + private: - int m_value; + unsigned long long m_value; }; Q_DECLARE_METATYPE(ApiPointer); @@ -54,12 +98,15 @@ class ApiBitmask public: typedef QList > Signature; - ApiBitmask(const Trace::Bitmask *bitmask = 0); + ApiBitmask(const trace::Bitmask *bitmask = 0); QString toString() const; + unsigned long long value() const; + Signature signature() const; + private: - void init(const Trace::Bitmask *bitmask); + void init(const trace::Bitmask *bitmask); private: Signature m_sig; unsigned long long m_value; @@ -74,12 +121,14 @@ public: QStringList memberNames; }; - ApiStruct(const Trace::Struct *s = 0); + ApiStruct(const trace::Struct *s = 0); - QString toString() const; + QString toString(bool multiLine = false) const; + Signature signature() const; + QList values() const; private: - void init(const Trace::Struct *bitmask); + void init(const trace::Struct *bitmask); private: Signature m_sig; QList m_members; @@ -89,21 +138,21 @@ Q_DECLARE_METATYPE(ApiStruct); class ApiArray { public: - ApiArray(const Trace::Array *arr = 0); - ApiArray(const QList &vals); + ApiArray(const trace::Array *arr = 0); + ApiArray(const QVector &vals); - QString toString() const; + QString toString(bool multiLine = false) const; - QList values() const; + QVector values() const; private: - void init(const Trace::Array *arr); + void init(const trace::Array *arr); private: - QList m_array; + QVector m_array; }; Q_DECLARE_METATYPE(ApiArray); -QString apiVariantToString(const QVariant &variant); +QString apiVariantToString(const QVariant &variant, bool multiLine = false); class ApiTraceFrame; @@ -113,44 +162,82 @@ public: explicit ApiTraceState(const QVariantMap &parseJson); bool isEmpty() const; - QVariantMap parameters() const; - QMap shaderSources() const; - QList textures() const; - QList framebuffers() const; + const QVariantMap & parameters() const; + const QMap & shaderSources() const; + const QVariantMap & uniforms() const; + const QList & textures() const; + const QList & framebuffers() const; + ApiFramebuffer colorBuffer() const; private: QVariantMap m_parameters; QMap m_shaderSources; + QVariantMap m_uniforms; QList m_textures; QList m_framebuffers; }; Q_DECLARE_METATYPE(ApiTraceState); +class ApiTraceCallSignature +{ +public: + ApiTraceCallSignature(const QString &name, + const QStringList &argNames); + ~ApiTraceCallSignature(); + + QString name() const + { + return m_name; + } + QStringList argNames() const + { + return m_argNames; + } + + QUrl helpUrl() const; + void setHelpUrl(const QUrl &url); + +private: + QString m_name; + QStringList m_argNames; + QUrl m_helpUrl; +}; + +class ApiTraceCall; + class ApiTraceEvent { public: enum Type { - None, - Call, - Frame + None = 0, + Call = 1 << 0, + Frame = 1 << 1 }; public: ApiTraceEvent(); ApiTraceEvent(Type t); virtual ~ApiTraceEvent(); - Type type() const { return m_type; } + Type type() const { return (Type)m_type; } virtual QStaticText staticText() const = 0; virtual int numChildren() const = 0; + virtual int callIndex(ApiTraceCall *call) const = 0; + virtual ApiTraceEvent *eventAtRow(int row) const = 0; QVariantMap stateParameters() const; - ApiTraceState state() const; - void setState(const ApiTraceState &state); + ApiTraceState *state() const; + void setState(ApiTraceState *state); + bool hasState() const + { + return m_state && !m_state->isEmpty(); + } protected: - Type m_type; - ApiTraceState m_state; + int m_type : 4; + mutable bool m_hasBinaryData; + mutable int m_binaryDataIndex:8; + ApiTraceState *m_state; mutable QStaticText *m_staticText; }; @@ -159,65 +246,134 @@ Q_DECLARE_METATYPE(ApiTraceEvent*); class ApiTraceCall : public ApiTraceEvent { public: - ApiTraceCall(); - ApiTraceCall(const Trace::Call *tcall); + ApiTraceCall(ApiTraceCall *parentCall, TraceLoader *loader, + const trace::Call *tcall); + ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader, + const trace::Call *tcall); ~ApiTraceCall(); int index() const; QString name() const; QStringList argNames() const; - QVariantList arguments() const; + QVector arguments() const; QVariant returnValue() const; + trace::CallFlags flags() const; QUrl helpUrl() const; void setHelpUrl(const QUrl &url); ApiTraceFrame *parentFrame()const; void setParentFrame(ApiTraceFrame *frame); - QVariantList originalValues() const; + int callIndex(ApiTraceCall *call) const; + + ApiTraceEvent *parentEvent() const; + ApiTraceCall *parentCall() const; + QVector children() const; + ApiTraceEvent *eventAtRow(int row) const; + void addChild(ApiTraceCall *call); + void finishedAddingChildren(); + + bool hasError() const; + QString error() const; + void setError(const QString &msg); + + QVector originalValues() const; bool edited() const; - void setEditedValues(const QVariantList &lst); - QVariantList editedValues() const; + void setEditedValues(const QVector &lst); + QVector editedValues() const; void revert(); + bool contains(const QString &str, + Qt::CaseSensitivity sensitivity) const; + + ApiTrace *parentTrace() const; + QString toHtml() const; - QString filterText() const; + QString searchText() const; QStaticText staticText() const; int numChildren() const; bool hasBinaryData() const; int binaryDataIndex() const; + + QString backtrace() const; + void setBacktrace(QString backtrace); +private: + void loadData(TraceLoader *loader, + const trace::Call *tcall); private: int m_index; - QString m_name; - QStringList m_argNames; - QVariantList m_argValues; + ApiTraceCallSignature *m_signature; + QVector m_argValues; QVariant m_returnValue; + trace::CallFlags m_flags; ApiTraceFrame *m_parentFrame; - QUrl m_helpUrl; + ApiTraceCall *m_parentCall; + QVector m_children; - QVariantList m_editedValues; + QVector m_editedValues; + + QString m_error; + + QString m_backtrace; mutable QString m_richText; - mutable QString m_filterText; - mutable bool m_hasBinaryData; - mutable int m_binaryDataIndex; + mutable QString m_searchText; }; Q_DECLARE_METATYPE(ApiTraceCall*); class ApiTraceFrame : public ApiTraceEvent { public: - ApiTraceFrame(); + ApiTraceFrame(ApiTrace *parent=0); + ~ApiTraceFrame(); int number; - QList calls; + bool isEmpty() const; + + void setParentTrace(ApiTrace *parent); ApiTrace *parentTrace() const; - void setParentTrace(ApiTrace *trace); + void setNumChildren(int num); int numChildren() const; + int numChildrenToLoad() const; + int numTotalCalls() const; QStaticText staticText() const; + + ApiTraceEvent *eventAtRow(int row) const; + int callIndex(ApiTraceCall *call) const; + ApiTraceCall *callWithIndex(int index) const; + QVector calls() const; + void setCalls(const QVector &topLevelCalls, + const QVector &allCalls, + quint64 binaryDataSize); + + ApiTraceCall *findNextCall(ApiTraceCall *from, + const QString &str, + Qt::CaseSensitivity sensitivity) const; + + ApiTraceCall *findPrevCall(ApiTraceCall *from, + const QString &str, + Qt::CaseSensitivity sensitivity) const; + + int binaryDataSize() const; + + bool isLoaded() const; + + void setLastCallIndex(unsigned index); + unsigned lastCallIndex() const; + + void setThumbnail(const QImage & thumbnail); + const QImage & thumbnail() const; + private: ApiTrace *m_parentTrace; + quint64 m_binaryDataSize; + QVector m_children; + QVector m_calls; + bool m_loaded; + unsigned m_callsToLoad; + unsigned m_lastCallIndex; + QImage m_thumbnail; }; Q_DECLARE_METATYPE(ApiTraceFrame*);