Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
// Qt-Security score:significant reason:default
4
5
#
ifndef
Q_CTF_H
6
#
define
Q_CTF_H
7
8
//
9
// W A R N I N G
10
// -------------
11
//
12
// This file is not part of the Qt API. It exists purely as an
13
// implementation detail. This header file may change from version to
14
// version without notice, or even be removed.
15
//
16
// We mean it.
17
//
18
//
19
20
#
include
<
qtcoreexports
.
h
>
21
#
include
<
qobject
.
h
>
22
23
QT_BEGIN_NAMESPACE
24
25
struct
QCtfTraceMetadata;
26
struct
Q_CORE_EXPORT
QCtfTracePointProvider
27
{
28
const
QString provider;
29
QCtfTraceMetadata *metadata;
30
QCtfTracePointProvider(
const
QString &provider)
31
: provider(provider), metadata(
nullptr
)
32
{
33
34
}
35
};
36
37
struct
Q_CORE_EXPORT
QCtfTraceMetadata
38
{
39
const
QString name;
40
const
QString metadata;
41
QCtfTraceMetadata(QCtfTracePointProvider &provider,
const
QString &name,
const
QString &metadata)
42
: name(name), metadata(metadata)
43
{
44
next = provider.metadata;
45
provider.metadata =
this
;
46
}
47
QCtfTraceMetadata *next =
nullptr
;
48
};
49
50
struct
QCtfTracePointPrivate
;
51
struct
Q_CORE_EXPORT
QCtfTracePointEvent
52
{
53
const
QCtfTracePointProvider &provider;
54
const
QString eventName;
55
const
QString metadata;
56
const
int
size;
57
const
bool
variableSize;
58
59
QCtfTracePointEvent(
const
QCtfTracePointProvider &provider,
const
QString &name,
const
QString &metadata,
int
size,
bool
variableSize)
60
: provider(provider), eventName(name), metadata(metadata), size(size), variableSize(variableSize)
61
{
62
}
63
QCtfTracePointPrivate *d =
nullptr
;
64
};
65
66
67
68
Q_CORE_EXPORT
bool
_tracepoint_enabled
(
const
QCtfTracePointEvent &point);
69
Q_CORE_EXPORT
void
_do_tracepoint
(
const
QCtfTracePointEvent &point,
const
QByteArray
&arr);
70
Q_CORE_EXPORT QCtfTracePointPrivate *_initialize_tracepoint(
const
QCtfTracePointEvent &point);
71
72
#
ifndef
BUILD_LIBRARY
73
#
include
<
QtCore
/
qbytearray
.
h
>
74
#
include
<
QtCore
/
qstring
.
h
>
75
#
include
<
QtCore
/
qurl
.
h
>
76
namespace
trace {
77
inline
void
toByteArray(QByteArray &)
78
{
79
}
80
81
inline
void
toByteArray(QByteArray &arr,
const
QString &value)
82
{
83
arr.append(value.toUtf8());
84
arr.append((
char
)0);
85
}
86
87
inline
void
toByteArray(QByteArray &arr,
const
QUrl &value)
88
{
89
arr.append(value.toString().toUtf8());
90
arr.append((
char
)0);
91
}
92
93
inline
void
toByteArray(QByteArray &arr,
const
QByteArray &data)
94
{
95
arr.append(data);
96
}
97
98
template
<
typename
T>
99
inline
void
toByteArray(QByteArray &arr, T value)
100
{
101
arr.append((
char
*)&value,
sizeof
(value));
102
}
103
104
template
<
typename
T,
typename
... Ts>
105
inline
void
toByteArray(QByteArray &arr, T value, Ts... args)
106
{
107
toByteArray(arr, value);
108
toByteArray(arr, args...);
109
}
110
111
inline
QByteArray toByteArray()
112
{
113
return
{};
114
}
115
116
template
<
typename
... Ts>
117
inline
QByteArray toByteArray(Ts... args)
118
{
119
QByteArray data;
120
toByteArray(data, args...);
121
return
data;
122
}
123
124
template
<
typename
T>
125
inline
QByteArray toByteArrayFromArray(
const
T *values,
int
arraySize)
126
{
127
QByteArray data;
128
data.append((
char
*)values, arraySize *
sizeof
(T));
129
return
data;
130
}
131
132
template
<
typename
IntegerType,
typename
T>
133
inline
QByteArray toByteArrayFromEnum(T value)
134
{
135
IntegerType e =
static_cast
<IntegerType>(value);
136
QByteArray data;
137
data.append((
char
*)&e,
sizeof
(e));
138
return
data;
139
}
140
141
inline
QByteArray toByteArrayFromCString(
const
char
*str)
142
{
143
QByteArray data;
144
if
(str && *str != 0)
145
data.append(str);
146
data.append((
char
)0);
147
return
data;
148
}
149
150
static
inline
void
appendFlags(QByteArray &data, quint8 &count, quint32 value)
151
{
152
count = 0;
153
quint8 d = 1;
154
while
(value) {
155
if
(value&1) {
156
data.append(d);
157
count++;
158
}
159
d++;
160
value >>= 1;
161
}
162
}
163
164
template
<
typename
T>
165
inline
QByteArray toByteArrayFromFlags(QFlags<T> value)
166
{
167
quint32 intValue =
static_cast
<quint32>(value.toInt());
168
quint8 count;
169
QByteArray data;
170
data.append((
char
)0);
171
if
(intValue == 0) {
172
data.append((
char
)0);
173
data.data()[0] = 1;
174
}
else
{
175
appendFlags(data, count, intValue);
176
data.data()[0] = count;
177
}
178
return
data;
179
}
180
181
}
// trace
182
183
#
define
_DEFINE_EVENT
(
provider
,
event
,
metadata
,
size
,
varSize
)
184
static
QCtfTracePointEvent
_ctf_
##
event
=
QCtfTracePointEvent
(
_ctf_provider_
##
provider
,
QStringLiteral
(
QT_STRINGIFY
(
event
)
)
,
metadata
,
size
,
varSize
)
;
185
#
define
_DEFINE_METADATA
(
provider
,
name
,
metadata
)
186
static
QCtfTraceMetadata
_ctf_metadata_
##
name
=
QCtfTraceMetadata
(
_ctf_provider_
##
provider
,
QStringLiteral
(
QT_STRINGIFY
(
name
)
)
,
metadata
)
;
187
#
define
_DEFINE_TRACEPOINT_PROVIDER
(
provider
)
188
static
QCtfTracePointProvider
_ctf_provider_
##
provider
=
QCtfTracePointProvider
(
QStringLiteral
(
QT_STRINGIFY
(
provider
)
)
)
;
189
190
#
define
TRACEPOINT_EVENT
(
provider
,
event
,
metadata
,
size
,
varSize
)
191
_DEFINE_EVENT
(
provider
,
event
,
metadata
,
size
,
varSize
)
192
193
#
define
TRACEPOINT_PROVIDER
(
provider
)
194
_DEFINE_TRACEPOINT_PROVIDER
(
provider
)
195
196
#
define
TRACEPOINT_METADATA
(
provider
,
name
,
metadata
)
197
_DEFINE_METADATA
(
provider
,
name
,
metadata
)
198
199
#
define
tracepoint_enabled
(
provider
,
event
)
200
_tracepoint_enabled
(
_ctf_
##
event
)
201
202
#
define
do_tracepoint
(
provider
,
event
,
...
)
\
203
{
204
auto
&
tp
=
_ctf_
##
event
;
205
if
(
!
tp
.
d
)
206
tp
.
d
=
_initialize_tracepoint
(
tp
)
;
207
if
(
tp
.
d
)
{
208
QByteArray
data
(
tp
.
size
,
0
)
;
209
if
(
!
tp
.
metadata
.
isEmpty
(
)
)
210
data
=
trace
::
toByteArray
(
__VA_ARGS__
)
;
211
_do_tracepoint
(
tp
,
data
)
;
212
}
\
213
}
214
215
#
define
tracepoint
(
provider
,
name
,
...
)
216
do
{
217
if
(
tracepoint_enabled
(
provider
,
name
)
)
218
do_tracepoint
(
provider
,
name
,
__VA_ARGS__
)
;
219
}
while
(
0
)
220
221
#
endif
222
223
class
Q_CORE_EXPORT
QCtfLib
:
public
QObject
224
{
225
Q_OBJECT
226
Q_DISABLE_COPY(QCtfLib)
227
public
:
228
explicit
QCtfLib(QObject *parent =
nullptr
) : QObject(parent) {}
229
virtual
~QCtfLib() =
default
;
230
virtual
bool
tracepointEnabled(
const
QCtfTracePointEvent &point) = 0;
231
virtual
void
doTracepoint(
const
QCtfTracePointEvent &point,
const
QByteArray &arr) = 0;
232
virtual
bool
sessionEnabled() = 0;
233
virtual
QCtfTracePointPrivate *initializeTracepoint(
const
QCtfTracePointEvent &point) = 0;
234
virtual
void
shutdown(
bool
*shutdown) = 0;
235
};
236
237
QT_END_NAMESPACE
238
239
#
endif
QByteArray::FromBase64Result
\inmodule QtCore
Definition
qbytearray.h:824
QCtfLib
Definition
qctf_p.h:224
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
s_prevent_recursion
static bool s_prevent_recursion
Definition
qctf.cpp:22
BUILD_LIBRARY
#define BUILD_LIBRARY
Definition
qctf.cpp:5
_tracepoint_enabled
bool _tracepoint_enabled(const QCtfTracePointEvent &point)
Definition
qctf.cpp:124
s_plugin
static QCtfLib * s_plugin
Definition
qctf.cpp:24
_do_tracepoint
void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)
Definition
qctf.cpp:131
s_shutdown
static bool s_shutdown
Definition
qctf.cpp:23
loadPlugin
static bool loadPlugin(bool &retry)
Definition
qctf.cpp:78
s_initialized
static bool s_initialized
Definition
qctf.cpp:20
_initialize_tracepoint
QCtfTracePointPrivate * _initialize_tracepoint(const QCtfTracePointEvent &point)
Definition
qctf.cpp:139
s_triedLoading
static bool s_triedLoading
Definition
qctf.cpp:21
QCtfPluginIID
#define QCtfPluginIID
Definition
qctf.cpp:76
initialize
static bool initialize()
Definition
qctf.cpp:98
QCtfTraceMetadata
Definition
qctf_p.h:38
QCtfTracePointEvent
Definition
qctf_p.h:52
QCtfTracePointPrivate
Definition
qctflib_p.h:36
QCtfTracePointProvider
Definition
qctf_p.h:27
qtbase
src
corelib
tracing
qctf_p.h
Generated on
for Qt by
1.18.0