Qt 6.x
The Qt SDK
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
25
27struct Q_CORE_EXPORT QCtfTracePointProvider
28{
32 : provider(provider), metadata(nullptr)
33 {
34
35 }
36};
37
38struct Q_CORE_EXPORT QCtfTraceMetadata
39{
42 QCtfTraceMetadata(QCtfTracePointProvider &provider, const QString &name, const QString &metadata)
43 : name(name), metadata(metadata)
44 {
45 next = provider.metadata;
46 provider.metadata = this;
47 }
49};
50
52struct Q_CORE_EXPORT QCtfTracePointEvent
53{
57 const int size;
58 const bool variableSize;
59
60 QCtfTracePointEvent(const QCtfTracePointProvider &provider, const QString &name, const QString &metadata, int size, bool variableSize)
61 : provider(provider), eventName(name), metadata(metadata), size(size), variableSize(variableSize)
62 {
63 }
65};
66
67
68
69Q_CORE_EXPORT bool _tracepoint_enabled(const QCtfTracePointEvent &point);
70Q_CORE_EXPORT void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr);
72
73#ifndef BUILD_LIBRARY
74#include <QtCore/qbytearray.h>
75#include <QtCore/qstring.h>
76#include <QtCore/qurl.h>
77namespace trace {
78inline void toByteArray(QByteArray &)
79{
80}
81
82inline void toByteArray(QByteArray &arr, const QString &value)
83{
84 arr.append(value.toUtf8());
85 arr.append((char)0);
86}
87
88inline void toByteArray(QByteArray &arr, const QUrl &value)
89{
90 arr.append(value.toString().toUtf8());
91 arr.append((char)0);
92}
93
94inline void toByteArray(QByteArray &arr, const QByteArray &data)
95{
96 arr.append(data);
97}
98
99template <typename T>
100inline void toByteArray(QByteArray &arr, T value)
101{
102 arr.append((char *)&value, sizeof(value));
103}
104
105template <typename T, typename... Ts>
106inline void toByteArray(QByteArray &arr, T value, Ts... args)
107{
108 toByteArray(arr, value);
109 toByteArray(arr, args...);
110}
111
113{
114 return {};
115}
116
117template <typename... Ts>
119{
121 toByteArray(data, args...);
122 return data;
123}
124
125template <typename T>
126inline QByteArray toByteArrayFromArray(const T *values, int arraySize)
127{
129 data.append((char *)values, arraySize * sizeof(T));
130 return data;
131}
132
133template <typename IntegerType, typename T>
135{
136 IntegerType e = static_cast<IntegerType>(value);
138 data.append((char *)&e, sizeof(e));
139 return data;
140}
141
143{
145 if (str && *str != 0)
146 data.append(str);
147 data.append((char)0);
148 return data;
149}
150
152{
153 count = 0;
154 quint8 d = 1;
155 while (value) {
156 if (value&1) {
157 data.append(d);
158 count++;
159 }
160 d++;
161 value >>= 1;
162 }
163}
164
165template <typename T>
167{
168 quint32 intValue = static_cast<quint32>(value.toInt());
171 data.append((char)0);
172 if (intValue == 0) {
173 data.append((char)0);
174 data.data()[0] = 1;
175 } else {
176 appendFlags(data, count, intValue);
177 data.data()[0] = count;
178 }
179 return data;
180}
181
182} // trace
183
184#define _DEFINE_EVENT(provider, event, metadata, size, varSize) \
185 static QCtfTracePointEvent _ctf_ ## event = QCtfTracePointEvent(_ctf_provider_ ## provider, QStringLiteral(QT_STRINGIFY(event)), metadata, size, varSize);
186#define _DEFINE_METADATA(provider, name, metadata) \
187 static QCtfTraceMetadata _ctf_metadata_ ## name = QCtfTraceMetadata(_ctf_provider_ ## provider, QStringLiteral(QT_STRINGIFY(name)), metadata);
188#define _DEFINE_TRACEPOINT_PROVIDER(provider) \
189 static QCtfTracePointProvider _ctf_provider_ ## provider = QCtfTracePointProvider(QStringLiteral(QT_STRINGIFY(provider)));
190
191#define TRACEPOINT_EVENT(provider, event, metadata, size, varSize) \
192 _DEFINE_EVENT(provider, event, metadata, size, varSize)
193
194#define TRACEPOINT_PROVIDER(provider) \
195 _DEFINE_TRACEPOINT_PROVIDER(provider)
196
197#define TRACEPOINT_METADATA(provider, name, metadata) \
198 _DEFINE_METADATA(provider, name, metadata)
199
200#define tracepoint_enabled(provider, event) \
201 _tracepoint_enabled(_ctf_ ## event)
202
203#define do_tracepoint(provider, event, ...) \
204{ \
205 auto &tp = _ctf_ ## event; \
206 if (!tp.d) \
207 tp.d = _initialize_tracepoint(tp); \
208 if (tp.d) { \
209 QByteArray data(tp.size, 0); \
210 if (!tp.metadata.isEmpty()) \
211 data = trace::toByteArray(__VA_ARGS__); \
212 _do_tracepoint(tp, data); \
213 } \
214}
215
216#define tracepoint(provider, name, ...) \
217 do { \
218 if (tracepoint_enabled(provider, name)) \
219 do_tracepoint(provider, name, __VA_ARGS__); \
220 } while (0)
221
222#endif
223
224class Q_CORE_EXPORT QCtfLib : public QObject
225{
227 Q_DISABLE_COPY(QCtfLib)
228public:
229 explicit QCtfLib(QObject *parent = nullptr) : QObject(parent) {}
230 virtual ~QCtfLib() = default;
231 virtual bool tracepointEnabled(const QCtfTracePointEvent &point) = 0;
232 virtual void doTracepoint(const QCtfTracePointEvent &point, const QByteArray &arr) = 0;
233 virtual bool sessionEnabled() = 0;
235 virtual void shutdown(bool *shutdown) = 0;
236};
237
239
240#endif
\inmodule QtCore
Definition qbytearray.h:57
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:229
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:90
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
\inmodule QtCore
Definition qurl.h:94
QString str
[2]
double e
short next
Definition keywords.cpp:445
Combined button and popup list for selecting options.
Definition qctf_p.h:77
QByteArray toByteArrayFromArray(const T *values, int arraySize)
Definition qctf_p.h:126
QByteArray toByteArrayFromEnum(T value)
Definition qctf_p.h:134
static void appendFlags(QByteArray &data, quint8 &count, quint32 value)
Definition qctf_p.h:151
QByteArray toByteArrayFromCString(const char *str)
Definition qctf_p.h:142
QByteArray toByteArrayFromFlags(QFlags< T > value)
Definition qctf_p.h:166
QByteArray toByteArray()
Definition qctf_p.h:112
Q_CORE_EXPORT void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)
Definition qctf.cpp:100
Q_CORE_EXPORT QCtfTracePointPrivate * _initialize_tracepoint(const QCtfTracePointEvent &point)
Definition qctf.cpp:108
Q_CORE_EXPORT bool _tracepoint_enabled(const QCtfTracePointEvent &point)
Definition qctf.cpp:93
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 QT_REQUIRE_CONFIG(feature)
#define Q_OBJECT
unsigned int quint32
Definition qtypes.h:45
unsigned char quint8
Definition qtypes.h:41
QObject::connect nullptr
QJSValueList args
const QString name
Definition qctf_p.h:40
QCtfTraceMetadata(QCtfTracePointProvider &provider, const QString &name, const QString &metadata)
Definition qctf_p.h:42
const QString metadata
Definition qctf_p.h:41
const bool variableSize
Definition qctf_p.h:58
const int size
Definition qctf_p.h:57
const QCtfTracePointProvider & provider
Definition qctf_p.h:54
const QString eventName
Definition qctf_p.h:55
const QString metadata
Definition qctf_p.h:56
QCtfTracePointEvent(const QCtfTracePointProvider &provider, const QString &name, const QString &metadata, int size, bool variableSize)
Definition qctf_p.h:60
QCtfTraceMetadata * metadata
Definition qctf_p.h:30
QCtfTracePointProvider(const QString &provider)
Definition qctf_p.h:31
const QString provider
Definition qctf_p.h:29
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent