UE4打印到HUD的Stat命令

Stat命令(chs  en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据。

Debug、Development包才会启用STATS宏,统计逻辑才会编译进可执行二进制中,才能使用Stat命令相关的功能

若想让Shipping和Test包也有Stat命令功能,可在UnrealEngineEngineSourceRuntimeCorePublicMiscBuild.h中将FORCE_USE_STATS宏定义成1

/** Compile flag to force stats to be compiled */
#ifndef FORCE_USE_STATS
    #define FORCE_USE_STATS 1
#endif

统计相关的所有逻辑在:UnrealEngineEngineSourceRuntimeCorePublicStats*.hUnrealEngineEngineSourceRuntimeCorePrivateStats*.cpp

Stat类别定义在:UnrealEngineEngineSourceRuntimeCorePublicStatsStats2.h

Stat命令的HUD绘制逻辑在StatsRender2.cpp中,3种Title头的渲染在以下函数中:

Counters   Average   Max  Min     // RenderCounterHeadings      进度条的百分比为:Average / t.TargetFrameTimeThreshold 

Memory Counters   UsedMax   Mem%   MemPool   Pool Capacity   // RenderMemoryHeadings     如:Stat memory用的是该Title头

Cycle counters (flat) | Cycle counters (hierarchy)   CallCount    InclusiveAvg  InclusiveMax   [ExclusiveAvg   ExclusiveMax]    // RenderGroupedHeadings   进度条的百分比为:InclusiveAvg / t.TargetFrameTimeThreshold  

注:t.TargetFrameTimeThreshold的缺省值为33.9 ms

各统计项解释:

Counters:当前统计项名称
Average:最近60帧记录中的平均值
Max:最近60帧记录中的最大值
Min:最近60帧记录中的最小值

Memory Counters:当前统计项名称
UsedMax:最近60帧记录中内存使用的最大值
Mem%:UsedMax在Pool Capacity中的占比

Cycle counters (flat):当前统计项名称
Cycle counters (hierarchy) :当前统计项名称(树型结构)
CallCount :最近60帧记录的平均调用次数
InclusiveAvg:最近60帧记录的平均包含时间消耗
InclusiveMax:最近60帧记录中的最大包含时间消耗
ExclusiveAvg:最近60帧记录的平均独占时间消耗
ExclusiveMax:最近60帧记录中的最大独占时间消耗

注:FStatParams结构体MaxHistoryFrames变量缺省为60,所以统计是60帧记录

Stat的Engine命令执行在UEngine::HandleStatCommand函数中

DECLARE_STATS_GROUP(TEXT("AI"),STATGROUP_AI, STATCAT_Advanced);   // 会定义一个类型为FStatGroup_STATGROUP_AI的结构体   那么就可以在控制台下执行Stat AI命令

打开控制台输入框方法

在PC上按 快捷键 ,手机上四指在屏幕上同时按下

Stat XXX   // 按平行结构展示统计项

Stat XXX+  // 按层次树结构展示统计项 

一些统计项解释

GT:Game Thread

RT:Render Thread 

AT:Any Thread

TTF:True Type(TTF)字体资源

OTF:Open Type(OTF) 字体资源

Stat None
关闭所有统计数据的显示

对于Stat xxx命令,执行一次会开启xxx,再执行一次会关闭xxx

Stat fps   // 显示每秒帧数(FPS)计数器

显示当前平均帧率和每帧平均绘制时长

平均帧率由全局变量float GAverageFPS来计算,GAverageFPS = 1000.f / GAverageMS   详见:CalculateFPSTimings函数

当前帧平均绘制时长由全局变量float GAverageMS(GameThread执行时间和Waiting时间之和)来计算

上面的设置是针对游戏的,修改后配置会保存在DefaultEngine.ini的如下标签中

[/Script/Engine.Engine]
bSmoothFrameRate=True
MinDesiredFrameRate=38.000000
SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=21.426044),UpperBound=(Type=Exclusive,Value=74.614174))

对于编辑的场景(EWorldType::Editor)或PIE游戏(EWorldType::PIE),会保存在DefaultEngine.ini的如下标签中

[/Script/UnrealEd.EditorEngine]
bSmoothFrameRate=True
SmoothedFrameRateRange=(LowerBound=(Type="ERangeBoundTypes::Inclusive",Value=8),UpperBound=(Type="ERangeBoundTypes::Inclusive",Value=110))

