CSV分析器

一种轻量级、限定范围、基于时间戳的分析器,可输出每帧时间,将渲染线程和游戏线程的时间轴分离开来。

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字节,一直累积到采集结束,因为采集结束之前不会在磁盘内写入任何内容。这意味着如果长时间采集大量统计数据,则可能需要考虑内存的问题。内存使用情况在采集结束时将汇总到日志中。

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见