4 #include "apisurface.h"
11 #include "trace_model.hpp"
17 class VariantVisitor : public trace::Visitor
20 VariantVisitor(TraceLoader *loader)
23 virtual void visit(trace::Null *);
24 virtual void visit(trace::Bool *node);
25 virtual void visit(trace::SInt *node);
26 virtual void visit(trace::UInt *node);
27 virtual void visit(trace::Float *node);
28 virtual void visit(trace::Double *node);
29 virtual void visit(trace::String *node);
30 virtual void visit(trace::Enum *e);
31 virtual void visit(trace::Bitmask *bitmask);
32 virtual void visit(trace::Struct *str);
33 virtual void visit(trace::Array *array);
34 virtual void visit(trace::Blob *blob);
35 virtual void visit(trace::Pointer *ptr);
36 virtual void visit(trace::Repr *ptr);
38 QVariant variant() const
43 TraceLoader *m_loader;
55 class ApiTraceEnumSignature
58 ApiTraceEnumSignature(const trace::EnumSig *sig);
60 QString name(signed long long value) const;
63 typedef QList<QPair<QString, signed long long> > ValueList;
70 ApiEnum(ApiTraceEnumSignature *sig=0, signed long long value = 0);
72 QString toString() const;
74 QVariant value() const;
77 ApiTraceEnumSignature *m_sig;
78 signed long long m_value;
80 Q_DECLARE_METATYPE(ApiEnum);
85 ApiPointer(unsigned long long val=0);
87 QString toString() const;
89 unsigned long long value() const;
92 unsigned long long m_value;
94 Q_DECLARE_METATYPE(ApiPointer);
99 typedef QList<QPair<QString, unsigned long long> > Signature;
101 ApiBitmask(const trace::Bitmask *bitmask = 0);
103 QString toString() const;
105 unsigned long long value() const;
106 Signature signature() const;
109 void init(const trace::Bitmask *bitmask);
112 unsigned long long m_value;
114 Q_DECLARE_METATYPE(ApiBitmask);
121 QStringList memberNames;
124 ApiStruct(const trace::Struct *s = 0);
126 QString toString(bool multiLine = false) const;
127 Signature signature() const;
128 QList<QVariant> values() const;
131 void init(const trace::Struct *bitmask);
134 QList<QVariant> m_members;
136 Q_DECLARE_METATYPE(ApiStruct);
141 ApiArray(const trace::Array *arr = 0);
142 ApiArray(const QVector<QVariant> &vals);
144 QString toString(bool multiLine = false) const;
146 QVector<QVariant> values() const;
148 void init(const trace::Array *arr);
150 QVector<QVariant> m_array;
152 Q_DECLARE_METATYPE(ApiArray);
155 QString apiVariantToString(const QVariant &variant, bool multiLine = false);
159 class ApiTraceState {
162 explicit ApiTraceState(const QVariantMap &parseJson);
164 bool isEmpty() const;
165 const QVariantMap & parameters() const;
166 const QMap<QString, QString> & shaderSources() const;
167 const QVariantMap & uniforms() const;
168 const QList<ApiTexture> & textures() const;
169 const QList<ApiFramebuffer> & framebuffers() const;
171 ApiFramebuffer colorBuffer() const;
173 QVariantMap m_parameters;
174 QMap<QString, QString> m_shaderSources;
175 QVariantMap m_uniforms;
176 QList<ApiTexture> m_textures;
177 QList<ApiFramebuffer> m_framebuffers;
179 Q_DECLARE_METATYPE(ApiTraceState);
181 class ApiTraceCallSignature
184 ApiTraceCallSignature(const QString &name,
185 const QStringList &argNames);
186 ~ApiTraceCallSignature();
192 QStringList argNames() const
197 QUrl helpUrl() const;
198 void setHelpUrl(const QUrl &url);
202 QStringList m_argNames;
218 ApiTraceEvent(Type t);
219 virtual ~ApiTraceEvent();
221 Type type() const { return (Type)m_type; }
223 virtual QStaticText staticText() const = 0;
224 virtual int numChildren() const = 0;
225 virtual int callIndex(ApiTraceCall *call) const = 0;
226 virtual ApiTraceEvent *eventAtRow(int row) const = 0;
228 QVariantMap stateParameters() const;
229 ApiTraceState *state() const;
230 void setState(ApiTraceState *state);
231 bool hasState() const
233 return m_state && !m_state->isEmpty();
238 mutable bool m_hasBinaryData;
239 mutable int m_binaryDataIndex:8;
240 ApiTraceState *m_state;
242 mutable QStaticText *m_staticText;
244 Q_DECLARE_METATYPE(ApiTraceEvent*);
246 class ApiTraceCall : public ApiTraceEvent
249 ApiTraceCall(ApiTraceCall *parentCall, TraceLoader *loader,
250 const trace::Call *tcall);
251 ApiTraceCall(ApiTraceFrame *parentFrame, TraceLoader *loader,
252 const trace::Call *tcall);
256 QString name() const;
257 QStringList argNames() const;
258 QVector<QVariant> arguments() const;
259 QVariant returnValue() const;
260 trace::CallFlags flags() const;
261 QUrl helpUrl() const;
262 void setHelpUrl(const QUrl &url);
263 ApiTraceFrame *parentFrame()const;
264 void setParentFrame(ApiTraceFrame *frame);
266 int callIndex(ApiTraceCall *call) const;
268 ApiTraceEvent *parentEvent() const;
269 ApiTraceCall *parentCall() const;
270 QVector<ApiTraceCall*> children() const;
271 ApiTraceEvent *eventAtRow(int row) const;
272 void addChild(ApiTraceCall *call);
273 void finishedAddingChildren();
275 bool hasError() const;
276 QString error() const;
277 void setError(const QString &msg);
279 QVector<QVariant> originalValues() const;
282 void setEditedValues(const QVector<QVariant> &lst);
283 QVector<QVariant> editedValues() const;
286 bool contains(const QString &str,
287 Qt::CaseSensitivity sensitivity) const;
289 ApiTrace *parentTrace() const;
291 QString toHtml() const;
292 QString searchText() const;
293 QStaticText staticText() const;
294 int numChildren() const;
295 bool hasBinaryData() const;
296 int binaryDataIndex() const;
298 QString backtrace() const;
299 void setBacktrace(QString backtrace);
301 void loadData(TraceLoader *loader,
302 const trace::Call *tcall);
305 ApiTraceCallSignature *m_signature;
306 QVector<QVariant> m_argValues;
307 QVariant m_returnValue;
308 trace::CallFlags m_flags;
309 ApiTraceFrame *m_parentFrame;
310 ApiTraceCall *m_parentCall;
311 QVector<ApiTraceCall*> m_children;
313 QVector<QVariant> m_editedValues;
319 mutable QString m_richText;
320 mutable QString m_searchText;
322 Q_DECLARE_METATYPE(ApiTraceCall*);
324 class ApiTraceFrame : public ApiTraceEvent
327 ApiTraceFrame(ApiTrace *parent=0);
331 bool isEmpty() const;
333 void setParentTrace(ApiTrace *parent);
334 ApiTrace *parentTrace() const;
336 void setNumChildren(int num);
337 int numChildren() const;
338 int numChildrenToLoad() const;
339 int numTotalCalls() const;
340 QStaticText staticText() const;
342 ApiTraceEvent *eventAtRow(int row) const;
343 int callIndex(ApiTraceCall *call) const;
344 ApiTraceCall *callWithIndex(int index) const;
345 QVector<ApiTraceCall*> calls() const;
346 void setCalls(const QVector<ApiTraceCall*> &topLevelCalls,
347 const QVector<ApiTraceCall*> &allCalls,
348 quint64 binaryDataSize);
350 ApiTraceCall *findNextCall(ApiTraceCall *from,
352 Qt::CaseSensitivity sensitivity) const;
354 ApiTraceCall *findPrevCall(ApiTraceCall *from,
356 Qt::CaseSensitivity sensitivity) const;
358 int binaryDataSize() const;
360 bool isLoaded() const;
362 void setLastCallIndex(unsigned index);
363 unsigned lastCallIndex() const;
365 void setThumbnail(const QImage & thumbnail);
366 const QImage & thumbnail() const;
369 ApiTrace *m_parentTrace;
370 quint64 m_binaryDataSize;
371 QVector<ApiTraceCall*> m_children;
372 QVector<ApiTraceCall*> m_calls;
374 unsigned m_callsToLoad;
375 unsigned m_lastCallIndex;
378 Q_DECLARE_METATYPE(ApiTraceFrame*);