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

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback