Revision control

Copy as Markdown

// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QQUICK3DRENDERSTATS_H
#define QQUICK3DRENDERSTATS_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtQuick3D/qtquick3dglobal.h>
#include <QtCore/qobject.h>
#include <QtCore/qelapsedtimer.h>
#include <ssg/qssgrendercontextcore.h>
#include <QtQuick3DRuntimeRender/private/qssgrhicontext_p.h>
#include <QtQml/qqmlregistration.h>
QT_BEGIN_NAMESPACE
struct QSSGRenderLayer;
class QQuickItem;
class Q_QUICK3D_EXPORT QQuick3DRenderStats : public QObject
{
Q_OBJECT
Q_PROPERTY(int fps READ fps NOTIFY fpsChanged)
Q_PROPERTY(float frameTime READ frameTime NOTIFY frameTimeChanged)
Q_PROPERTY(float renderTime READ renderTime NOTIFY renderTimeChanged)
Q_PROPERTY(float renderPrepareTime READ renderPrepareTime NOTIFY renderTimeChanged)
Q_PROPERTY(float syncTime READ syncTime NOTIFY syncTimeChanged)
Q_PROPERTY(float maxFrameTime READ maxFrameTime NOTIFY maxFrameTimeChanged)
Q_PROPERTY(bool extendedDataCollectionEnabled READ extendedDataCollectionEnabled WRITE setExtendedDataCollectionEnabled NOTIFY extendedDataCollectionEnabledChanged)
Q_PROPERTY(quint64 drawCallCount READ drawCallCount NOTIFY drawCallCountChanged)
Q_PROPERTY(quint64 drawVertexCount READ drawVertexCount NOTIFY drawVertexCountChanged)
Q_PROPERTY(quint64 imageDataSize READ imageDataSize NOTIFY imageDataSizeChanged)
Q_PROPERTY(quint64 meshDataSize READ meshDataSize NOTIFY meshDataSizeChanged)
Q_PROPERTY(int renderPassCount READ renderPassCount NOTIFY renderPassCountChanged)
Q_PROPERTY(QString renderPassDetails READ renderPassDetails NOTIFY renderPassDetailsChanged)
Q_PROPERTY(QString textureDetails READ textureDetails NOTIFY textureDetailsChanged)
Q_PROPERTY(QString meshDetails READ meshDetails NOTIFY meshDetailsChanged)
Q_PROPERTY(int pipelineCount READ pipelineCount NOTIFY pipelineCountChanged)
Q_PROPERTY(qint64 materialGenerationTime READ materialGenerationTime NOTIFY materialGenerationTimeChanged)
Q_PROPERTY(qint64 effectGenerationTime READ effectGenerationTime NOTIFY effectGenerationTimeChanged)
Q_PROPERTY(qint64 pipelineCreationTime READ pipelineCreationTime NOTIFY pipelineCreationTimeChanged)
Q_PROPERTY(quint32 vmemAllocCount READ vmemAllocCount NOTIFY vmemAllocCountChanged)
Q_PROPERTY(quint64 vmemUsedBytes READ vmemUsedBytes NOTIFY vmemUsedBytesChanged)
Q_PROPERTY(QString graphicsApiName READ graphicsApiName NOTIFY graphicsApiNameChanged)
Q_PROPERTY(float lastCompletedGpuTime READ lastCompletedGpuTime NOTIFY lastCompletedGpuTimeChanged)
QML_NAMED_ELEMENT(RenderStats)
QML_UNCREATABLE("The type is internal and only intended to be accessed by user through a View3D.")
QML_ADDED_IN_VERSION(6, 10)
public:
QQuick3DRenderStats(QObject *parent = nullptr);
int fps() const;
float frameTime() const;
float renderTime() const;
float renderPrepareTime() const;
float syncTime() const;
float maxFrameTime() const;
void startSync();
void endSync(bool dump = false);
void startRender();
void startRenderPrepare();
void endRenderPrepare();
void endRender(bool dump = false);
void setRhiContext(QSSGRhiContext *ctx, QSSGRenderLayer *layer);
bool extendedDataCollectionEnabled() const;
void setExtendedDataCollectionEnabled(bool enable);
quint64 drawCallCount() const;
quint64 drawVertexCount() const;
quint64 imageDataSize() const;
quint64 meshDataSize() const;
int renderPassCount() const;
QString renderPassDetails() const;
QString textureDetails() const;
QString meshDetails() const;
int pipelineCount() const;
qint64 materialGenerationTime() const;
qint64 effectGenerationTime() const;
qint64 pipelineCreationTime() const;
quint32 vmemAllocCount() const;
quint64 vmemUsedBytes() const;
QString graphicsApiName() const;
float lastCompletedGpuTime() const;
Q_INVOKABLE void releaseCachedResources();
void setWindow(QQuickWindow *window);
Q_SIGNALS:
void fpsChanged();
void frameTimeChanged();
void renderTimeChanged();
void syncTimeChanged();
void maxFrameTimeChanged();
void extendedDataCollectionEnabledChanged();
void drawCallCountChanged();
void drawVertexCountChanged();
void imageDataSizeChanged();
void meshDataSizeChanged();
void renderPassCountChanged();
void renderPassDetailsChanged();
void textureDetailsChanged();
void meshDetailsChanged();
void pipelineCountChanged();
void materialGenerationTimeChanged();
void effectGenerationTimeChanged();
void pipelineCreationTimeChanged();
void vmemAllocCountChanged();
void vmemUsedBytesChanged();
void graphicsApiNameChanged();
void lastCompletedGpuTimeChanged();
private Q_SLOTS:
void onFrameSwapped();
private:
float timestamp() const;
void processRhiContextStats();
void notifyRhiContextStats();
QElapsedTimer m_frameTimer;
int m_frameCount = 0;
float m_secTimer = 0;
float m_notifyTimer = 0;
float m_renderStartTime = 0;
float m_renderPrepareStartTime = 0;
float m_syncStartTime = 0;
float m_internalMaxFrameTime = 0;
float m_maxFrameTime = 0;
int m_fps = 0;
struct Results {
float frameTime = 0;
float renderTime = 0;
float renderPrepareTime = 0;
float syncTime = 0;
float lastCompletedGpuTime = 0;
quint64 drawCallCount = 0;
quint64 drawVertexCount = 0;
quint64 imageDataSize = 0;
quint64 meshDataSize = 0;
int renderPassCount = 0;
QString renderPassDetails;
QString textureDetails;
QString meshDetails;
QSet<QRhiTexture *> activeTextures;
QSet<QSSGRenderMesh *> activeMeshes;
int pipelineCount = 0;
qint64 materialGenerationTime = 0;
qint64 effectGenerationTime = 0;
QRhiStats rhiStats;
};
Results m_results;
Results m_notifiedResults;
QSSGRhiContextStats *m_contextStats = nullptr;
bool m_extendedDataCollectionEnabled = false;
QSSGRenderLayer *m_layer = nullptr;
QMetaObject::Connection m_frameSwappedConnection;
QQuickWindow *m_window = nullptr;
bool m_renderingThisFrame = false;
QString m_graphicsApiName;
};
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QQuick3DRenderStats *)
#endif // QQUICK3DRENDERSTATS_H