关掉Smooth Frame Rate,能获得精确的测量值,不然它会强行限帧到Min{SmoothedFrameRateRange}~Max{SmoothedFrameRateRange},导致瞬间峰值过滤掉。

Stat UNIT

  

                                       Android                                                                                                  Standalone(Windows)

逻辑详见:UnrealEngineEngineSourceRuntimeEnginePrivateUnrealClient.cppFStatUnitData::DrawStat函数 

Frame:一帧游所花费的总时间。由于Game线程和Draw线程在完成一帧之前保持同步。Frame = MAX{Game, Draw, GPU}

Game:GameThread线程一帧耗费的时间(去掉了GameThread的Waiting那部分时间)。如果帧时接近Game线程中显示的时间,则游戏的性能很可能会受到Game线程的阻碍(负面影响)。

Draw:RenderThread线程一帧耗费的时间(去掉了RenderThread的Waiting那部分时间)。如果帧时接近Draw线程中显示的时间,则游戏的性能很可能会受到渲染线程的阻碍

RHIT:RHIThread线程一帧耗费的时间(当使用独立的RHIThread才显示该项;去掉了RHIThread的Waiting那部分时间)。通常,RHI线程时间会被同步到帧上,因此它很可能与帧时相同。

注:以上都执行了A = 0.9 * A +0.1 * Cur算法,进行了平滑

Mem:VMRSS,Resident Set Size 实际使用物理内存(包含共享库占用的内存)

Draws:DrawCall数   数值来自于int32 GNumDrawCallsRHI变量

Prims:图元个数   数值来自于int32 GNumPrimitivesDrawnRHI变量

GPU:GPU渲染一帧时间。GPU时间用来衡量显卡渲染场景需要多长时间。由于GPU时间会被同步到帧上,它很可能与帧时相同。

DynRes:动态分辨率。如果支持(并启用),DynRes 将显示主要屏幕百分比和次要屏幕百分比。

Android平台不显示GPU统计项,可通过如下方式来开启:

① 注释掉SupportsDisjointTimeQueries函数

② 在UnrealEngineEngineConfigBaseDeviceProfiles.ini中开启r.DisjointTimerQueries

[Android DeviceProfile]
DeviceType=Android
+CVars=r.DisjointTimerQueries=1

Stat UnitMax

     

                                       Android                                                                                                  Standalone(Windows) 

每一行最后数值为最近200次采样中的最大值 

Mem行第一个值为VmRSS(进程当前使用的物理内存的大小);第二个值为VmHWM(进程所使用的物理内存的峰值)

VMem行第一个值为VmSize(进程当前使用的虚拟内存的大小);第二个值为VmPeak(进程所使用的虚拟内存的峰值)

Stat UnitTime /  Stat UnitGraph

Android:在Stat Unit基础上,添加了左上角实时绘制出Frame、Game、Draw、RHIT曲线的功能

Standalone(Windows):在Stat Unit基础上,添加了左下角实时绘制出Frame、Game、Draw、GPU曲线的功能

Stat Raw   // 未过滤数据的Stat UnitGraph

Stat Detailed   // 功能等价于Stat fps  + Stat UnitMax  +  Stat UnitTime /  Stat UnitGraph

                                                                                                      Android

                                                                                          Standalone(Windows)

Stat AI    // 显示感知系统和整体AI的性能信息

Stat Al_EQS   // 显示环境查询系统(EQS)的性能、调试和内存统计数据
Stat AICrowd  // 显示群集管理器的性能和步骤信息


Stat Anim   // 显示每次tick蒙皮网格体需要多长时间进行计算

注1:默认一个Group最多显示的行数为25,可通过执行控制台变量stats.MaxPerGroup xx来指定新的最大行数为xx

注2:为了能查看显示不下的内容,自定义开发了stat scroll控制台命令

stat scroll 1 // 向下滚动1行
stat scroll -1 // 向上滚动1行
stat scroll 999 // 滚动到底部
stat scroll -999 // 滚动到顶部
stat scroll restore //恢复初始

Stat Anim+ -ms=0.001  // 按层次树形式展示


Stat AsyncLoad   // 显示异步加载的性能统计数据      注:默认不开启,需手动开启


