22 stream <<
"#if !defined(" << guard <<
")\n";
32 stream <<
"#if !defined(" << guard <<
") || defined(TRACEPOINT_HEADER_MULTI_READ)\n";
34 stream <<
"#define " << guard <<
"\n\n"
35 <<
"#undef TRACEPOINT_INCLUDE\n"
36 <<
"#define TRACEPOINT_INCLUDE \"" <<
fileName <<
"\"\n\n";
38 stream <<
"#include <private/qctf_p.h>\n\n";
41 stream <<
"#if !defined(" << namespaceGuard <<
")\n"
42 <<
"#define " << namespaceGuard <<
"\n"
43 <<
"QT_USE_NAMESPACE\n"
44 <<
"#endif // " << namespaceGuard <<
"\n\n";
46 stream <<
"TRACEPOINT_PROVIDER(" << provider.
name <<
");\n\n";
53 <<
"#include <private/qtrace_p.h>\n";
69 <<
"QT_BEGIN_NAMESPACE\n"
70 <<
"namespace QtPrivate {\n";
72 stream <<
"inline void trace_" <<
name <<
"(" << argList <<
")\n"
74 <<
" tracepoint(" << provider.
name <<
", " <<
name << paramList <<
");\n"
77 stream <<
"inline void do_trace_" <<
name <<
"(" << argList <<
")\n"
79 <<
" do_tracepoint(" << provider.
name <<
", " <<
name << paramList <<
");\n"
82 stream <<
"inline bool trace_" <<
name <<
"_enabled()\n"
84 <<
" return tracepoint_enabled(" << provider.
name <<
", " <<
name <<
");\n"
87 stream <<
"} // namespace QtPrivate\n"
88 <<
"QT_END_NAMESPACE\n"
97inline QString integerToMetadata(const QString &name)
100 if (!std::is_signed<T>().value)
101 ret += QLatin1Char('u');
103 ret += QStringLiteral("int64_t ");
104 else if (sizeof(T) == 4)
105 ret += QStringLiteral("int32_t ");
106 else if (sizeof(T) == 2)
107 ret += QStringLiteral("int16_t ");
108 else if (sizeof(T) == 1)
109 ret += QStringLiteral("int8_t ");
110 ret += name + QLatin1Char(';');
115inline QString integerArrayToMetadata(const QString &size, const QString &name)
118 if (!std::is_signed<T>().value)
119 ret += QLatin1Char('u');
121 ret += QStringLiteral("int64_t ");
122 else if (sizeof(T) == 4)
123 ret += QStringLiteral("int32_t ");
124 else if (sizeof(T) == 2)
125 ret += QStringLiteral("int16_t ");
126 else if (sizeof(T) == 1)
127 ret += QStringLiteral("int8_t ");
128 ret += name + QLatin1Char('[') + size + QStringLiteral("];");
133inline QString floatToMetadata(const QString &name)
137 ret += QStringLiteral("double ");
138 else if (sizeof(T) == 4)
139 ret += QStringLiteral("float ");
140 ret += name + QLatin1Char(';');
145inline QString floatArrayToMetadata(const QString &size, const QString &name)
149 ret += QStringLiteral("double ");
150 else if (sizeof(T) == 4)
151 ret += QStringLiteral("float ");
152 ret += name + QLatin1Char('[') + size + QLatin1Char(']');
153 return ret + QLatin1Char(';');
156inline QString pointerToMetadata(const QString &name)
159 if (QT_POINTER_SIZE == 8)
160 ret += QStringLiteral("intptr64_t ");
161 else if (QT_POINTER_SIZE == 4)
162 ret += QStringLiteral("intptr32_t ");
163 ret += name + QLatin1Char(';');
173 stream <<
"TRACEPOINT_EVENT(\n"
174 <<
" " << providerName <<
",\n"
190 ret =
ret.right(
ret.length() - 6).simplified();
194 bool variableSize =
false;
196 if (!emptyMetadata) {
201 stream <<
" + QStringLiteral(\"\\n\\\n \") + ";
204 const bool array = field.arrayLen > 0;
205 switch (field.backendType) {
207 stream <<
"QStringLiteral(\"Boolean " <<
arg.name <<
";\")";
212 stream <<
"integerArrayToMetadata<" << formatType(
arg.type)
213 <<
">(QStringLiteral(\"" << field.arrayLen <<
"\"), QStringLiteral(\""
214 <<
arg.name <<
"\"))";
216 stream <<
"integerToMetadata<" << formatType(
arg.type) <<
">(QStringLiteral(\""
217 <<
arg.name <<
"\"))";
225 stream <<
"pointerToMetadata(QStringLiteral(\"" << formatType(
arg.type) <<
"_"
226 <<
arg.name <<
"\"))";
231 stream <<
"floatArrayToMetadata<" << formatType(
arg.type)
232 <<
">(QStringLiteral(\"" << field.arrayLen <<
"\"), QStringLiteral(\""
233 <<
arg.name <<
"\"))";
235 stream <<
"floatToMetadata<" << formatType(
arg.type) <<
">(QStringLiteral(\""
236 <<
arg.name <<
"\"))";
245 stream <<
"QStringLiteral(\"string " <<
arg.name <<
";\")";
250 stream <<
"QStringLiteral(\"int32_t QRect_" <<
arg.name <<
"_x;\\n\\\n \")";
251 stream <<
" + QStringLiteral(\"int32_t QRect_" <<
arg.name <<
"_y;\\n\\\n \")";
252 stream <<
" + QStringLiteral(\"int32_t QRect_" <<
arg.name <<
"_width;\\n\\\n \")";
253 stream <<
" + QStringLiteral(\"int32_t QRect_" <<
arg.name <<
"_height;\\n\\\n \")";
257 stream <<
"QStringLiteral(\"int32_t QSize_" <<
arg.name <<
"_width;\\n\\\n \")";
258 stream <<
" + QStringLiteral(\"int32_t QSize_" <<
arg.name <<
"_height;\\n\\\n \")";
262 stream <<
"QStringLiteral(\"float QRectF_" <<
arg.name <<
"_x;\\n\\\n \")";
263 stream <<
" + QStringLiteral(\"float QRectF_" <<
arg.name <<
"_y;\\n\\\n \")";
264 stream <<
" + QStringLiteral(\"float QRectF_" <<
arg.name <<
"_width;\\n\\\n \")";
265 stream <<
" + QStringLiteral(\"float QRectF_" <<
arg.name <<
"_height;\\n\\\n \")";
269 stream <<
"QStringLiteral(\"float QSizeF_" <<
arg.name <<
"_width;\\n\\\n \")";
270 stream <<
" + QStringLiteral(\"float QSizeF_" <<
arg.name <<
"_height;\\n\\\n \")";
281 stream <<
"QStringLiteral(\"uint8_t " <<
arg.name <<
"_length;\\n\\\n ";
299 stream << eventSize <<
", \n";
302 stream << (variableSize ?
"true" :
"false") <<
"\n";
316 for (
const auto &
e : provider.enumerations) {
319 stream <<
"TRACEPOINT_METADATA(" << provider.
name <<
", " <<
name <<
", \n";
320 stream <<
"QStringLiteral(\"typealias enum : integer { size = " <<
e.valueSize <<
"; } {\\n\\\n";
329 stream <<
v.name <<
" = " <<
v.
value <<
" ... " <<
v.range <<
", \\n\\\n";
336 stream <<
"} := " <<
name <<
";\\n\\n\"));\n\n";
343 for (
const auto &
e : provider.
flags) {
346 stream <<
"TRACEPOINT_METADATA(" << provider.
name <<
", " <<
name <<
", \n";
347 stream <<
"QStringLiteral(\"typealias enum : integer { size = 8; } {\\n\\\n";
359 stream <<
"} := " <<
name <<
";\\n\\n\"));\n\n";
\inmodule QtCore \reentrant
QString fileName() const
Returns the name of the file, excluding the path.
QString fileName() const override
Returns the name set by setFileName() or to the QFile constructors.
T value(qsizetype i) const
void append(parameter_type t)
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
qsizetype length() const
Returns the number of characters in this string.
static void writeMetadataGenerators(QTextStream &stream)
static void writeEpilogue(QTextStream &stream, const QString &fileName)
static void writeEnums(QTextStream &stream, const Provider &provider)
void writeCtf(QFile &file, const Provider &provider)
static void writeWrapper(QTextStream &stream, const Tracepoint &tracepoint, const Provider &provider)
static void writeTracepoint(QTextStream &stream, const Tracepoint &tracepoint, const QString &providerName)
static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider)
static void writeFlags(QTextStream &stream, const Provider &provider)
static void writeTracepoints(QTextStream &stream, const Provider &provider)
void writeCommonPrologue(QTextStream &stream)
QString typeToTypeName(const QString &name)
QString includeGuard(const QString &filename)
QString formatFunctionSignature(const QList< Tracepoint::Argument > &args)
QString formatParameterList(const Provider &provider, const QList< Tracepoint::Argument > &args, const QList< Tracepoint::Field > &fields, ParamType type)
static QString aggregateListValues(int value, const QList< T > &list)
void panic(const char *fmt,...)
#define tracepoint(provider, name,...)
GLenum GLsizei GLsizei GLint * values
[15]
GLsizei const GLfloat * v
[13]
#define qPrintable(string)
#define QStringLiteral(str)
QList< Tracepoint > tracepoints
\inmodule QtCore \reentrant
bool contains(const AT &t) const noexcept