Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qctf_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef Q_CTF_H
5#define Q_CTF_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17//
18
19#include <qtcoreexports.h>
20#include <qobject.h>
21
23
25struct Q_CORE_EXPORT QCtfTracePointProvider
26{
30 : provider(provider), metadata(nullptr)
31 {
32
33 }
34};
35
36struct Q_CORE_EXPORT QCtfTraceMetadata
37{
40 QCtfTraceMetadata(QCtfTracePointProvider &provider, const QString &name, const QString &metadata)
41 : name(name), metadata(metadata)
42 {
43 next = provider.metadata;
44 provider.metadata = this;
45 }
47};
48
50struct Q_CORE_EXPORT QCtfTracePointEvent
51{
55 const int size;
56 const bool variableSize;
57
58 QCtfTracePointEvent(const QCtfTracePointProvider &provider, const QString &name, const QString &metadata, int size, bool variableSize)
59 : provider(provider), eventName(name), metadata(metadata), size(size), variableSize(variableSize)
60 {
61 }
63};
64
65
66
67Q_CORE_EXPORT bool _tracepoint_enabled(const QCtfTracePointEvent &point);
68Q_CORE_EXPORT void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr);
70
71#ifndef BUILD_LIBRARY
72#include <QtCore/qbytearray.h>
73#include <QtCore/qstring.h>
74#include <QtCore/qurl.h>
75namespace trace {
76inline void toByteArray(QByteArray &)
77{
78}
79
80inline void toByteArray(QByteArray &arr, const QString &value)
81{
82 arr.append(value.toUtf8());
83 arr.append((char)0);
84}
85
86inline void toByteArray(QByteArray &arr, const QUrl &value)
87{
88 arr.append(value.toString().toUtf8());
89 arr.append((char)0);
90}
91
92inline void toByteArray(QByteArray &arr, const QByteArray &data)
93{
94 arr.append(data);
95}
96
97template <typename T>
98inline void toByteArray(QByteArray &arr, T value)
99{
100 arr.append((char *)&value, sizeof(value));
101}
102
103template <typename T, typename... Ts>
104inline void toByteArray(QByteArray &arr, T value, Ts... args)
105{
106 toByteArray(arr, value);
107 toByteArray(arr, args...);
108}
109
111{
112 return {};
113}
114
115template <typename... Ts>
117{
119 toByteArray(data, args...);
120 return data;
121}
122
123template <typename T>
124inline QByteArray toByteArrayFromArray(const T *values, int arraySize)
125{
127 data.append((char *)values, arraySize * sizeof(T));
128 return data;
129}
130
131template <typename IntegerType, typename T>
133{
134 IntegerType e = static_cast<IntegerType>(value);
136 data.append((char *)&e, sizeof(e));
137 return data;
138}
139
141{
143 if (str && *str != 0)
144 data.append(str);
145 data.append((char)0);
146 return data;
147}
148
150{
151 count = 0;
152 quint8 d = 1;
153 while (value) {
154 if (value&1) {
155 data.append(d);
156 count++;
157 }
158 d++;
159 value >>= 1;
160 }
161}
162
163template <typename T>
165{
166 quint32 intValue = static_cast<quint32>(value.toInt());
169 data.append((char)0);
170 if (intValue == 0) {
171 data.append((char)0);
172 data.data()[0] = 1;
173 } else {
174 appendFlags(data, count, intValue);
175 data.data()[0] = count;
176 }
177 return data;
178}
179
180} // trace
181
182#define _DEFINE_EVENT(provider, event, metadata, size, varSize) \
183 static QCtfTracePointEvent _ctf_ ## event = QCtfTracePointEvent(_ctf_provider_ ## provider, QStringLiteral(QT_STRINGIFY(event)), metadata, size, varSize);
184#define _DEFINE_METADATA(provider, name, metadata) \
185 static QCtfTraceMetadata _ctf_metadata_ ## name = QCtfTraceMetadata(_ctf_provider_ ## provider, QStringLiteral(QT_STRINGIFY(name)), metadata);
186#define _DEFINE_TRACEPOINT_PROVIDER(provider) \
187 static QCtfTracePointProvider _ctf_provider_ ## provider = QCtfTracePointProvider(QStringLiteral(QT_STRINGIFY(provider)));
188
189#define TRACEPOINT_EVENT(provider, event, metadata, size, varSize) \
190 _DEFINE_EVENT(provider, event, metadata, size, varSize)
191
192#define TRACEPOINT_PROVIDER(provider) \
193 _DEFINE_TRACEPOINT_PROVIDER(provider)
194
195#define TRACEPOINT_METADATA(provider, name, metadata) \
196 _DEFINE_METADATA(provider, name, metadata)
197
198#define tracepoint_enabled(provider, event) \
199 _tracepoint_enabled(_ctf_ ## event)
200
201#define do_tracepoint(provider, event, ...) \
202{ \
203 auto &tp = _ctf_ ## event; \
204 if (!tp.d) \
205 tp.d = _initialize_tracepoint(tp); \
206 if (tp.d) { \
207 QByteArray data(tp.size, 0); \
208 if (!tp.metadata.isEmpty()) \
209 data = trace::toByteArray(__VA_ARGS__); \
210 _do_tracepoint(tp, data); \
211 } \
212}
213
214#define tracepoint(provider, name, ...) \
215 do { \
216 if (tracepoint_enabled(provider, name)) \
217 do_tracepoint(provider, name, __VA_ARGS__); \
218 } while (0)
219
220#endif
221
222class Q_CORE_EXPORT QCtfLib : public QObject
223{
225 Q_DISABLE_COPY(QCtfLib)
226public:
227 explicit QCtfLib(QObject *parent = nullptr) : QObject(parent) {}
228 virtual ~QCtfLib() = default;
229 virtual bool tracepointEnabled(const QCtfTracePointEvent &point) = 0;
230 virtual void doTracepoint(const QCtfTracePointEvent &point, const QByteArray &arr) = 0;
231 virtual bool sessionEnabled() = 0;
233 virtual void shutdown(bool *shutdown) = 0;
234};
235
237
238#endif
\inmodule QtCore
Definition qbytearray.h:57
char * data()
\macro QT_NO_CAST_FROM_BYTEARRAY
Definition qbytearray.h:611
QByteArray & append(char c)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QCtfLib(QObject *parent=nullptr)
Definition qctf_p.h:227
virtual void shutdown(bool *shutdown)=0
virtual bool sessionEnabled()=0
virtual void doTracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)=0
virtual ~QCtfLib()=default
virtual QCtfTracePointPrivate * initializeTracepoint(const QCtfTracePointEvent &point)=0
virtual bool tracepointEnabled(const QCtfTracePointEvent &point)=0
\inmodule QtCore
Definition qobject.h:103
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Definition qurl.h:94
QString str
[2]
short next
Definition keywords.cpp:445
Combined button and popup list for selecting options.
Definition qctf_p.h:75
QByteArray toByteArrayFromArray(const T *values, int arraySize)
Definition qctf_p.h:124
QByteArray toByteArrayFromEnum(T value)
Definition qctf_p.h:132
static void appendFlags(QByteArray &data, quint8 &count, quint32 value)
Definition qctf_p.h:149
QByteArray toByteArrayFromCString(const char *str)
Definition qctf_p.h:140
QByteArray toByteArrayFromFlags(QFlags< T > value)
Definition qctf_p.h:164
QByteArray toByteArray()
Definition qctf_p.h:110
Q_CORE_EXPORT void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)
Definition qctf.cpp:127
Q_CORE_EXPORT QCtfTracePointPrivate * _initialize_tracepoint(const QCtfTracePointEvent &point)
Definition qctf.cpp:135
Q_CORE_EXPORT bool _tracepoint_enabled(const QCtfTracePointEvent &point)
Definition qctf.cpp:120
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLenum GLsizei GLsizei GLint * values
[15]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint name
#define Q_OBJECT
unsigned int quint32
Definition qtypes.h:50
unsigned char quint8
Definition qtypes.h:46
QObject::connect nullptr
QJSValueList args
const QString name
Definition qctf_p.h:38
QCtfTraceMetadata(QCtfTracePointProvider &provider, const QString &name, const QString &metadata)
Definition qctf_p.h:40
const QString metadata
Definition qctf_p.h:39
const bool variableSize
Definition qctf_p.h:56
const int size
Definition qctf_p.h:55
const QCtfTracePointProvider & provider
Definition qctf_p.h:52
const QString eventName
Definition qctf_p.h:53
const QString metadata
Definition qctf_p.h:54
QCtfTracePointEvent(const QCtfTracePointProvider &provider, const QString &name, const QString &metadata, int size, bool variableSize)
Definition qctf_p.h:58
QCtfTraceMetadata * metadata
Definition qctf_p.h:28
QCtfTracePointProvider(const QString &provider)
Definition qctf_p.h:29
const QString provider
Definition qctf_p.h:27