Stat AsyncLoadGameThread

Stat AsyncIO

Stat Audio   // 音频统计数据,如声波实例或缓冲区性能

Stat AudioStreaming

Stat AudioThreadCommands

Stat Canvas  // 画布统计数据,显示画布用户界面项(例如图块、边框和文本)的性能信息

Stat Chaos

Stat Character

Stat Collision   // 显示碰撞的性能、调试和内存信息

Stat CollisionTags


Stat ColorList

Stat CommandListMarkers   // 显示命令列表及命令性能信息


Stat Component   // 显示组件列表及组件性能信息

Stat Compression  // 显示压缩统计数据

Stat CrunchMemory

Stat CPULoad // 显示CPU利用率


Stat CPUStalls  // 显示有关CPU停转的信息


Stat D3D11RHI // 显示Direct3D 11 RHI统计数据


Stat DDC   // 显示派生数据缓存(DDC)统计数据


Stat Engine   // 显示一般渲染状态,例如帧时间,以及正在渲染的三角形数量的计数器

Stat Foliage

Stat Game // 提供有关各个游戏Tick需要多长时间的反馈

Stat Game+ -ms=0.001  // 按层次树展示

Stat GameplayTags   // 显示游戏进程标签信息


Stat GC   // 显示垃圾回收统计数据


Stat GeometryCache   // 显示几何体缓存系统的性能和内存统计数据

Stat GPU // 显示帧的GPU统计数据   注:android平台上没有输出


Stat GPUParticles   // 显示GPU粒子的性能信息

Stat GPUSkinCache

Stat IMEWindows  // 显示Windows文本输入法系统的信息

Stat InitViews  // 显示有关可见性剔除花费了多长时间以及效果如何的信息。可见分段计数是渲染线程性能方面最重要的一个统计量,它由STAT INITVIEWS下的可见静态网格体元素控制;不过,可见动态原语也有影响

Stat InitViews+ -ms=0.001  // 按层次树形式展示


Stat KismetCompiler   // 显示Kismet编译器信息

Stat KismetReinstancer  // 显示Kismet Reinstancer信息


Stat Landscape


Stat LEVELS // 显示level streaming信息

关卡颜色代码说明

绿色:关卡已加载并可见。
红色:关卡已卸载。
橙色:关卡正在变成可见的过程中。
黄色:关卡已加载,但不可见。
蓝色:关卡已卸载,但仍驻留在内存中,当发生垃圾回收时将清除它。
紫色:关卡是预加载的。

Stat LightRendering   // 提供有关渲染光照和阴影需要多长时间的反馈


Stat LinkerCount   // 显示linker计数器


Stat LinkerLoad   // 显示linker加载信息

Stat LLM   // 显示低级内存追踪器(LLM)计数器

Stat LLMFULL   // 显示整个LLM计数器组

Stat LLMOverhead   // 显示LLM开销计数器


Stat LLMPlatform   // 显示LLM平台计数器


Stat LoadTime   // 显示加载时间性能信息

Stat LoadTimeVerbose


Stat MapBuildData    // 显示地图的编译数据

Stat MathVerbose   // 显示数学运算的性能信息


Stat Media


Stat Memory // 显示有关虚幻引擎中各个子系统使用多少内存的统计数据

Session FrontendProfiler里面Group Name为Memory的统计细项如下:

统计项类型:

为hierarchy类别,可以嵌套子节点,包含CallCount、InclusiveTime、ExclusiveTime等字段

为int或float数字类型

为Memory类型

Stat MemoryAllocator

Stat MemoryPlatform   // 显示内存平台信息


Stat MemoryStaticMesh  // 显示有关静态网格体的内存统计数据


Stat NamedEvents // 为外部分析器启用指定事件

Stat Navigation   // 显示导航系统的性能和内存信息


Stat NET   // 显示网络系统统计数据


Stat Niagara


Stat NiagaraOverview

Stat object   // 显示对象内存和性能信息


Stat ObjectVerbose   // 默认是关闭的   需手动开启


Stat Online   // 显示在线系统计数器

Stat Packet

Stat PakFile   // 显示Pakfile系统统计数据

Stat ParallelCommandListMarkers  // 显示并行命令列表及并行命令性能信息


Stat PARTICLES   // 显示粒子系统性能信息

