使用 C++ 性能分析器
要优化 Godot 的性能,你首先得知道要优化什么,性能分析器在这方面非常有用。 注解 编辑器中内置了一个 GDScript 的性能分析器,但在 GDScript 性能分析器不够精确或者因为问题而缺失信息时,就可以使用 C++ 性能分析器。
性能分析器推荐
- VerySleepy (仅适用于 Windows)
- HotSpot (仅适用于 Linux)
- Xcode Instruments (仅适用于 macOS)
这些性能分析器可能不是最强大或者最灵活的,但它们独立的操作和有限的功能非常易用。
注解
这个 dbghelpms.dll 文件保存到 VerySleepy 的安装目录中。这个文件夹通常位于
C:\Program Files\Very Sleepy CS。 这个 dbghelpms.dll 文件 保存到 VerySleepy 安装目录的32文件夹中。设置 Godot
必须 使用包含调试符号的 Godot 构建。官方二进制文件并不包含调试符号,因为会显著增加文件下载大小。 如果想要获取与生产环境最接近的性能分析数据,你应该使用如下 SCons 选项来编译程序: target=release_debug use_lto=yestarget=release_debug use_lto=yestools=no target=release debug_symbols=yes- 必须使用debug_symbols=yes因为导出模板默认会和调试符号剥离。target=debug但不开 LTO)也能用于性能分析,但得到的结果显然会和实际运行时的情况会有一定差距。 警告 请勿 在编译完成后使用strip命令剥离调试符号,否则运行性能分析器时无法得到有用的信息。测量启动/关闭耗时
--quit命令行参数,它会让 Godot 在启动完成后立即退出。--quit参数可以和--editor、--project-manager、--path <项目目录路径>(该参数可以直接运行项目)搭配使用。 参见 命令行教程 。性能分析器指令
VerySleepy
- 首先启动 Godot 编辑器或者你的项目。如果启动的是项目管理器,请先编辑或者运行项目。项目管理器会在编辑或运行项目时产生新的子进程,而性能分析器是无法追踪子进程的。
- 打开 VerySleepy 然后在左侧的进程列表中选中 Godot 程序:
- Profile All 按钮开始性能分析。
- Stop (注意 不是 Abort)。
- 等待出现结果窗口。
- Module 和 Godot 可执行文件名称一致的行,在那一行上单击右键,然后在下拉菜单中选择 Filter Module to
。 - 结果窗口现在应该类似这样:
HotSpot
- Record Data :
- 在下一个窗口中,指定包含调试符号的 Godot 可执行文件的路径。
- 指定运行项目所使用的命令行参数,用不用编辑器运行都行。
--path参数使用的是绝对路径,那么工作目录的路径可以任选。否则应该可以在工作目录使用相对路径访问项目。- Elevate Privileges(提升权限) 。虽然不是对 Godot 进行性能分析所必需的,这样做可以保证捕捉到所有事件,否则有些事件可能会被漏掉。你的设置现在应该类似这样:
- Start Recording 然后在编辑器或者项目中执行需要分析性能的操作。
- Stop Profiling 按钮来提前停止性能分析。如果你不在乎引擎本身的关闭过程,提前结束性能分析可以让分析结果更干净。
- View Results 然后等待生成可视化性能分析结果:
- Flame Graph(火焰图) 选项卡里可以很直观地找到哪些函数占用的时间最长。这些函数就是终点优化对象了,因为优化后可以显著提升性能。
- Summary 的其它选项卡底部都有一个引擎所开启的 CPU 线程列表,每个线程都列出了对应的 CPU 使用情况。你可以据此查看在特定时间点的瓶颈线程。
注解
Record Data 然后把 Launch Application 下拉选项设置成 Attach To Process(es) 即可。
这样基于附加到进程的工作流和 VerySleepy 比较类似。
Xcode Instruments
- Xcode 应用菜单中选择 Open Developer Tool - Instruments :
- Instruments 窗口中的 Time Profiler :
- Target 菜单,选择 Choose target… 然后将路径设置为 Godot 可执行文件的路径,在下一个窗口中设置命令行参数和环境变量。
- Target 菜单中选择即可。
- Start an immediate mode recording 按钮开始性能分析。
- Stop 按钮。
- 等待结果出现。
- Heaviest Stack Trace 总览。
- Call Tree 菜单中选择 Hide system libraries 可以移除外部模块。
- 你可以使用窗口顶部的时间线来控制只显示特定时间段内的详细信息。
