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.

使用 C++ 性能分析器

要优化 Godot 的性能,你首先得知道要优化什么,性能分析器在这方面非常有用。

备注

编辑器里虽然自带了一个 built-in GDScript profiler ,但在某些情况下,使用 C++ 性能分析器可能会更有帮助。比如当 GDScript 分析器的准确度不够,或者因为分析器自身的 Bug 而遗漏了部分信息时,C++ 分析器就能派上用场啦。

分析器主要分为两大类:采样分析器和追踪分析器。

采样分析器(sampling profilers)会周期性地打断正在运行的程序,并抓取一个“样本(sample)”,记录下此刻正在运行的是哪些函数。利用这些信息,分析器就能估算出程序在哪些函数上花费的时间最多。

追踪型分析器的工作原理是记录应用特定的事件(比如某一帧的开始和结束),并生成一个被称为“追踪记录("trace")”的日志。分析器可以利用这个追踪记录,绘制出一张图表,精准地呈现出高层级的时间线,让你清楚地看到到底发生了什么。不过有一点需要注意:任何没有被明确加入插桩(instrumented)的代码,都不会出现在追踪分析器的时间线上!

Godot 既支持采样分析器(sampling profilers),也支持追踪分析器(tracing profilers),并且已经内置了用于追踪分析器的常规 Godot 事件日志记录代码!

针对不同的问题,使用某一类分析器可能会比另一类更容易进行调试。不过,想要给出一套明确的标准来告诉你具体该用哪个,其实是很困难的。所以不妨两个都试试看,看看你能从中发现些什么!

采样型性能分析器

我们推荐使用以下的采样型性能分析器:

这些性能分析器可能不是最强大或者最灵活的,但它们独立的操作和有限的功能非常易用。

设置 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):

备注

Perfetto 是 Android 默认的追踪系统,因此官方在 GitHub Releases 页面 上提供了已经内置并启用了 Perfetto 的预编译导出模板。

要想使用它们(指代上文提到的性能分析工具),你需要从源码自行编译引擎。如果你以前从未做过这件事,请先阅读针对你想要进行性能分析平台的 these docs 。你需要按照相同的步骤来操作,只是在执行 scons 命令时需要额外加上一些参数。