4#ifndef QQUICK3DPROFILER_P_H
5#define QQUICK3DPROFILER_P_H
18#include <QtCore/private/qabstractanimation_p.h>
19#include <QtQuick/private/qtquickglobal_p.h>
20#include <QtQuick3DUtils/private/qtquick3dutilsglobal_p.h>
23#if QT_CONFIG(qml_debug)
24#include <QtQml/private/qqmlprofilerdefinitions_p.h>
27#include <QtCore/qurl.h>
28#include <QtCore/qsize.h>
29#include <QtCore/qmutex.h>
30#include <QtCore/qthreadstorage.h>
34#if !QT_CONFIG(qml_debug)
36#define Q_QUICK3D_PROFILE_IF_ENABLED(feature, Code)
42#define Q_QUICK3D_PROFILING_ENABLED false
43#define Q_QUICK3D_PROFILE_REGISTER_D(obj)
44#define Q_QUICK3D_PROFILE_REGISTER(obj)
45#define Q_QUICK3D_PROFILE_ID
46#define Q_QUICK3D_PROFILE_GET_ID
47#define Q_QUICK3D_PROFILE_ASSIGN_ID_SG(obj, bgnode)
48#define Q_QUICK3D_PROFILE_ASSIGN_ID(bgnode, obj)
52#define Q_QUICK3D_PROFILE_IF_ENABLED(feature, Code)\
53 if (QQuick3DProfiler::featuresEnabled & (1 << feature)) {\
58#define Q_QUICK3D_PROFILING_ENABLED (QQuick3DProfiler::featuresEnabled > 0)
59#define Q_QUICK3D_PROFILE_REGISTER_D(obj) d->profilingId = QQuick3DProfiler::registerObject(obj)
60#define Q_QUICK3D_PROFILE_REGISTER(obj) profilingId = QQuick3DProfiler::registerObject(obj)
61#define Q_QUICK3D_PROFILE_ID int profilingId = -1;
62#define Q_QUICK3D_PROFILE_GET_ID(Object) \
63 QQuick3DObjectPrivate::get(Object)->profilingId
64#define Q_QUICK3D_PROFILE_ASSIGN_ID_SG(obj, bgnode) \
66 (bgnode)->profilingId = Q_QUICK3D_PROFILE_GET_ID(obj);
67#define Q_QUICK3D_PROFILE_ASSIGN_ID(bgnode, obj) \
68 (obj)->profilingId = (bgnode)->profilingId;
71struct Q_QUICK3DUTILS_EXPORT QQuick3DProfilerData
73 static constexpr int s_numSupportedIds = 2;
74 QQuick3DProfilerData() {}
77 :
time(
time), messageType(messageType), detailType(detailType), subdata1(
d1), subdata2(
d2) {}
92 static const uint s_numSceneGraphTimings = 2;
93 static const uint s_numNestedTimings = 5;
96 qint64 values[s_numNestedTimings][s_numSceneGraphTimings + 1];
101 Timings timings[
size];
105 template<
int type,
bool inc>
112 Q_ASSERT(timings->nesting < s_numNestedTimings);
113 t = timings->values[timings->nesting];
117 t = timings->values[timings->nesting];
132 template<
int FrameType>
135 s_instance->m_sceneGraphData.timings<
FrameType,
true>()[
position] = s_instance->timestamp();
137 template<
int FrameType>
140 qint64 *timings = s_instance->m_sceneGraphData.timings<
FrameType,
false>();
141 timings[
position] = s_instance->timestamp();
142 s_instance->processMessage(QQuick3DProfilerData(
143 timings[
position], Quick3DFrame, FrameType,
144 timings[1] - timings[0],
147 template<
int FrameType>
150 qint64 *timings = s_instance->m_sceneGraphData.timings<
FrameType,
false>();
151 timings[
position] = s_instance->timestamp();
152 int sid = registerString(
str);
155 s_instance->processMessage(QQuick3DProfilerData(
156 timings[
position], Quick3DFrame, FrameType,
157 timings[1] - timings[0],
161 template<
int FrameType>
164 qint64 *timings = s_instance->m_sceneGraphData.timings<
FrameType,
false>();
165 timings[
position] = s_instance->timestamp();
168 s_instance->processMessage(QQuick3DProfilerData(
169 timings[
position], Quick3DFrame, FrameType,
170 timings[1] - timings[0],
174 template<
int FrameType>
177 qint64 *timings = s_instance->m_sceneGraphData.timings<
FrameType,
false>();
178 timings[
position] = s_instance->timestamp();
179 int sid = registerString(
str);
181 poids << poid << sid;
182 s_instance->processMessage(QQuick3DProfilerData(
183 timings[
position], Quick3DFrame, FrameType,
184 timings[1] - timings[0],
188 template<
int FrameType>
191 qint64 *timings = s_instance->m_sceneGraphData.timings<
FrameType,
false>();
192 timings[
position] = s_instance->timestamp();
193 s_instance->processMessage(QQuick3DProfilerData(
194 timings[
position], Quick3DFrame, FrameType,
195 timings[1] - timings[0],
201 qint64 timestamp() {
return m_timer.nsecsElapsed(); }
203 static quint64 featuresEnabled;
209 static int registerObject(
const QObject *
object);
210 static int registerString(
const QByteArray &
string);
217 static QMutex s_eventDataMutex;
224 QQuick3DProfilerSceneGraphData m_sceneGraphData;
228 void processMessage(
const QQuick3DProfilerData &
message)
234 void startProfilingImpl(
quint64 features);
235 void stopProfilingImpl();
236 void reportDataImpl();
242#define Q_QUICK3D_PROFILE(feature, Method) \
243 Q_QUICK3D_PROFILE_IF_ENABLED(feature, QQuick3DProfiler::Method)
245#define Q_QUICK3D_PROFILE_START(Type) \
246 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
247 (QQuick3DProfiler::recordSceneGraphTimestamp<Type>(QQuick3DProfiler::Quick3DStageBegin)))
249#define Q_QUICK3D_PROFILE_END(Type) \
250 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
251 (QQuick3DProfiler::reportQuick3DFrame<Type>(QQuick3DProfiler::Quick3DStageEnd, 0, 0)))
253#define Q_QUICK3D_PROFILE_END_WITH_PAYLOAD(Type, Payload) \
254 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
255 (QQuick3DProfiler::reportQuick3DFrame<Type>(QQuick3DProfiler::Quick3DStageEnd, \
258#define Q_QUICK3D_PROFILE_END_WITH_STRING(Type, Payload, Str) \
259 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
260 (QQuick3DProfiler::reportQuick3DFrame<Type>(QQuick3DProfiler::Quick3DStageEnd, \
262#define Q_QUICK3D_PROFILE_END_WITH_ID(Type, Payload, POID) \
263 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
264 (QQuick3DProfiler::reportQuick3DFrame<Type>(QQuick3DProfiler::Quick3DStageEnd, \
266#define Q_QUICK3D_PROFILE_END_WITH_IDS(Type, Payload, POIDs) \
267 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
268 (QQuick3DProfiler::reportQuick3DFrame<Type>(QQuick3DProfiler::Quick3DStageEnd, \
270#define Q_QUICK3D_PROFILE_END_WITH_ALL(Type, Payload, POID, Str) \
271 Q_QUICK3D_PROFILE_IF_ENABLED(QQuick3DProfiler::ProfileQuick3D, \
272 (QQuick3DProfiler::reportQuick3DFrame<Type>(QQuick3DProfiler::Quick3DStageEnd, \
273 Payload, POID, Str)))
275#define QSSG_RENDERPASS_NAME(passName, level, face) \
276 QByteArrayLiteral(passName)+ QByteArrayLiteral("_level_") + QByteArray::number(level) \
277 + QByteArrayLiteral("_face_") + QByteArrayView(QSSGBaseTypeHelpers::toString(QSSGRenderTextureCubeFace(face)))
T & localData()
Returns a reference to the data that was set by the calling thread.
Combined button and popup list for selecting options.
GLenum GLsizei GLsizei GLint * values
[15]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLenum GLsizei const GLuint * ids
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
unsigned long long quint64
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent