zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    dmo4解析xml
    myeclise生成webservice客户端代码
    华为QOS原理及配置
    【转载】 Jointwave零延时视频传输for FPGA/ASIC进入军工领域
    【转载】 网络性能测试工具
    【转载】 结构体大小计算
    【转载】 H264的I/P/B帧类型判断
    【转载】 IP实时传输协议RTP/RTCP详解
    【转载】 了解实时媒体的播放(RTP/RTCP 和 RTSP)
    【转载】 CSDN博客与博客园使用对比
  • 原文地址:https://www.cnblogs.com/kekec/p/14591872.html
Copyright © 2011-2022 走看看