1845 lines · 69.8 KB · C
RawDownload
////  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 &gt; Timing &gt; Performance Timer &gt; 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 &gt; Timing &gt; Performance Timer &gt; 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.