Stat ParticleMem


Stat Physics // 显示物理性能统计数据


Stat PhysXTasks   // 显示PhysX任务信息


Stat PhysXVehicleManager   // 显示PhysX载具管理器的统计数据


Stat PlayerController   // 显示玩家控制器性能信息


Stat PSCWorIdMan
Stat Quick   // 快速显示总体性能数据组

Stat RDG

Stat RenderTargetPool   // 显示渲染目标池的内存和性能统计数据


Stat RenderThreadCommands   // 列出渲染线程命令及性能信息,找出耗时较高的Comand


Stat RHI   // 显示RHI内存和性能统计数据


Stat RHICMDLIST   // 显示RHI命令列表及性能统计数据

Stat SceneMemory   // 显示场景内存计数器


Stat SceneRendering   // 显示一般渲染统计数据。这是一个很好的起点,可以发现渲染过程中性能低下的一般方面

Stat SceneUpdate   // 显示有关更新场景的信息,包括添加、更新和删除光源以及添加和删除场景中的原语所花费的时间


Stat SCRIPT   // 显示脚本统计数据
Stat ShaderCompiling   // 显示着色器编译信息

 

Stat PipelineStateCache


Stat Shaders   // 显示着色器压缩统计数据


Stat ShadowRendering   // 显示阴影计算花费多长时间,该时间不同于 stat LightRendering 中包括的实际阴影渲染时间

 


Stat ShadowRenderingVerbose

Stat Slate   // 显示Slate性能统计数据

Stat SlateVerbose   // 默认不开启,需手动开启

Stat SlateMemory   // 显示Slate内存计数器


Stat SoundCues // 显示活动的Sound Cue


Stat SoundMixes // 显示活动的SoundMix


Stat SoundModulators // Shows modulator debug info as provided by active audio modulation plugin


Stat SoundModulatorsHelp // Shows modulator debug help provided by active audio modulation plugin
Stat SoundReverb // Shows active SoundReverb


Stat Sounds // <sort=class l distance l name l prioritytime l volume l waves> <-debug> shows all active sounds. Displays value sorted by when sort is set  // 显示活动的SoundCue和SoundWave


Stat SoundWaves // 显示活动的SoundWave

Stat splitscreen   // 显示分屏信息

Stat StatSystem   // 显示统计系统的性能和内存信息

Stat Streaming // 显示流送资源的基本统计数据,例如使用了多少内存流送纹理,或者场景中有多少流送纹理。


Stat StreamingDetails // 有关流送的更详细的统计信息,例如将一般纹理流分解为更具体的组(光照贴图、静态纹理和动态纹理)


Stat StreamingDetailsVerbose

Stat StreamingOverview   // 显示流送资源的统计数据概述


Stat Summary

Stat TargetPlatform   // 显示目标平台信息


Stat TaskGraphTasks  // 显示TaskGraph任务的性能数据

Stat Text   // 显示文本的性能统计数据


Stat TextureGroup   // 显示纹理组内存计数器

Stat TexturePool


Stat Threading   // 显示线程处理信息


Stat ThreadPoolAsyncTasks   // 显示ThreadPool Async任务计数器


Stat Threads   // 显示线程信息

Stat Tickables    // 显示Tickable的性能统计数据

Stat TickGroups   // 显示Tick组的性能统计数据

Stat Timecode

Stat UI    // 显示UI性能信息

Stat UObjectHash   // 显示散列的UObject信息   默认不打开,需手动开启


Stat uobjects   // 显示游戏中UObject的性能统计数据

Stat Version

Stat VirtualTextureMemory

Stat VTP

Stat AndroidCPU

CPU共有3个Group:

Group 0:有4个核心   Max frequency Ave:2841600.00

Group 1:有3个核心   Max frequency Ave:2419200.00

Group 2:有1个核心   Max frequency Ave:1804800.00 

Stat OpenGLRHI

Stat MetalRHI

Stat VulkanMemoryRaw

Stat VulkanMemory

Stat VulkanPSO

Stat VulkanRHI

Stat D3D12RayTracing

Stat D3D12RHI

Stat D3D12Memory

Stat D3D12PipelineState


Stat D3D12DescriptorHeap

原文地址:https://www.cnblogs.com/kekec/p/14591872.html