summaryrefslogtreecommitdiffstats
path: root/src/tools/tracegen/lttng.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/tracegen/lttng.cpp')
-rw-r--r--src/tools/tracegen/lttng.cpp70
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";