Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qctf.cpp
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#define BUILD_LIBRARY
5
6#include <qthread.h>
7#include <qpluginloader.h>
8#include <qfileinfo.h>
9#include <qdir.h>
10
11#include "qctf_p.h"
12
14
15static bool s_initialized = false;
16static bool s_triedLoading = false;
17static bool s_prevent_recursion = false;
18static bool s_shutdown = false;
19static QCtfLib* s_plugin = nullptr;
20
21#if defined(Q_OS_ANDROID)
22static QString findPlugin(const QString &plugin)
23{
24 QString pluginPath = QString::fromUtf8(qgetenv("QT_PLUGIN_PATH"));
25 QDir dir(pluginPath);
26 const QStringList files = dir.entryList(QDir::Files);
27 for (const QString &file : files) {
28 if (file.contains(plugin))
29 return QFileInfo(pluginPath + QLatin1Char('/') + file).absoluteFilePath();
30 }
31 return {};
32}
33#endif
34
35static bool loadPlugin(bool &retry)
36{
37 retry = false;
38#ifdef Q_OS_WIN
39#ifdef QT_DEBUG
40 QPluginLoader loader(QStringLiteral("tracing/QCtfTracePlugind.dll"));
41#else
42 QPluginLoader loader(QStringLiteral("tracing/QCtfTracePlugin.dll"));
43#endif
44#elif defined(Q_OS_ANDROID)
45
46 QString plugin = findPlugin(QStringLiteral("QCtfTracePlugin"));
47 if (plugin.isEmpty()) {
48 retry = true;
49 return false;
50 }
51 QPluginLoader loader(plugin);
52#else
53 QPluginLoader loader(QStringLiteral("tracing/libQCtfTracePlugin.so"));
54#endif
55
56 if (!loader.isLoaded()) {
57 if (!loader.load())
58 return false;
59 }
60 s_plugin = qobject_cast<QCtfLib *>(loader.instance());
61 if (!s_plugin)
62 return false;
64 return true;
65}
66
67static bool initialize()
68{
70 return false;
72 return s_initialized;
74 bool retry = false;
75 if (!loadPlugin(retry)) {
76 if (!retry) {
77 s_triedLoading = true;
78 s_initialized = false;
79 }
80 } else {
82 if (!enabled) {
83 s_triedLoading = true;
84 s_initialized = false;
85 } else {
86 s_initialized = true;
87 }
88 }
89 s_prevent_recursion = false;
90 return s_initialized;
91}
92
94{
95 if (!initialize())
96 return false;
97 return s_plugin ? s_plugin->tracepointEnabled(point) : false;
98}
99
100void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)
101{
102 if (!initialize())
103 return;
104 if (s_plugin)
105 s_plugin->doTracepoint(point, arr);
106}
107
109{
110 if (!initialize())
111 return nullptr;
112 return s_plugin ? s_plugin->initializeTracepoint(point) : nullptr;
113}
114
116
117#include "moc_qctf_p.cpp"
\inmodule QtCore
Definition qbytearray.h:57
virtual void shutdown(bool *shutdown)=0
virtual bool sessionEnabled()=0
virtual void doTracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)=0
virtual QCtfTracePointPrivate * initializeTracepoint(const QCtfTracePointEvent &point)=0
virtual bool tracepointEnabled(const QCtfTracePointEvent &point)=0
\inmodule QtCore
Definition qdir.h:19
@ Files
Definition qdir.h:22
\inmodule QtCore \reentrant
Definition qfileinfo.h:22
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5857
Combined button and popup list for selecting options.
static bool s_triedLoading
Definition qctf.cpp:16
bool _tracepoint_enabled(const QCtfTracePointEvent &point)
Definition qctf.cpp:93
void _do_tracepoint(const QCtfTracePointEvent &point, const QByteArray &arr)
Definition qctf.cpp:100
static QCtfLib * s_plugin
Definition qctf.cpp:19
static QT_BEGIN_NAMESPACE bool s_initialized
Definition qctf.cpp:15
static bool loadPlugin(bool &retry)
Definition qctf.cpp:35
static bool s_prevent_recursion
Definition qctf.cpp:17
QCtfTracePointPrivate * _initialize_tracepoint(const QCtfTracePointEvent &point)
Definition qctf.cpp:108
static bool initialize()
Definition qctf.cpp:67
static bool s_shutdown
Definition qctf.cpp:18
GLenum GLenum GLsizei const GLuint GLboolean enabled
#define QStringLiteral(str)
static QString absoluteFilePath(const Options *options, const QString &relativeFileName)
Definition main.cpp:1791
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
QFile file
[0]
QString dir
[11]
QStringList files
[8]
\inmodule QtCore \reentrant
Definition qchar.h:17