]> git.cworth.org Git - apitrace/blob - gui/apitracecall.h
Reduce the memory usage by ~2gb on a 2.7 million calls trace
[apitrace] / gui / apitracecall.h
1 #ifndef APITRACECALL_H
2 #define APITRACECALL_H
3
4 #include "apisurface.h"
5
6 #include <QStaticText>
7 #include <QStringList>
8 #include <QUrl>
9 #include <QVariant>
10
11 #include "trace_model.hpp"
12
13
14 class VariantVisitor : public Trace::Visitor
15 {
16 public:
17     virtual void visit(Trace::Null *);
18     virtual void visit(Trace::Bool *node);
19     virtual void visit(Trace::SInt *node);
20     virtual void visit(Trace::UInt *node);
21     virtual void visit(Trace::Float *node);
22     virtual void visit(Trace::String *node);
23     virtual void visit(Trace::Enum *e);
24     virtual void visit(Trace::Bitmask *bitmask);
25     virtual void visit(Trace::Struct *str);
26     virtual void visit(Trace::Array *array);
27     virtual void visit(Trace::Blob *blob);
28     virtual void visit(Trace::Pointer *ptr);
29
30     QVariant variant() const
31     {
32         return m_variant;
33     }
34 private:
35     QVariant m_variant;
36 };
37
38
39 class ApiPointer
40 {
41 public:
42     ApiPointer(int val=0);
43
44     QString toString() const;
45 private:
46     int m_value;
47 };
48 Q_DECLARE_METATYPE(ApiPointer);
49
50 class ApiBitmask
51 {
52 public:
53     typedef QList<QPair<QString, unsigned long long> > Signature;
54
55     ApiBitmask(const Trace::Bitmask *bitmask = 0);
56
57     QString toString() const;
58
59 private:
60     void init(const Trace::Bitmask *bitmask);
61 private:
62     Signature m_sig;
63     unsigned long long m_value;
64 };
65 Q_DECLARE_METATYPE(ApiBitmask);
66
67 class ApiStruct
68 {
69 public:
70     struct Signature {
71         QString name;
72         QStringList memberNames;
73     };
74
75     ApiStruct(const Trace::Struct *s = 0);
76
77     QString toString() const;
78
79 private:
80     void init(const Trace::Struct *bitmask);
81 private:
82     Signature m_sig;
83     QList<QVariant> m_members;
84 };
85 Q_DECLARE_METATYPE(ApiStruct);
86
87 class ApiArray
88 {
89 public:
90     ApiArray(const Trace::Array *arr = 0);
91     ApiArray(const QList<QVariant> &vals);
92
93     QString toString() const;
94
95     QList<QVariant> values() const;
96 private:
97     void init(const Trace::Array *arr);
98 private:
99     QList<QVariant> m_array;
100 };
101 Q_DECLARE_METATYPE(ApiArray);
102
103
104 QString apiVariantToString(const QVariant &variant);
105
106 class ApiTraceFrame;
107
108 class ApiTraceState {
109 public:
110     ApiTraceState();
111     explicit ApiTraceState(const QVariantMap &parseJson);
112
113     bool isEmpty() const;
114     QVariantMap parameters() const;
115     QMap<QString, QString> shaderSources() const;
116     QList<ApiTexture> textures() const;
117     QList<ApiFramebuffer> framebuffers() const;
118
119 private:
120     QVariantMap m_parameters;
121     QMap<QString, QString> m_shaderSources;
122     QList<ApiTexture> m_textures;
123     QList<ApiFramebuffer> m_framebuffers;
124 };
125 Q_DECLARE_METATYPE(ApiTraceState);
126
127 class ApiTraceEvent
128 {
129 public:
130     enum Type {
131         None,
132         Call,
133         Frame
134     };
135 public:
136     ApiTraceEvent();
137     ApiTraceEvent(Type t);
138     virtual ~ApiTraceEvent();
139
140     Type type() const { return m_type; }
141
142     virtual QStaticText staticText() const = 0;
143     virtual int numChildren() const = 0;
144
145     QVariantMap stateParameters() const;
146     ApiTraceState state() const;
147     void setState(const ApiTraceState &state);
148
149 protected:
150     Type m_type;
151     ApiTraceState m_state;
152
153     mutable QStaticText *m_staticText;
154 };
155 Q_DECLARE_METATYPE(ApiTraceEvent*);
156
157 class ApiTraceCall : public ApiTraceEvent
158 {
159 public:
160     ApiTraceCall();
161     ApiTraceCall(const Trace::Call *tcall);
162     ~ApiTraceCall();
163
164     int index() const;
165     QString name() const;
166     QStringList argNames() const;
167     QVariantList arguments() const;
168     QVariant returnValue() const;
169     QUrl helpUrl() const;
170     void setHelpUrl(const QUrl &url);
171     ApiTraceFrame *parentFrame()const;
172     void setParentFrame(ApiTraceFrame *frame);
173
174     QString toHtml() const;
175     QString filterText() const;
176     QStaticText staticText() const;
177     int numChildren() const;
178     bool hasBinaryData() const;
179     int binaryDataIndex() const;
180 private:
181     int m_index;
182     QString m_name;
183     QStringList m_argNames;
184     QVariantList m_argValues;
185     QVariant m_returnValue;
186     ApiTraceFrame *m_parentFrame;
187     QUrl m_helpUrl;
188
189     mutable QString m_richText;
190     mutable QString m_filterText;
191     mutable bool m_hasBinaryData;
192     mutable int m_binaryDataIndex;
193 };
194 Q_DECLARE_METATYPE(ApiTraceCall*);
195
196 class ApiTraceFrame : public ApiTraceEvent
197 {
198 public:
199     ApiTraceFrame();
200     int number;
201     QList<ApiTraceCall*> calls;
202
203     int numChildren() const;
204     QStaticText staticText() const;
205 };
206 Q_DECLARE_METATYPE(ApiTraceFrame*);
207
208
209 #endif