//// 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 <QtGui/QVector3D> #include <OffscreenQmlElement.h>#include <AudioIOStats.h>#include <render/Args.h>#include <shared/QtHelpers.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 }; /*@jsdoc * The <code>Stats</code> API provides statistics on Interface and domain operation, per the statistics overlay. * * <p><strong>Note:</strong> This API is primarily an internal diagnostics tool and is provided "as is".</p> * * @namespace Stats * * @hifi-interface * @hifi-client-entity * @hifi-avatar * @hifi-server-entity * @hifi-assignment-client * * @property {boolean} expanded - <code>true</code> if the statistics overlay should be in expanded form when the overlay is * displayed, <code>false</code> if it shouldn't be expanded. * @property {boolean} timingExpanded - <code>true</code> if timing details should be displayed when the statistics overlay is * displayed in expanded form, <code>false</code> if timing details should not be displayed. Set by the menu item, * Developer > Timing > Performance Timer > Display Timing Details. * <em>Read-only.</em> * @property {string} monospaceFont - The name of the monospace font used in the statistics overlay. * <em>Read-only.</em> * * @property {number} serverCount - The number of servers that Interface is connected to. * <em>Read-only.</em> * @property {number} renderrate - The rate at which new GPU frames are being created, in Hz. * <em>Read-only.</em> * @property {number} presentrate - The rate at which the display plugin is presenting to the display device, in Hz. * <em>Read-only.</em> * @property {number} stutterrate - The rate at which the display plugin is reprojecting old GPU frames, in Hz. * <em>Read-only.</em> * * @property {number} appdropped - The number of times a frame has not been provided to the display device in time. * <em>Read-only.</em> * @property {number} longsubmits - The number of times the display device has taken longer than 11ms to return after being * given a frame. * <em>Read-only.</em> * @property {number} longrenders - The number of times it has taken longer than 11ms to submit a new frame to the display * device. * <em>Read-only.</em> * @property {number} longframes - The number of times <code>longsubmits + longrenders</code> has taken longer than 15ms. * <em>Read-only.</em> * * @property {number} presentnewrate - The rate at which the display plugin is presenting new GPU frames, in Hz. * <em>Read-only.</em> * @property {number} presentdroprate - The rate at which the display plugin is dropping GPU frames, in Hz. * <em>Read-only.</em> * @property {number} gameLoopRate - The rate at which the game loop is running, in Hz. * <em>Read-only.</em> * @property {number} refreshRateTarget - The current target refresh rate, in Hz, per the current <code>refreshRateMode</code> * and <code>refreshRateRegime</code> if in desktop mode; a higher rate if in VR mode. * <em>Read-only.</em> * @property {RefreshRateProfileName} refreshRateMode - The current refresh rate profile. * <em>Read-only.</em> * @property {RefreshRateRegimeName} refreshRateRegime - The current refresh rate regime. * <em>Read-only.</em> * @property {UXModeName} uxMode - The user experience (UX) mode that Interface is running in. * <em>Read-only.</em> * @property {number} avatarCount - The number of avatars in the domain other than the client's. * <em>Read-only.</em> * @property {number} heroAvatarCount - The number avatars in a "hero" zone in the domain, other than the client's. * <em>Read-only.</em> * @property {number} physicsObjectCount - The number of objects that have collisions enabled. * <em>Read-only.</em> * @property {number} updatedAvatarCount - The number of avatars in the domain, other than the client's, that were updated in * the most recent game loop. * <em>Read-only.</em> * @property {number} updatedHeroAvatarCount - The number of avatars in a "hero" zone in the domain, other than the client's, * that were updated in the most recent game loop. * <em>Read-only.</em> * @property {number} notUpdatedAvatarCount - The number of avatars in the domain, other than the client's, that weren't able * to be updated in the most recent game loop because there wasn't enough time to. * <em>Read-only.</em> * @property {number} packetInCount - The number of packets being received from the domain server, in packets per second. * <em>Read-only.</em> * @property {number} packetOutCount - The number of packets being sent to the domain server, in packets per second. * <em>Read-only.</em> * @property {number} mbpsIn - The amount of data being received from the domain server, in megabits per second. * <em>Read-only.</em> * @property {number} mbpsOut - The amount of data being sent to the domain server, in megabits per second. * <em>Read-only.</em> @property {number} assetMbpsIn - The amount of data being received from the asset server, in megabits per second. * <code>0.0</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} assetMbpsOut - The amount of data being sent to the asset server, in megabits per second. * <code>0.0</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} audioPing - The ping time to the audio mixer, in ms. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} avatarPing - The ping time to the avatar mixer, in ms. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} entitiesPing - The average ping time to the entity servers, in ms. * <code>-1</code> if not connected to an entity server. * <em>Read-only.</em> * @property {number} assetPing - The ping time to the asset server, in ms. * <code>-1</code> if not connected to an asset server. * <em>Read-only.</em> * @property {number} messagePing - The ping time to the message mixer, in ms. * <code>-1</code> if not connected to a message mixer. * <em>Read-only.</em> * @property {Vec3} position - The position of the user's avatar. * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {number} speed - The speed of the user's avatar, in m/s. * <em>Read-only.</em> * @property {number} yaw - The yaw of the user's avatar body, in degrees. * <em>Read-only.</em> * @property {number} avatarMixerInKbps - The amount of data being received from the avatar mixer, in kilobits per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} avatarMixerInPps - The number of packets being received from the avatar mixer, in packets per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} avatarMixerOutKbps - The amount of data being sent to the avatar mixer, in kilobits per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} avatarMixerOutPps - The number of packets being sent to the avatar mixer, in packets per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} myAvatarSendRate - The number of avatar packets being sent by the user's avatar, in packets per second. * <em>Read-only.</em> * * @property {number} audioMixerInKbps - The amount of data being received from the audio mixer, in kilobits per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerInPps - The number of packets being received from the audio mixer, in packets per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerOutKbps - The amount of data being sent to the audio mixer, in kilobits per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerOutPps - The number of packets being sent to the audio mixer, in packets per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerKbps - The total amount of data being sent to and received from the audio mixer, in kilobits * per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerPps - The total number of packets being sent to and received from the audio mixer, in packets * per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioOutboundPPS - The number of non-silent audio packets being sent by the user, in packets per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioSilentOutboundPPS - The number of silent audio packets being sent by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioInboundPPS - The number of non-silent audio packets being received by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioAudioInboundPPS - The number of non-silent audio packets being received by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed. Use <code>audioInboundPPS</code> * instead.</p> * @property {number} audioSilentInboundPPS - The number of silent audio packets being received by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioPacketLoss - The number of audio packets being lost, sent to or received from the audio mixer, in %. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {string} audioCodec - The name of the audio codec. * <em>Read-only.</em> * @property {string} audioNoiseGate - The status of the audio noise gate: <code>"Open"</code> or <code>"Closed"</code>. * <em>Read-only.</em> * @property {Vec2} audioInjectors - The number of audio injectors, local and non-local. * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {number} entityPacketsInKbps - The average amount of data being received from entity servers, in kilobits per * second. (Multiply by the number of entity servers to get the total amount of data being received.) * <code>-1</code> if not connected to an entity server. * <em>Read-only.</em> * * @property {number} downloads - The number of downloads in progress. * <em>Read-only.</em> * @property {number} downloadLimit - The maximum number of concurrent downloads. * <em>Read-only.</em> * @property {number} downloadsPending - The number of downloads pending. * <em>Read-only.</em> * @property {string[]} downloadUrls - The download URLs. * <em>Read-only.</em> * @property {number[]} downloadProgresses - The download progresses. * <em>Read-only.</em> * @property {number[]} downloadPriorities - The download priorities. * <em>Read-only.</em> * @property {number} processing - The number of completed downloads being processed. * <em>Read-only.</em> * @property {number} processingPending - The number of completed downloads waiting to be processed. * <em>Read-only.</em> * @property {number} triangles - The number of triangles in the rendered scene. * <em>Read-only.</em> * @property {number} drawcalls - The number of draw calls made for the rendered scene. * <em>Read-only.</em> * @property {number} materialSwitches - The number of material switches performed for the rendered scene. * <em>Read-only.</em> * @property {number} itemConsidered - The number of item considerations made for rendering. * <em>Read-only.</em> * @property {number} itemOutOfView - The number of items out of view. * <em>Read-only.</em> * @property {number} itemTooSmall - The number of items too small to render. * <em>Read-only.</em> * @property {number} itemRendered - The number of items rendered. * <em>Read-only.</em> * @property {number} shadowConsidered - The number of shadow considerations made for rendering. * <em>Read-only.</em> * @property {number} shadowOutOfView - The number of shadows out of view. * <em>Read-only.</em> * @property {number} shadowTooSmall - The number of shadows too small to render. * <em>Read-only.</em> * @property {number} shadowRendered - The number of shadows rendered. * <em>Read-only.</em> * @property {string} sendingMode - Description of the octree sending mode. * <em>Read-only.</em> * @property {string} packetStats - Description of the octree packet processing state. * <em>Read-only.</em> * @property {number} lodAngle - The target LOD angle, in degrees. * <em>Read-only.</em> * @property {number} lodTargetFramerate - The target LOD frame rate, in Hz. * <em>Read-only.</em> * @property {string} lodStatus - Description of the current LOD. * <em>Read-only.</em> * @property {number} numEntityUpdates - The number of entity updates that happened last frame. * <em>Read-only.</em> * @property {number} numNeededEntityUpdates - The total number of entity updates scheduled for last frame. * <em>Read-only.</em> * @property {string} timingStats - Details of the average time (ms) spent in and number of calls made to different parts of * the code. Provided only if <code>timingExpanded</code> is <code>true</code>. Only the top 10 items are provided if * Developer > Timing > Performance Timer > Only Display Top 10 is enabled. * <em>Read-only.</em> * @property {string} gameUpdateStats - Details of the average time (ms) spent in different parts of the game loop. * <em>Read-only.</em> * @property {number} serverElements - The total number of elements in the server octree. * <em>Read-only.</em> * @property {number} serverInternal - The number of internal elements in the server octree. * <em>Read-only.</em> * @property {number} serverLeaves - The number of leaf elements in the server octree. * <em>Read-only.</em> * @property {number} localElements - The total number of elements in the client octree. * <em>Read-only.</em> * @property {number} localInternal - The number of internal elements in the client octree. * <em>Read-only.</em> * @property {number} localLeaves - The number of leaf elements in the client octree. * <em>Read-only.</em> * @property {number} rectifiedTextureCount - The number of textures that have been resized so that their dimensions is a power * of 2 if smaller than 128 pixels, or a multiple of 128 if greater than 128 pixels. * <em>Read-only.</em> * @property {number} decimatedTextureCount - The number of textures that have been reduced in size because they were over the * maximum allowed dimensions of 8192 pixels on desktop or 2048 pixels on mobile. * <em>Read-only.</em> * @property {number} gpuBuffers - The number of OpenGL buffer objects managed by the GPU back-end. * <em>Read-only.</em> * @property {number} gpuBufferMemory - The total memory size of the <code>gpuBuffers</code>, in MB. * <em>Read-only.</em> * @property {number} gpuTextures - The number of OpenGL textures managed by the GPU back-end. This is the sum of the number of * textures managed for <code>gpuTextureResidentMemory</code>, <code>gpuTextureResourceMemory</code>, and * <code>gpuTextureFramebufferMemory</code>. * <em>Read-only.</em> * @property {number} gpuTextureMemory - The total memory size of the <code>gpuTextures</code>, in MB. This is the sum of * <code>gpuTextureResidentMemory</code>, <code>gpuTextureResourceMemory</code>, and * <code>gpuTextureFramebufferMemory</code>. * <em>Read-only.</em> * @property {number} glContextSwapchainMemory - The estimated memory used by the default OpenGL frame buffer, in MB. * <em>Read-only.</em> * @property {number} qmlTextureMemory - The memory size of textures managed by the offscreen QML surface, in MB. * <em>Read-only.</em> * @property {number} texturePendingTransfers - The memory size of textures pending transfer to the GPU, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResidentMemory - The memory size of the "strict" textures that always have their full * resolution in GPU memory, in MB. * <em>Read-only.</em> * @property {number} gpuTextureFramebufferMemory - The memory size of the frame buffer on the GPU, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResourceMemory - The amount of GPU memory that has been allocated for "variable" textures that * don't necessarily always have their full resolution in GPU memory, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResourceIdealMemory - The amount of memory that "variable" textures would take up if they were * all completely loaded, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResourcePopulatedMemory - How much of the GPU memory allocated has actually been populated, in * MB. * <em>Read-only.</em> * @property {string} gpuTextureMemoryPressureState - The stats of the texture transfer engine. * <ul> * <li><code>"Undersubscribed"</code>: There is texture data that can fit in memory but that isn't on the GPU, so more * GPU texture memory should be allocated if possible.</li> * <li><code>"Transfer"</code>: More GPU texture memory has been allocated and texture data is being transferred.</li> * <li><code>"Idle"</code>: Either all texture data has been transferred to the GPU or there is nor more space * available.</li> * </ul> * <em>Read-only.</em> * @property {number} gpuFreeMemory - The amount of GPU memory available after all allocations, in MB. * <em>Read-only.</em> * <p><strong>Note:</strong> This is not a reliable number because OpenGL doesn't have an official method of getting this * information.</p> * @property {number} gpuTextureExternalMemory - The estimated amount of memory consumed by textures being used but that are * not managed by the GPU library, in MB. * <em>Read-only.</em> * @property {Vec2} gpuFrameSize - The dimensions of the frames being rendered, in pixels. * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {number} gpuFrameTime - The time the GPU is spending on a frame, in ms. * <em>Read-only.</em> * @property {number} gpuFrameTimePerPixel - The time the GPU is spending on a pixel, in ns. * <em>Read-only.</em> * @property {number} batchFrameTime - The time being spent batch processing each frame, in ms. * <em>Read-only.</em> * @property {number} engineFrameTime - The time being spent in the render engine each frame, in ms. * <em>Read-only.</em> * @property {number} avatarSimulationTime - The time being spent simulating avatars each frame, in ms. * <em>Read-only.</em> * * @property {number} stylusPicksCount - The number of stylus picks currently in effect. * <em>Read-only.</em> * @property {number} rayPicksCount - The number of ray picks currently in effect. * <em>Read-only.</em> * @property {number} parabolaPicksCount - The number of parabola picks currently in effect. * <em>Read-only.</em> * @property {number} collisionPicksCount - The number of collision picks currently in effect. * <em>Read-only.</em> * @property {Vec3} stylusPicksUpdated - The number of stylus pick intersection that were found in the most recent game loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {Vec3} rayPicksUpdated - The number of ray pick intersections that were found in the most recent game loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {Vec3} parabolaPicksUpdated - The number of parabola pick intersections that were found in the most recent game * loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {Vec3} collisionPicksUpdated - The number of collision pick intersections that were found in the most recent game * loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * * @property {boolean} eventQueueDebuggingOn - <code>true</code> if event queue statistics are provided, <code>false</code> if * they're not. * <em>Read-only.</em> * @property {number} mainThreadQueueDepth - The number of events in the main thread's event queue. * Only provided if <code>eventQueueDebuggingOn</code> is <code>true</code>. * <em>Read-only.</em> * @property {number} nodeListThreadQueueDepth - The number of events in the node list thread's event queue. * Only provided if <code>eventQueueDebuggingOn</code> is <code>true</code>. * <em>Read-only.</em> * * @comment The following property is from Stats.qml. It shouldn't be in the API. * @property {string} bgColor * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * * @comment The following properties are from QQuickItem. They shouldn't be in the API. * @property {boolean} activeFocus * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} activeFocusOnTab * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object} anchors * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} antialiasing * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} baselineOffset * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object[]} children * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} clip * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object} containmentMask * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} enabled * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} focus * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} height * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} implicitHeight * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} implicitWidth * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object} layer * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} opacity * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} rotation * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} scale * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} smooth * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {string} state * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} transformOrigin * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} visible * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} width * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} x * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} y * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} z * <p class="important">Deprecated: This property is deprecated and will be removed.</p> */// Properties from x onwards are QQuickItem properties. 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, 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, gameLoopRate, 0) STATS_PROPERTY(int, avatarCount, 0) STATS_PROPERTY(int, refreshRateTarget, 0) STATS_PROPERTY(QString, refreshRateMode, QString()) STATS_PROPERTY(QString, refreshRateRegime, QString()) STATS_PROPERTY(QString, uxMode, QString()) STATS_PROPERTY(int, heroAvatarCount, 0) STATS_PROPERTY(int, physicsObjectCount, 0) STATS_PROPERTY(int, updatedAvatarCount, 0) STATS_PROPERTY(int, updatedHeroAvatarCount, 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)Lines 1–500 of 1845. Load more
// // 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 <QtGui/QVector3D> #include <OffscreenQmlElement.h> #include <AudioIOStats.h> #include <render/Args.h> #include <shared/QtHelpers.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 }; /*@jsdoc * The <code>Stats</code> API provides statistics on Interface and domain operation, per the statistics overlay. * * <p><strong>Note:</strong> This API is primarily an internal diagnostics tool and is provided "as is".</p> * * @namespace Stats * * @hifi-interface * @hifi-client-entity * @hifi-avatar * @hifi-server-entity * @hifi-assignment-client * * @property {boolean} expanded - <code>true</code> if the statistics overlay should be in expanded form when the overlay is * displayed, <code>false</code> if it shouldn't be expanded. * @property {boolean} timingExpanded - <code>true</code> if timing details should be displayed when the statistics overlay is * displayed in expanded form, <code>false</code> if timing details should not be displayed. Set by the menu item, * Developer > Timing > Performance Timer > Display Timing Details. * <em>Read-only.</em> * @property {string} monospaceFont - The name of the monospace font used in the statistics overlay. * <em>Read-only.</em> * * @property {number} serverCount - The number of servers that Interface is connected to. * <em>Read-only.</em> * @property {number} renderrate - The rate at which new GPU frames are being created, in Hz. * <em>Read-only.</em> * @property {number} presentrate - The rate at which the display plugin is presenting to the display device, in Hz. * <em>Read-only.</em> * @property {number} stutterrate - The rate at which the display plugin is reprojecting old GPU frames, in Hz. * <em>Read-only.</em> * * @property {number} appdropped - The number of times a frame has not been provided to the display device in time. * <em>Read-only.</em> * @property {number} longsubmits - The number of times the display device has taken longer than 11ms to return after being * given a frame. * <em>Read-only.</em> * @property {number} longrenders - The number of times it has taken longer than 11ms to submit a new frame to the display * device. * <em>Read-only.</em> * @property {number} longframes - The number of times <code>longsubmits + longrenders</code> has taken longer than 15ms. * <em>Read-only.</em> * * @property {number} presentnewrate - The rate at which the display plugin is presenting new GPU frames, in Hz. * <em>Read-only.</em> * @property {number} presentdroprate - The rate at which the display plugin is dropping GPU frames, in Hz. * <em>Read-only.</em> * @property {number} gameLoopRate - The rate at which the game loop is running, in Hz. * <em>Read-only.</em> * @property {number} refreshRateTarget - The current target refresh rate, in Hz, per the current <code>refreshRateMode</code> * and <code>refreshRateRegime</code> if in desktop mode; a higher rate if in VR mode. * <em>Read-only.</em> * @property {RefreshRateProfileName} refreshRateMode - The current refresh rate profile. * <em>Read-only.</em> * @property {RefreshRateRegimeName} refreshRateRegime - The current refresh rate regime. * <em>Read-only.</em> * @property {UXModeName} uxMode - The user experience (UX) mode that Interface is running in. * <em>Read-only.</em> * @property {number} avatarCount - The number of avatars in the domain other than the client's. * <em>Read-only.</em> * @property {number} heroAvatarCount - The number avatars in a "hero" zone in the domain, other than the client's. * <em>Read-only.</em> * @property {number} physicsObjectCount - The number of objects that have collisions enabled. * <em>Read-only.</em> * @property {number} updatedAvatarCount - The number of avatars in the domain, other than the client's, that were updated in * the most recent game loop. * <em>Read-only.</em> * @property {number} updatedHeroAvatarCount - The number of avatars in a "hero" zone in the domain, other than the client's, * that were updated in the most recent game loop. * <em>Read-only.</em> * @property {number} notUpdatedAvatarCount - The number of avatars in the domain, other than the client's, that weren't able * to be updated in the most recent game loop because there wasn't enough time to. * <em>Read-only.</em> * @property {number} packetInCount - The number of packets being received from the domain server, in packets per second. * <em>Read-only.</em> * @property {number} packetOutCount - The number of packets being sent to the domain server, in packets per second. * <em>Read-only.</em> * @property {number} mbpsIn - The amount of data being received from the domain server, in megabits per second. * <em>Read-only.</em> * @property {number} mbpsOut - The amount of data being sent to the domain server, in megabits per second. * <em>Read-only.</em> @property {number} assetMbpsIn - The amount of data being received from the asset server, in megabits per second. * <code>0.0</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} assetMbpsOut - The amount of data being sent to the asset server, in megabits per second. * <code>0.0</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} audioPing - The ping time to the audio mixer, in ms. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} avatarPing - The ping time to the avatar mixer, in ms. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} entitiesPing - The average ping time to the entity servers, in ms. * <code>-1</code> if not connected to an entity server. * <em>Read-only.</em> * @property {number} assetPing - The ping time to the asset server, in ms. * <code>-1</code> if not connected to an asset server. * <em>Read-only.</em> * @property {number} messagePing - The ping time to the message mixer, in ms. * <code>-1</code> if not connected to a message mixer. * <em>Read-only.</em> * @property {Vec3} position - The position of the user's avatar. * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {number} speed - The speed of the user's avatar, in m/s. * <em>Read-only.</em> * @property {number} yaw - The yaw of the user's avatar body, in degrees. * <em>Read-only.</em> * @property {number} avatarMixerInKbps - The amount of data being received from the avatar mixer, in kilobits per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} avatarMixerInPps - The number of packets being received from the avatar mixer, in packets per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} avatarMixerOutKbps - The amount of data being sent to the avatar mixer, in kilobits per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} avatarMixerOutPps - The number of packets being sent to the avatar mixer, in packets per second. * <code>-1</code> if not connected to an avatar mixer. * <em>Read-only.</em> * @property {number} myAvatarSendRate - The number of avatar packets being sent by the user's avatar, in packets per second. * <em>Read-only.</em> * * @property {number} audioMixerInKbps - The amount of data being received from the audio mixer, in kilobits per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerInPps - The number of packets being received from the audio mixer, in packets per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerOutKbps - The amount of data being sent to the audio mixer, in kilobits per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerOutPps - The number of packets being sent to the audio mixer, in packets per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerKbps - The total amount of data being sent to and received from the audio mixer, in kilobits * per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioMixerPps - The total number of packets being sent to and received from the audio mixer, in packets * per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioOutboundPPS - The number of non-silent audio packets being sent by the user, in packets per second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioSilentOutboundPPS - The number of silent audio packets being sent by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioInboundPPS - The number of non-silent audio packets being received by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioAudioInboundPPS - The number of non-silent audio packets being received by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed. Use <code>audioInboundPPS</code> * instead.</p> * @property {number} audioSilentInboundPPS - The number of silent audio packets being received by the user, in packets per * second. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {number} audioPacketLoss - The number of audio packets being lost, sent to or received from the audio mixer, in %. * <code>-1</code> if not connected to an audio mixer. * <em>Read-only.</em> * @property {string} audioCodec - The name of the audio codec. * <em>Read-only.</em> * @property {string} audioNoiseGate - The status of the audio noise gate: <code>"Open"</code> or <code>"Closed"</code>. * <em>Read-only.</em> * @property {Vec2} audioInjectors - The number of audio injectors, local and non-local. * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {number} entityPacketsInKbps - The average amount of data being received from entity servers, in kilobits per * second. (Multiply by the number of entity servers to get the total amount of data being received.) * <code>-1</code> if not connected to an entity server. * <em>Read-only.</em> * * @property {number} downloads - The number of downloads in progress. * <em>Read-only.</em> * @property {number} downloadLimit - The maximum number of concurrent downloads. * <em>Read-only.</em> * @property {number} downloadsPending - The number of downloads pending. * <em>Read-only.</em> * @property {string[]} downloadUrls - The download URLs. * <em>Read-only.</em> * @property {number[]} downloadProgresses - The download progresses. * <em>Read-only.</em> * @property {number[]} downloadPriorities - The download priorities. * <em>Read-only.</em> * @property {number} processing - The number of completed downloads being processed. * <em>Read-only.</em> * @property {number} processingPending - The number of completed downloads waiting to be processed. * <em>Read-only.</em> * @property {number} triangles - The number of triangles in the rendered scene. * <em>Read-only.</em> * @property {number} drawcalls - The number of draw calls made for the rendered scene. * <em>Read-only.</em> * @property {number} materialSwitches - The number of material switches performed for the rendered scene. * <em>Read-only.</em> * @property {number} itemConsidered - The number of item considerations made for rendering. * <em>Read-only.</em> * @property {number} itemOutOfView - The number of items out of view. * <em>Read-only.</em> * @property {number} itemTooSmall - The number of items too small to render. * <em>Read-only.</em> * @property {number} itemRendered - The number of items rendered. * <em>Read-only.</em> * @property {number} shadowConsidered - The number of shadow considerations made for rendering. * <em>Read-only.</em> * @property {number} shadowOutOfView - The number of shadows out of view. * <em>Read-only.</em> * @property {number} shadowTooSmall - The number of shadows too small to render. * <em>Read-only.</em> * @property {number} shadowRendered - The number of shadows rendered. * <em>Read-only.</em> * @property {string} sendingMode - Description of the octree sending mode. * <em>Read-only.</em> * @property {string} packetStats - Description of the octree packet processing state. * <em>Read-only.</em> * @property {number} lodAngle - The target LOD angle, in degrees. * <em>Read-only.</em> * @property {number} lodTargetFramerate - The target LOD frame rate, in Hz. * <em>Read-only.</em> * @property {string} lodStatus - Description of the current LOD. * <em>Read-only.</em> * @property {number} numEntityUpdates - The number of entity updates that happened last frame. * <em>Read-only.</em> * @property {number} numNeededEntityUpdates - The total number of entity updates scheduled for last frame. * <em>Read-only.</em> * @property {string} timingStats - Details of the average time (ms) spent in and number of calls made to different parts of * the code. Provided only if <code>timingExpanded</code> is <code>true</code>. Only the top 10 items are provided if * Developer > Timing > Performance Timer > Only Display Top 10 is enabled. * <em>Read-only.</em> * @property {string} gameUpdateStats - Details of the average time (ms) spent in different parts of the game loop. * <em>Read-only.</em> * @property {number} serverElements - The total number of elements in the server octree. * <em>Read-only.</em> * @property {number} serverInternal - The number of internal elements in the server octree. * <em>Read-only.</em> * @property {number} serverLeaves - The number of leaf elements in the server octree. * <em>Read-only.</em> * @property {number} localElements - The total number of elements in the client octree. * <em>Read-only.</em> * @property {number} localInternal - The number of internal elements in the client octree. * <em>Read-only.</em> * @property {number} localLeaves - The number of leaf elements in the client octree. * <em>Read-only.</em> * @property {number} rectifiedTextureCount - The number of textures that have been resized so that their dimensions is a power * of 2 if smaller than 128 pixels, or a multiple of 128 if greater than 128 pixels. * <em>Read-only.</em> * @property {number} decimatedTextureCount - The number of textures that have been reduced in size because they were over the * maximum allowed dimensions of 8192 pixels on desktop or 2048 pixels on mobile. * <em>Read-only.</em> * @property {number} gpuBuffers - The number of OpenGL buffer objects managed by the GPU back-end. * <em>Read-only.</em> * @property {number} gpuBufferMemory - The total memory size of the <code>gpuBuffers</code>, in MB. * <em>Read-only.</em> * @property {number} gpuTextures - The number of OpenGL textures managed by the GPU back-end. This is the sum of the number of * textures managed for <code>gpuTextureResidentMemory</code>, <code>gpuTextureResourceMemory</code>, and * <code>gpuTextureFramebufferMemory</code>. * <em>Read-only.</em> * @property {number} gpuTextureMemory - The total memory size of the <code>gpuTextures</code>, in MB. This is the sum of * <code>gpuTextureResidentMemory</code>, <code>gpuTextureResourceMemory</code>, and * <code>gpuTextureFramebufferMemory</code>. * <em>Read-only.</em> * @property {number} glContextSwapchainMemory - The estimated memory used by the default OpenGL frame buffer, in MB. * <em>Read-only.</em> * @property {number} qmlTextureMemory - The memory size of textures managed by the offscreen QML surface, in MB. * <em>Read-only.</em> * @property {number} texturePendingTransfers - The memory size of textures pending transfer to the GPU, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResidentMemory - The memory size of the "strict" textures that always have their full * resolution in GPU memory, in MB. * <em>Read-only.</em> * @property {number} gpuTextureFramebufferMemory - The memory size of the frame buffer on the GPU, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResourceMemory - The amount of GPU memory that has been allocated for "variable" textures that * don't necessarily always have their full resolution in GPU memory, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResourceIdealMemory - The amount of memory that "variable" textures would take up if they were * all completely loaded, in MB. * <em>Read-only.</em> * @property {number} gpuTextureResourcePopulatedMemory - How much of the GPU memory allocated has actually been populated, in * MB. * <em>Read-only.</em> * @property {string} gpuTextureMemoryPressureState - The stats of the texture transfer engine. * <ul> * <li><code>"Undersubscribed"</code>: There is texture data that can fit in memory but that isn't on the GPU, so more * GPU texture memory should be allocated if possible.</li> * <li><code>"Transfer"</code>: More GPU texture memory has been allocated and texture data is being transferred.</li> * <li><code>"Idle"</code>: Either all texture data has been transferred to the GPU or there is nor more space * available.</li> * </ul> * <em>Read-only.</em> * @property {number} gpuFreeMemory - The amount of GPU memory available after all allocations, in MB. * <em>Read-only.</em> * <p><strong>Note:</strong> This is not a reliable number because OpenGL doesn't have an official method of getting this * information.</p> * @property {number} gpuTextureExternalMemory - The estimated amount of memory consumed by textures being used but that are * not managed by the GPU library, in MB. * <em>Read-only.</em> * @property {Vec2} gpuFrameSize - The dimensions of the frames being rendered, in pixels. * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {number} gpuFrameTime - The time the GPU is spending on a frame, in ms. * <em>Read-only.</em> * @property {number} gpuFrameTimePerPixel - The time the GPU is spending on a pixel, in ns. * <em>Read-only.</em> * @property {number} batchFrameTime - The time being spent batch processing each frame, in ms. * <em>Read-only.</em> * @property {number} engineFrameTime - The time being spent in the render engine each frame, in ms. * <em>Read-only.</em> * @property {number} avatarSimulationTime - The time being spent simulating avatars each frame, in ms. * <em>Read-only.</em> * * @property {number} stylusPicksCount - The number of stylus picks currently in effect. * <em>Read-only.</em> * @property {number} rayPicksCount - The number of ray picks currently in effect. * <em>Read-only.</em> * @property {number} parabolaPicksCount - The number of parabola picks currently in effect. * <em>Read-only.</em> * @property {number} collisionPicksCount - The number of collision picks currently in effect. * <em>Read-only.</em> * @property {Vec3} stylusPicksUpdated - The number of stylus pick intersection that were found in the most recent game loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {Vec3} rayPicksUpdated - The number of ray pick intersections that were found in the most recent game loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {Vec3} parabolaPicksUpdated - The number of parabola pick intersections that were found in the most recent game * loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * @property {Vec3} collisionPicksUpdated - The number of collision pick intersections that were found in the most recent game * loop: * <ul> * <li><code>x</code> = entity intersections.</li> * <li><code>y</code> = avatar intersections.</li> * <li><code>z</code> = HUD intersections.</li> * </ul> * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * * @property {boolean} eventQueueDebuggingOn - <code>true</code> if event queue statistics are provided, <code>false</code> if * they're not. * <em>Read-only.</em> * @property {number} mainThreadQueueDepth - The number of events in the main thread's event queue. * Only provided if <code>eventQueueDebuggingOn</code> is <code>true</code>. * <em>Read-only.</em> * @property {number} nodeListThreadQueueDepth - The number of events in the node list thread's event queue. * Only provided if <code>eventQueueDebuggingOn</code> is <code>true</code>. * <em>Read-only.</em> * * @comment The following property is from Stats.qml. It shouldn't be in the API. * @property {string} bgColor * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * * @comment The following properties are from QQuickItem. They shouldn't be in the API. * @property {boolean} activeFocus * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} activeFocusOnTab * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object} anchors * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} antialiasing * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} baselineOffset * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object[]} children * <em>Read-only.</em> * <p><strong>Note:</strong> Property not available in the API.</p> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} clip * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object} containmentMask * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} enabled * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} focus * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} height * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} implicitHeight * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} implicitWidth * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {object} layer * <em>Read-only.</em> * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} opacity * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} rotation * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} scale * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} smooth * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {string} state * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} transformOrigin * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {boolean} visible * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} width * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} x * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} y * <p class="important">Deprecated: This property is deprecated and will be removed.</p> * @property {number} z * <p class="important">Deprecated: This property is deprecated and will be removed.</p> */ // Properties from x onwards are QQuickItem properties. 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, 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, gameLoopRate, 0) STATS_PROPERTY(int, avatarCount, 0) STATS_PROPERTY(int, refreshRateTarget, 0) STATS_PROPERTY(QString, refreshRateMode, QString()) STATS_PROPERTY(QString, refreshRateRegime, QString()) STATS_PROPERTY(QString, uxMode, QString()) STATS_PROPERTY(int, heroAvatarCount, 0) STATS_PROPERTY(int, physicsObjectCount, 0) STATS_PROPERTY(int, updatedAvatarCount, 0) STATS_PROPERTY(int, updatedHeroAvatarCount, 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)