mirror of
https://github.com/overte-org/overte.git
synced 2025-04-11 12:20:26 +02:00
271 lines
9.4 KiB
C++
271 lines
9.4 KiB
C++
//
|
|
// Created by Bradley Austin Davis 2015/06/17
|
|
// Copyright 2013 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
#ifndef hifi_Stats_h
|
|
#define hifi_Stats_h
|
|
|
|
#include <OffscreenQmlElement.h>
|
|
#include <RenderArgs.h>
|
|
#include <QVector3D>
|
|
#include <AudioIOStats.h>
|
|
|
|
#define STATS_PROPERTY(type, name, initialValue) \
|
|
Q_PROPERTY(type name READ name NOTIFY name##Changed) \
|
|
public: \
|
|
type name() { return _##name; }; \
|
|
private: \
|
|
type _##name{ initialValue };
|
|
|
|
|
|
class Stats : public QQuickItem {
|
|
Q_OBJECT
|
|
HIFI_QML_DECL
|
|
Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded NOTIFY expandedChanged)
|
|
Q_PROPERTY(bool timingExpanded READ isTimingExpanded NOTIFY timingExpandedChanged)
|
|
Q_PROPERTY(QString monospaceFont READ monospaceFont CONSTANT)
|
|
|
|
STATS_PROPERTY(int, serverCount, 0)
|
|
// How often the app is creating new gpu::Frames
|
|
STATS_PROPERTY(float, framerate, 0)
|
|
// How often the display plugin is executing a given frame
|
|
STATS_PROPERTY(float, renderrate, 0)
|
|
// How often the display plugin is presenting to the device
|
|
STATS_PROPERTY(float, presentrate, 0)
|
|
// How often the display device reprojecting old frames
|
|
STATS_PROPERTY(float, stutterrate, 0)
|
|
|
|
STATS_PROPERTY(int, appdropped, 0)
|
|
STATS_PROPERTY(int, longsubmits, 0)
|
|
STATS_PROPERTY(int, longrenders, 0)
|
|
STATS_PROPERTY(int, longframes, 0)
|
|
|
|
STATS_PROPERTY(float, presentnewrate, 0)
|
|
STATS_PROPERTY(float, presentdroprate, 0)
|
|
STATS_PROPERTY(int, simrate, 0)
|
|
STATS_PROPERTY(int, avatarSimrate, 0)
|
|
STATS_PROPERTY(int, avatarCount, 0)
|
|
STATS_PROPERTY(int, updatedAvatarCount, 0)
|
|
STATS_PROPERTY(int, notUpdatedAvatarCount, 0)
|
|
STATS_PROPERTY(int, packetInCount, 0)
|
|
STATS_PROPERTY(int, packetOutCount, 0)
|
|
STATS_PROPERTY(float, mbpsIn, 0)
|
|
STATS_PROPERTY(float, mbpsOut, 0)
|
|
STATS_PROPERTY(float, assetMbpsIn, 0)
|
|
STATS_PROPERTY(float, assetMbpsOut, 0)
|
|
STATS_PROPERTY(int, audioPing, 0)
|
|
STATS_PROPERTY(int, avatarPing, 0)
|
|
STATS_PROPERTY(int, entitiesPing, 0)
|
|
STATS_PROPERTY(int, assetPing, 0)
|
|
STATS_PROPERTY(int, messagePing, 0)
|
|
STATS_PROPERTY(QVector3D, position, QVector3D(0, 0, 0))
|
|
STATS_PROPERTY(float, speed, 0)
|
|
STATS_PROPERTY(float, yaw, 0)
|
|
STATS_PROPERTY(int, avatarMixerInKbps, 0)
|
|
STATS_PROPERTY(int, avatarMixerInPps, 0)
|
|
STATS_PROPERTY(int, avatarMixerOutKbps, 0)
|
|
STATS_PROPERTY(int, avatarMixerOutPps, 0)
|
|
STATS_PROPERTY(float, myAvatarSendRate, 0)
|
|
|
|
STATS_PROPERTY(int, audioMixerInKbps, 0)
|
|
STATS_PROPERTY(int, audioMixerInPps, 0)
|
|
STATS_PROPERTY(int, audioMixerOutKbps, 0)
|
|
STATS_PROPERTY(int, audioMixerOutPps, 0)
|
|
STATS_PROPERTY(int, audioMixerKbps, 0)
|
|
STATS_PROPERTY(int, audioMixerPps, 0)
|
|
STATS_PROPERTY(int, audioOutboundPPS, 0)
|
|
STATS_PROPERTY(int, audioSilentOutboundPPS, 0)
|
|
STATS_PROPERTY(int, audioAudioInboundPPS, 0)
|
|
STATS_PROPERTY(int, audioSilentInboundPPS, 0)
|
|
STATS_PROPERTY(int, audioPacketLoss, 0)
|
|
STATS_PROPERTY(QString, audioCodec, QString())
|
|
STATS_PROPERTY(QString, audioNoiseGate, QString())
|
|
|
|
STATS_PROPERTY(int, downloads, 0)
|
|
STATS_PROPERTY(int, downloadLimit, 0)
|
|
STATS_PROPERTY(int, downloadsPending, 0)
|
|
Q_PROPERTY(QStringList downloadUrls READ downloadUrls NOTIFY downloadUrlsChanged)
|
|
STATS_PROPERTY(int, processing, 0)
|
|
STATS_PROPERTY(int, processingPending, 0)
|
|
STATS_PROPERTY(int, triangles, 0)
|
|
STATS_PROPERTY(int, quads, 0)
|
|
STATS_PROPERTY(int, materialSwitches, 0)
|
|
STATS_PROPERTY(int, itemConsidered, 0)
|
|
STATS_PROPERTY(int, itemOutOfView, 0)
|
|
STATS_PROPERTY(int, itemTooSmall, 0)
|
|
STATS_PROPERTY(int, itemRendered, 0)
|
|
STATS_PROPERTY(int, shadowConsidered, 0)
|
|
STATS_PROPERTY(int, shadowOutOfView, 0)
|
|
STATS_PROPERTY(int, shadowTooSmall, 0)
|
|
STATS_PROPERTY(int, shadowRendered, 0)
|
|
STATS_PROPERTY(QString, sendingMode, QString())
|
|
STATS_PROPERTY(QString, packetStats, QString())
|
|
STATS_PROPERTY(QString, lodStatus, QString())
|
|
STATS_PROPERTY(QString, timingStats, QString())
|
|
STATS_PROPERTY(int, serverElements, 0)
|
|
STATS_PROPERTY(int, serverInternal, 0)
|
|
STATS_PROPERTY(int, serverLeaves, 0)
|
|
STATS_PROPERTY(int, localElements, 0)
|
|
STATS_PROPERTY(int, localInternal, 0)
|
|
STATS_PROPERTY(int, localLeaves, 0)
|
|
STATS_PROPERTY(int, rectifiedTextureCount, 0)
|
|
STATS_PROPERTY(int, decimatedTextureCount, 0)
|
|
STATS_PROPERTY(int, gpuBuffers, 0)
|
|
STATS_PROPERTY(int, gpuBufferMemory, 0)
|
|
STATS_PROPERTY(int, gpuTextures, 0)
|
|
STATS_PROPERTY(int, glContextSwapchainMemory, 0)
|
|
STATS_PROPERTY(int, qmlTextureMemory, 0)
|
|
STATS_PROPERTY(int, texturePendingTransfers, 0)
|
|
STATS_PROPERTY(int, gpuTextureMemory, 0)
|
|
STATS_PROPERTY(int, gpuTextureResidentMemory, 0)
|
|
STATS_PROPERTY(int, gpuTextureFramebufferMemory, 0)
|
|
STATS_PROPERTY(int, gpuTextureResourceMemory, 0)
|
|
STATS_PROPERTY(int, gpuTextureExternalMemory, 0)
|
|
STATS_PROPERTY(QString, gpuTextureMemoryPressureState, QString())
|
|
STATS_PROPERTY(int, gpuFreeMemory, 0)
|
|
STATS_PROPERTY(float, gpuFrameTime, 0)
|
|
STATS_PROPERTY(float, batchFrameTime, 0)
|
|
STATS_PROPERTY(float, engineFrameTime, 0)
|
|
STATS_PROPERTY(float, avatarSimulationTime, 0)
|
|
|
|
public:
|
|
static Stats* getInstance();
|
|
|
|
Stats(QQuickItem* parent = nullptr);
|
|
bool includeTimingRecord(const QString& name);
|
|
void setRenderDetails(const RenderDetails& details);
|
|
const QString& monospaceFont() {
|
|
return _monospaceFont;
|
|
}
|
|
|
|
void updateStats(bool force = false);
|
|
|
|
bool isExpanded() { return _expanded; }
|
|
bool isTimingExpanded() { return _timingExpanded; }
|
|
|
|
void setExpanded(bool expanded) {
|
|
if (_expanded != expanded) {
|
|
_expanded = expanded;
|
|
emit expandedChanged();
|
|
}
|
|
}
|
|
|
|
QStringList downloadUrls () { return _downloadUrls; }
|
|
|
|
public slots:
|
|
void forceUpdateStats() { updateStats(true); }
|
|
|
|
signals:
|
|
void longsubmitsChanged();
|
|
void longrendersChanged();
|
|
void longframesChanged();
|
|
void appdroppedChanged();
|
|
void framerateChanged();
|
|
void expandedChanged();
|
|
void timingExpandedChanged();
|
|
void serverCountChanged();
|
|
void renderrateChanged();
|
|
void presentrateChanged();
|
|
void presentnewrateChanged();
|
|
void presentdroprateChanged();
|
|
void stutterrateChanged();
|
|
void simrateChanged();
|
|
void avatarSimrateChanged();
|
|
void avatarCountChanged();
|
|
void updatedAvatarCountChanged();
|
|
void notUpdatedAvatarCountChanged();
|
|
void packetInCountChanged();
|
|
void packetOutCountChanged();
|
|
void mbpsInChanged();
|
|
void mbpsOutChanged();
|
|
void assetMbpsInChanged();
|
|
void assetMbpsOutChanged();
|
|
void audioPingChanged();
|
|
void avatarPingChanged();
|
|
void entitiesPingChanged();
|
|
void assetPingChanged();
|
|
void messagePingChanged();
|
|
void positionChanged();
|
|
void speedChanged();
|
|
void yawChanged();
|
|
void avatarMixerInKbpsChanged();
|
|
void avatarMixerInPpsChanged();
|
|
void avatarMixerOutKbpsChanged();
|
|
void avatarMixerOutPpsChanged();
|
|
void myAvatarSendRateChanged();
|
|
void audioMixerInKbpsChanged();
|
|
void audioMixerInPpsChanged();
|
|
void audioMixerOutKbpsChanged();
|
|
void audioMixerOutPpsChanged();
|
|
void audioMixerKbpsChanged();
|
|
void audioMixerPpsChanged();
|
|
void audioOutboundPPSChanged();
|
|
void audioSilentOutboundPPSChanged();
|
|
void audioAudioInboundPPSChanged();
|
|
void audioSilentInboundPPSChanged();
|
|
void audioPacketLossChanged();
|
|
void audioCodecChanged();
|
|
void audioNoiseGateChanged();
|
|
|
|
void downloadsChanged();
|
|
void downloadLimitChanged();
|
|
void downloadsPendingChanged();
|
|
void downloadUrlsChanged();
|
|
void processingChanged();
|
|
void processingPendingChanged();
|
|
void trianglesChanged();
|
|
void quadsChanged();
|
|
void materialSwitchesChanged();
|
|
void itemConsideredChanged();
|
|
void itemOutOfViewChanged();
|
|
void itemTooSmallChanged();
|
|
void itemRenderedChanged();
|
|
void shadowConsideredChanged();
|
|
void shadowOutOfViewChanged();
|
|
void shadowTooSmallChanged();
|
|
void shadowRenderedChanged();
|
|
void sendingModeChanged();
|
|
void packetStatsChanged();
|
|
void lodStatusChanged();
|
|
void serverElementsChanged();
|
|
void serverInternalChanged();
|
|
void serverLeavesChanged();
|
|
void localElementsChanged();
|
|
void localInternalChanged();
|
|
void localLeavesChanged();
|
|
void timingStatsChanged();
|
|
void glContextSwapchainMemoryChanged();
|
|
void qmlTextureMemoryChanged();
|
|
void texturePendingTransfersChanged();
|
|
void gpuBuffersChanged();
|
|
void gpuBufferMemoryChanged();
|
|
void gpuTexturesChanged();
|
|
void gpuTextureMemoryChanged();
|
|
void gpuTextureResidentMemoryChanged();
|
|
void gpuTextureFramebufferMemoryChanged();
|
|
void gpuTextureResourceMemoryChanged();
|
|
void gpuTextureExternalMemoryChanged();
|
|
void gpuTextureMemoryPressureStateChanged();
|
|
void gpuFreeMemoryChanged();
|
|
void gpuFrameTimeChanged();
|
|
void batchFrameTimeChanged();
|
|
void engineFrameTimeChanged();
|
|
void avatarSimulationTimeChanged();
|
|
void rectifiedTextureCountChanged();
|
|
void decimatedTextureCountChanged();
|
|
|
|
private:
|
|
int _recentMaxPackets{ 0 } ; // recent max incoming voxel packets to process
|
|
bool _resetRecentMaxPacketsSoon{ true };
|
|
bool _expanded{ false };
|
|
bool _timingExpanded{ false };
|
|
QString _monospaceFont;
|
|
const AudioIOStats* _audioStats;
|
|
QStringList _downloadUrls = QStringList();
|
|
};
|
|
|
|
#endif // hifi_Stats_h
|