Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
使用 C++ 性能分析器
要优化 Godot 的性能,你首先得知道要优化什么,性能分析器在这方面非常有用。
备注
编辑器里虽然自带了一个 built-in GDScript profiler ,但在某些情况下,使用 C++ 性能分析器可能会更有帮助。比如当 GDScript 分析器的准确度不够,或者因为分析器自身的 Bug 而遗漏了部分信息时,C++ 分析器就能派上用场啦。
分析器主要分为两大类:采样分析器和追踪分析器。
采样分析器(sampling profilers)会周期性地打断正在运行的程序,并抓取一个“样本(sample)”,记录下此刻正在运行的是哪些函数。利用这些信息,分析器就能估算出程序在哪些函数上花费的时间最多。
追踪型分析器的工作原理是记录应用特定的事件(比如某一帧的开始和结束),并生成一个被称为“追踪记录("trace")”的日志。分析器可以利用这个追踪记录,绘制出一张图表,精准地呈现出高层级的时间线,让你清楚地看到到底发生了什么。不过有一点需要注意:任何没有被明确加入插桩(instrumented)的代码,都不会出现在追踪分析器的时间线上!
Godot 既支持采样分析器(sampling profilers),也支持追踪分析器(tracing profilers),并且已经内置了用于追踪分析器的常规 Godot 事件日志记录代码!
针对不同的问题,使用某一类分析器可能会比另一类更容易进行调试。不过,想要给出一套明确的标准来告诉你具体该用哪个,其实是很困难的。所以不妨两个都试试看,看看你能从中发现些什么!
采样型性能分析器
我们推荐使用以下的采样型性能分析器:
VerySleepy (仅适用于 Windows)
Hotspot(仅限 Linux)
Instruments (仅限苹果 Apple 平台)
这些性能分析器可能不是最强大或者最灵活的,但它们独立的操作和有限的功能非常易用。
设置 Godot
如果要获取有用的性能分析信息,就必须使用包含调试符号的 Godot 构建。官方二进制文件并不包含调试符号,因为会显著增加文件下载大小。
为了获取最贴近生产环境(但依然带有调试符号)的性能分析数据,你应该在编译二进制文件时,使用 production=yes debug_symbols=yes 这两个 SCons 选项。
在优化程度较低的构建版本上(比如没有开启 LTO 的 target=template_debug 版本)运行性能分析器也是可以的,但得出的结果自然无法完全代表真实世界的运行状况。
警告
请勿在编译完成后使用 strip 命令剥离调试符号,否则运行性能分析器时无法得到有用的信息。
测量启动/关闭耗时
如果你想专门优化 Godot 的启动或关闭性能,可以在配置性能分析器时,给 Godot 的可执行程序加上 --quit 这个命令行选项。这会让 Godot 在刚完成启动后立刻自动退出。 --quit 选项可以配合 --editor (启动编辑器)、 --project-manager (启动项目管理器)以及 --path <path to project directory> (直接运行某个项目)一起使用。
参见
更多 Godot 支持的命令行参数见 命令行教程。
追踪型性能分析器
Godot 目前支持三种追踪型分析器(tracing profilers):
Instruments (仅限苹果 Apple 平台)
备注
Perfetto 是 Android 默认的追踪系统,因此官方在 GitHub Releases 页面 上提供了已经内置并启用了 Perfetto 的预编译导出模板。
要想使用它们(指代上文提到的性能分析工具),你需要从源码自行编译引擎。如果你以前从未做过这件事,请先阅读针对你想要进行性能分析平台的 these docs 。你需要按照相同的步骤来操作,只是在执行 scons 命令时需要额外加上一些参数。