20static void writePrologue(QTextStream &stream,
const QString &fileName,
const Provider &provider)
22 writeCommonPrologue(stream);
23 const QString guard = includeGuard(fileName);
25 stream <<
"\n#include <private/qtracecallback_p.h>\n\n";
27 stream <<
"#if !defined(" << guard <<
")\n";
28 stream << qtHeaders();
30 if (!provider.prefixText.isEmpty())
31 stream << provider.prefixText.join(u'\n') <<
"\n\n";
32 stream <<
"#endif\n\n";
34 stream <<
"#if !defined(" << guard <<
")\n";
35 stream <<
"#define " << guard <<
"\n\n";
37 const QString namespaceGuard = guard +
QStringLiteral(
"_USE_NAMESPACE");
38 stream <<
"#if !defined(" << namespaceGuard <<
")\n"
39 <<
"#define " << namespaceGuard <<
"\n"
40 <<
"QT_USE_NAMESPACE\n"
41 <<
"#endif // " << namespaceGuard <<
"\n\n";
51static void writeWrapper(QTextStream &stream,
const Tracepoint &tracepoint,
52 const Provider &provider)
54 const QString argList = formatFunctionSignature(tracepoint.args);
55 const QString paramList =
56 formatParameterList(provider, tracepoint.args, tracepoint.fields, CALLBACK);
57 const QString &name = tracepoint.name;
58 const QString includeGuard =
QStringLiteral(
"TP_%1_%2").arg(provider.name, name).toUpper();
61 <<
"#ifndef " << includeGuard <<
"\n"
62 <<
"#define " << includeGuard <<
"\n"
63 <<
"QT_BEGIN_NAMESPACE\n"
64 <<
"namespace QtPrivate {\n";
66 const auto writeBody = [&](
const char *enabledCheck) {
72 stream <<
" static QTraceCallbackTracepoint qtp { \"" << provider.name <<
"\", \""
73 << name <<
"\", -1 };\n"
74 <<
" " << enabledCheck <<
"\n"
75 <<
" qtTraceCallbackFunction(&qtp" << (paramList.isEmpty() ?
"" :
", ")
76 << paramList <<
");\n"
80 stream <<
"inline void do_trace_" << name <<
"(" << argList <<
")\n";
81 writeBody(
"if (qtTraceCallbackFunction)");
83 stream <<
"inline void trace_" << name <<
"(" << argList <<
") { do_trace_" << name <<
"("
84 << paramList <<
"); }\n";
86 stream <<
"inline bool trace_" << name <<
"_enabled()\n"
88 <<
" return qtTraceCallbackFunction != nullptr;\n"
91 stream <<
"} // namespace QtPrivate\n"
92 <<
"QT_END_NAMESPACE\n"
93 <<
"#endif // " << includeGuard <<
"\n";
98 QTextStream stream(&file);
100 const QString fileName = QFileInfo(file.fileName()).fileName();
102 writePrologue(stream, fileName, provider);
103 for (
const Tracepoint &t : provider.tracepoints)
104 writeWrapper(stream, t, provider);
105 writeEpilogue(stream, fileName);