Choose your operating system:
Windows
macOS
Linux
为尽早提供信息,本页在发布之时仍处于草稿状态。请检查更新。
CSV分析器一种轻量级、限定范围、基于时间戳的分析器,可输出每帧时间,并将渲染线程和游戏线程的时间轴分离开。适用于所有主机和电脑,并适用于除发布版本之外的所有版本。
将统计数据采集至CSV
在命令行上
运行项目可执行文件,并用
-csvCaptureFrames=N
参数采集从启动时算起的第
N
帧。
UE4.exe [Project] -csvCaptureFrames=N
在控制台上
可使用
csvprofile [start/stop]
控制台命令在运行时开始或停止采集。
csvprofile frames=N
可采集固定数量的帧
输出
CSV分析器生成的CSV文件将写入
[ProjectDirectory]/Saved/Profiling/CSV
目录。
统计信息类别
可使用
CSV_DEFINE_CATEGORY(CategoryName, bEnableByDefault)
定义统计数据类别。可通过
CSV_DECLARE_CATEGORY_EXTERN(CategoryName)
在外部使用现有的类别。其有
_MODULE
变体,可跨模块使用。
通过命令行-csvcategories进行分类,例如-csvcategories="First,Second"。
理想情况下,默认只启用关键统计数据。在默认启用新类别之前须仔细规划。如非必要,请不要向默认启用的现有类别添加统计信息。
添加统计数据
单位统计数据和可用内存拥有内置检测工具,但可以使用
CSV_
宏来添加要额外采集的统计数据。
CsvProfiler.h
的顶部定义了
CSV_
宏。可添加以下类型的统计数据:
-
时间范围统计数据 -
CSV_SCOPED_TIMING_STAT(Category, StatName)
-
自定义(值)统计数据 -
CSV_CUSTOM_STAT(Category, StatName,Value, Op)
或其变体Op是统计数据运算列举(ECsvCustomStatOp),可以是以下其中一项:Set、Min、Max、Accumulate
范例请参见
CSVProfiler.cpp
中的
CSVTest()
。
可以内联添加统计数据,无需预先定义。但必要时可预先定义。参见
CSV_DEFINE_STAT(Category,StatName)
和
CSV_CUSTOM_STAT_DEFINED
宏。
将累计每一帧统计数据并将其写入CSV,一行为一帧,一列为一项统计数据。它们在CSV中显示为标题,并带有
CategoryName/StatName
。如为定时器统计数据,则带有
CategoryName/ThreadName/StatName
。由于存在此特性,使用通配符通过CsvToSvg工具即可轻松完成绘图。例如:
-stats MyCategory/*
事件
可使用
CSV_EVENT
宏添加事件,此宏使用的参数与
printf
相同。事件显示在CSV中的特殊
events
列中,如果帧中有多个事件,用分号隔开。可使用CSVToSVG绘图工具,借助-showevents参数对带事件的图表进行注解。详情请参见
CSVToSVG工具
。
应尽量少用事件采集不常见的状况。滥用事件会导致极高的性能和内存开销。
GPU统计数据
CSV分析器支持GPU统计数据,包括禁用
STATS
的测试版本。记录GPU统计数据会带来一些开销,因此默认禁用。
要启用记录GPU统计数据,执行以下操作之一:
-
在控制台中将
r.GPUCsvStatsEnabled
设为1。 -
在命令行上传递
-csvGpuStats
。
性能和内存注意事项
工具开销应尽可能低,以便检测每帧调用数百次的函数,同时尽量减小时间数据失真。对统计数据进行最少的处理,比如在线程本地块中积累计时间,这些数据只在采集结束时处理。
原始统计数据每60ms处理一次(默认设置),以减少内存开销。分析期间产生的开销是每帧每个统计数据4字节,一直累积到采集结束,因为采集结束之前不会在磁盘内写入任何内容。这意味着如果长时间采集大量统计数据,则可能需要考虑内存的问题。内存使用情况在采集结束时将汇总到日志中。