diff options
Diffstat (limited to 'src/tools/tracegen/lttng.cpp')
-rw-r--r-- | src/tools/tracegen/lttng.cpp | 70 |
1 files changed, 50 insertions, 20 deletions
diff --git a/src/tools/tracegen/lttng.cpp b/src/tools/tracegen/lttng.cpp index effe927e4f..9711570874 100644 --- a/src/tools/tracegen/lttng.cpp +++ b/src/tools/tracegen/lttng.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com> -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "lttng.h" #include "provider.h" @@ -20,12 +20,23 @@ static void writeCtfMacro(QTextStream &stream, const Provider &provider, const T const int arrayLen = field.arrayLen; if (arrayLen > 0) { - stream << "ctf_array(" <<paramType << ", " - << name << ", " << name << ", " << arrayLen << ")"; + if (paramType == QStringLiteral("double") || paramType == QStringLiteral("float")) { + const char *newline = nullptr; + for (int i = 0; i < arrayLen; i++) { + stream << newline; + stream << "ctf_float(" <<paramType << ", " << name << "_" << QString::number(i) << ", " + << name << "[" << QString::number(i) << "]" << ")"; + newline = "\n "; + } + + } else { + stream << "ctf_array(" <<paramType << ", " + << name << ", " << name << ", " << arrayLen << ")"; + } return; } - switch (field.backendType.backendType) { + switch (field.backendType) { case Tracepoint::Field::Sequence: stream << "ctf_sequence(" << paramType << ", " << name << ", " << name @@ -56,17 +67,27 @@ static void writeCtfMacro(QTextStream &stream, const Provider &provider, const T stream << "ctf_string(" << name << ", " << name << ".toString().toUtf8().constData())"; return; case Tracepoint::Field::QtRect: - stream << "ctf_integer(int, x, " << name << ".x()) " - << "ctf_integer(int, y, " << name << ".y()) " - << "ctf_integer(int, width, " << name << ".width()) " - << "ctf_integer(int, height, " << name << ".height()) "; + stream << "ctf_integer(int, QRect_" << name << "_x, " << name << ".x()) " + << "ctf_integer(int, QRect_" << name << "_y, " << name << ".y()) " + << "ctf_integer(int, QRect_" << name << "_width, " << name << ".width()) " + << "ctf_integer(int, QRect_" << name << "_height, " << name << ".height()) "; + return; + case Tracepoint::Field::QtSizeF: + stream << "ctf_float(double, QSizeF_" << name << "_width, " << name << ".width()) " + << "ctf_float(double, QSizeF_" << name << "_height, " << name << ".height()) "; + return; + case Tracepoint::Field::QtRectF: + stream << "ctf_float(double, QRectF_" << name << "_x, " << name << ".x()) " + << "ctf_float(double, QRectF_" << name << "_y, " << name << ".y()) " + << "ctf_float(double, QRectF_" << name << "_width, " << name << ".width()) " + << "ctf_float(double, QRectF_" << name << "_height, " << name << ".height()) "; return; case Tracepoint::Field::QtSize: - stream << "ctf_integer(int, width, " << name << ".width()) " - << "ctf_integer(int, height, " << name << ".height()) "; + stream << "ctf_integer(int, QSize_" << name << "_width, " << name << ".width()) " + << "ctf_integer(int, QSize_" << name << "_height, " << name << ".height()) "; return; case Tracepoint::Field::EnumeratedType: - stream << "ctf_enum(" << provider.name << ", " << typeToName(paramType) << ", int, " << name << ", " << name << ") "; + stream << "ctf_enum(" << provider.name << ", " << typeToTypeName(paramType) << ", int, " << name << ", " << name << ") "; return; case Tracepoint::Field::FlagType: stream << "ctf_sequence(const char , " << name << ", " @@ -80,6 +101,7 @@ static void writeCtfMacro(QTextStream &stream, const Provider &provider, const T static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider) { + writeCommonPrologue(stream); const QString guard = includeGuard(fileName); stream << "#undef TRACEPOINT_PROVIDER\n"; @@ -170,7 +192,7 @@ static void writeTracepoint(QTextStream &stream, const Provider &provider, for (int i = 0; i < tracepoint.args.size(); i++) { const auto &arg = tracepoint.args[i]; const auto &field = tracepoint.fields[i]; - if (field.backendType.backendType == Tracepoint::Field::FlagType) + if (field.backendType == Tracepoint::Field::FlagType) stream << comma << "QByteArray, " << arg.name; else stream << comma << arg.type << ", " << arg.name; @@ -196,13 +218,16 @@ static void writeEnums(QTextStream &stream, const Provider &provider) for (const auto &e : provider.enumerations) { stream << "TRACEPOINT_ENUM(\n" << " " << provider.name << ",\n" - << " " << typeToName(e.name) << ",\n" + << " " << typeToTypeName(e.name) << ",\n" << " TP_ENUM_VALUES(\n"; + QList<int> handledValues; for (const auto &v : e.values) { - if (v.range > 0) + if (v.range > 0) { stream << " ctf_enum_range(\"" << v.name << "\", " << v.value << ", " << v.range << ")\n"; - else - stream << " ctf_enum_value(\"" << v.name << "\", " << v.value << ")\n"; + } else if (!handledValues.contains(v.value)) { + stream << " ctf_enum_value(\"" << aggregateListValues(v.value, e.values) << "\", " << v.value << ")\n"; + handledValues.append(v.value); + } } stream << " )\n)\n\n"; } @@ -213,10 +238,15 @@ static void writeFlags(QTextStream &stream, const Provider &provider) for (const auto &f : provider.flags) { stream << "TRACEPOINT_ENUM(\n" << " " << provider.name << ",\n" - << " " << typeToName(f.name) << ",\n" + << " " << typeToTypeName(f.name) << ",\n" << " TP_ENUM_VALUES(\n"; - for (const auto &v : f.values) - stream << " ctf_enum_value(\"" << v.name << "\", " << v.value << ")\n"; + QList<int> handledValues; + for (const auto &v : f.values) { + if (!handledValues.contains(v.value)) { + stream << " ctf_enum_value(\"" << aggregateListValues(v.value, f.values) << "\", " << v.value << ")\n"; + handledValues.append(v.value); + } + } stream << " )\n)\n\n"; } @@ -228,7 +258,7 @@ static void writeFlags(QTextStream &stream, const Provider &provider) stream << "QT_BEGIN_NAMESPACE\n"; stream << "namespace QtPrivate {\n"; for (const auto &f : provider.flags) { - stream << "inline QByteArray trace_convert_" << typeToName(f.name) << "(" << f.name << " val)\n"; + stream << "inline QByteArray trace_convert_" << typeToTypeName(f.name) << "(" << f.name << " val)\n"; stream << "{\n"; stream << " QByteArray ret;\n"; stream << " if (val == 0) { ret.append((char)0); return ret; }\n"; |