diff options
-rw-r--r-- | src/corelib/qtcore.tracepoints | 6 | ||||
-rw-r--r-- | src/gui/qtgui.tracepoints | 6 | ||||
-rw-r--r-- | src/tools/tracegen/etw.cpp | 27 | ||||
-rw-r--r-- | src/tools/tracegen/lttng.cpp | 17 | ||||
-rw-r--r-- | src/tools/tracegen/provider.cpp | 19 | ||||
-rw-r--r-- | src/tools/tracegen/provider.h | 1 | ||||
-rw-r--r-- | src/widgets/qtwidgets.tracepoints | 6 |
7 files changed, 65 insertions, 17 deletions
diff --git a/src/corelib/qtcore.tracepoints b/src/corelib/qtcore.tracepoints index 33734a4274..a9a08071f3 100644 --- a/src/corelib/qtcore.tracepoints +++ b/src/corelib/qtcore.tracepoints @@ -1,3 +1,9 @@ +{ +QT_BEGIN_NAMESPACE +class QEvent; +QT_END_NAMESPACE +} + QCoreApplicationPrivate_init_entry() QCoreApplicationPrivate_init_exit() diff --git a/src/gui/qtgui.tracepoints b/src/gui/qtgui.tracepoints index aed6c35c03..0a96a589b1 100644 --- a/src/gui/qtgui.tracepoints +++ b/src/gui/qtgui.tracepoints @@ -1,3 +1,9 @@ +{ +QT_BEGIN_NAMESPACE +class QImageReader; +QT_END_NAMESPACE +} + QGuiApplicationPrivate_init_entry() QGuiApplicationPrivate_init_exit() diff --git a/src/tools/tracegen/etw.cpp b/src/tools/tracegen/etw.cpp index 8c065f93c9..e839137915 100644 --- a/src/tools/tracegen/etw.cpp +++ b/src/tools/tracegen/etw.cpp @@ -110,19 +110,21 @@ static QString createGuid(const QUuid &uuid) return guid; } -static void writePrologue(QTextStream &stream, const QString &fileName, const QString &providerName) +static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider) { - QUuid uuid = QUuid::createUuidV5(QUuid(), providerName.toLocal8Bit()); + QUuid uuid = QUuid::createUuidV5(QUuid(), provider.name.toLocal8Bit()); - const QString provider = providerVar(providerName); + const QString providerV = providerVar(provider.name); const QString guard = includeGuard(fileName); const QString guid = createGuid(uuid); const QString guidString = uuid.toString(); stream << "#ifndef " << guard << "\n" << "#define " << guard << "\n" + << "\n" << "#include <windows.h>\n" - << "#include <TraceLoggingProvider.h>\n"; + << "#include <TraceLoggingProvider.h>\n" + << "\n"; /* TraceLogging API macros cannot deal with UTF8 * source files, so we work around it like this @@ -132,30 +134,33 @@ static void writePrologue(QTextStream &stream, const QString &fileName, const QS "#define _TlgPragmaUtf8Begin\n" "#define _TlgPragmaUtf8End\n"; + stream << "\n"; stream << qtHeaders(); - stream << "\n"; + if (!provider.prefixText.isEmpty()) + stream << provider.prefixText.join(QLatin1Char('\n')) << "\n\n"; + stream << "#ifdef TRACEPOINT_DEFINE\n" << "/* " << guidString << " */\n" - << "TRACELOGGING_DEFINE_PROVIDER(" << provider << ", \"" - << providerName <<"\", " << guid << ");\n\n"; + << "TRACELOGGING_DEFINE_PROVIDER(" << providerV << ", \"" + << provider.name <<"\", " << guid << ");\n\n"; stream << "static inline void registerProvider()\n" << "{\n" - << " TraceLoggingRegister(" << provider << ");\n" + << " TraceLoggingRegister(" << providerV << ");\n" << "}\n\n"; stream << "static inline void unregisterProvider()\n" << "{\n" - << " TraceLoggingUnregister(" << provider << ");\n" + << " TraceLoggingUnregister(" << providerV << ");\n" << "}\n"; stream << "Q_CONSTRUCTOR_FUNCTION(registerProvider)\n" << "Q_DESTRUCTOR_FUNCTION(unregisterProvider)\n\n"; stream << "#else\n" - << "TRACELOGGING_DECLARE_PROVIDER(" << provider << ");\n" + << "TRACELOGGING_DECLARE_PROVIDER(" << providerV << ");\n" << "#endif // TRACEPOINT_DEFINE\n\n"; } @@ -224,7 +229,7 @@ void writeEtw(QFile &file, const Provider &provider) const QString fileName = QFileInfo(file.fileName()).fileName(); - writePrologue(stream, fileName, provider.name); + writePrologue(stream, fileName, provider); writeTracepoints(stream, provider); writeEpilogue(stream, fileName); } diff --git a/src/tools/tracegen/lttng.cpp b/src/tools/tracegen/lttng.cpp index 5d41bf5f1f..f0fbca9e16 100644 --- a/src/tools/tracegen/lttng.cpp +++ b/src/tools/tracegen/lttng.cpp @@ -104,16 +104,21 @@ static void writeCtfMacro(QTextStream &stream, const Tracepoint::Field &field) } } -static void writePrologue(QTextStream &stream, const QString &fileName, const QString &providerName) +static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider) { + const QString guard = includeGuard(fileName); + stream << "#undef TRACEPOINT_PROVIDER\n"; - stream << "#define TRACEPOINT_PROVIDER " << providerName << "\n\n"; + stream << "#define TRACEPOINT_PROVIDER " << provider.name << "\n"; + stream << "\n"; + // include prefix text or qt headers only once + stream << "#if !defined(" << guard << ")\n"; stream << qtHeaders(); - - const QString guard = includeGuard(fileName); - stream << "\n"; + if (!provider.prefixText.isEmpty()) + stream << provider.prefixText.join(QLatin1Char('\n')) << "\n\n"; + stream << "#endif\n\n"; /* the first guard is the usual one, the second is required * by LTTNG to force the re-evaluation of TRACEPOINT_* macros @@ -213,7 +218,7 @@ void writeLttng(QFile &file, const Provider &provider) const QString fileName = QFileInfo(file.fileName()).fileName(); - writePrologue(stream, fileName, provider.name); + writePrologue(stream, fileName, provider); writeTracepoints(stream, provider); writeEpilogue(stream, fileName); } diff --git a/src/tools/tracegen/provider.cpp b/src/tools/tracegen/provider.cpp index a6523a2e3d..39633efe5d 100644 --- a/src/tools/tracegen/provider.cpp +++ b/src/tools/tracegen/provider.cpp @@ -275,9 +275,21 @@ Provider parseProvider(const QString &filename) Provider provider; provider.name = QFileInfo(filename).baseName(); + bool parsingPrefixText = false; for (int lineNumber = 1; !s.atEnd(); ++lineNumber) { QString line = s.readLine().trimmed(); + if (line == QLatin1String("{")) { + parsingPrefixText = true; + continue; + } else if (parsingPrefixText && line == QLatin1String("}")) { + parsingPrefixText = false; + continue; + } else if (parsingPrefixText) { + provider.prefixText.append(line); + continue; + } + if (line.isEmpty() || line.startsWith(QLatin1Char('#'))) continue; @@ -296,7 +308,14 @@ Provider parseProvider(const QString &filename) } } + if (parsingPrefixText) { + panic("Syntax error while processing '%s': " + "no closing brace found for prefix text block", + qPrintable(filename)); + } + #ifdef TRACEGEN_DEBUG + qDebug() << provider.prefixText; for (auto i = provider.tracepoints.constBegin(); i != provider.tracepoints.constEnd(); ++i) dumpTracepoint(*i); #endif diff --git a/src/tools/tracegen/provider.h b/src/tools/tracegen/provider.h index 9771e62f4d..9be0c33d89 100644 --- a/src/tools/tracegen/provider.h +++ b/src/tools/tracegen/provider.h @@ -86,6 +86,7 @@ struct Provider { QString name; QVector<Tracepoint> tracepoints; + QStringList prefixText; }; Provider parseProvider(const QString &filename); diff --git a/src/widgets/qtwidgets.tracepoints b/src/widgets/qtwidgets.tracepoints index 01a1383670..bfaf87ffcc 100644 --- a/src/widgets/qtwidgets.tracepoints +++ b/src/widgets/qtwidgets.tracepoints @@ -1,3 +1,9 @@ +{ +QT_BEGIN_NAMESPACE +class QEvent; +QT_END_NAMESPACE +} + QApplication_notify_entry(QObject *receiver, QEvent *event, int type) QApplication_notify_event_filtered(QObject *receiver, QEvent *event, int type) QApplication_notify_before_delivery(QObject *receiver, QEvent *event, int type) |