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.

Perfetto

参见

详情请参阅 tracing profiler instructions

Perfetto 是安卓(Android)系统默认的性能追踪工具。事实上,它的系统追踪服务从 Android 9 开始就已经内置在安卓平台里了。

使用官方提供的 Perfetto 模板

从 Godot 4.7 版本开始,官方发布的每一个稳定版 Godot 都会附带 Perfetto 导出模板,你可以直接从 GitHub Releases page 下载。

使用 Gradle 构建模板

  • 请前往(GitHub)的 Release(发布)页面,下载名为 Godot_v<godot_version>_android_source.perfetto.zip 的发布文件。其中,godot_version 需要替换为你当前正在使用的引擎版本号。

  • 项目 > 导出 对话框中,必须启用 高级选项使用 Gradle 构建

  • 请将 Android Source Template(安卓源码模板) 这一项,指向你刚刚下载好的导出模板文件。

../../../_images/cpp_profiler_perfetto_gradle_build_config.webp

请按照 Configuration section 中的说明,来了解如何配置并创建追踪(trace)。

使用非 Gradle 构建模板

  • 请前往 Release(发布)页面,下载以下发布产物(release artifacts)。注意,其中的 godot_version 需要替换为你当前正在使用的引擎版本号。

    • Godot_v<godot_version>_android_debug.perfetto.apk (用于调试构建)

    • Godot_v<godot_version>_android_release.perfetto.apk (用于发布版本)

  • Project > Export (项目 > 导出)对话框中:

    • 必须启用 高级选项

    • 必须禁用(关闭) Use Gradle Build

  • 请将 Custom Template (自定义模板)指向你下载好的导出模板文件。

../../../_images/cpp_profiler_perfetto_non_gradle_build_config.webp

请按照 Configuration section 中的说明,来了解如何配置并创建追踪(trace)。

带 Perfetto 支持的自定义 Godot 构建

godot 根目录下,运行以下 Python 脚本,即可在 thirdparty/perfetto 路径下安装最新版本的 Perfetto SDK:

python misc/scripts/install_perfetto.py

接下来,请参照《安卓平台编译指南》( Compiling for Android ),使用 scons 为你的目标架构编译 Android 的 debug 或 release 模板。不过,你需要额外加上 profiler=perfetto 这个参数。

备注

通常来说,建议使用 Release(发布)模板来进行性能分析,因为这才是你的玩家们最终会玩到的版本,而且它的运行表现会和其他类型的构建版本有所不同。不过,在安卓(Android)这个特定情况下,使用 Debug(调试)模板有时候也会很有用,因为 Godot 只能对从 Debug 模板导出的游戏进行远程调试。

例如,要为 arm64 架构编译发布模板:

scons platform=android target=template_release arch=arm64 generate_android_binaries=yes profiler=perfetto

配置

Perfetto 需要一个配置文件来告诉它具体应该追踪哪些事件。

创建一个名为 godot.config 的文件,并填入以下内容:

# Trace for 10 seconds.
duration_ms: 10000

buffers {
    size_kb: 32768
    fill_policy: RING_BUFFER
}

# Write to file once every second to prevent overflowing the buffer.
write_into_file: true
file_write_period_ms: 1000

# Track events in the "godot" category.
data_sources {
    config {
        name: "track_event"
        track_event_config {
            enabled_categories: "godot"
        }
    }
}

备注

Godot 会记录两类追踪事件(track events):

  • godot :用于记录 Godot 引擎事件。主要用于性能分析。事件追踪的开销不会显著影响性能。这应该是大多数开发者常用的追踪模式。

  • godot_scripting:用于记录 Godot 脚本相关的事件。这是一个比较慢(开销较大)的类别,因为它会对整个游戏的脚本逻辑进行性能分析。它通常用于理解代码逻辑、调试、或者找出到底是什么导致了游戏画面的瞬间卡顿(frame hitch)。开启后性能会明显变慢,但它能帮你揪出那个平时隐藏很深、引发问题的特定函数调用。

抓取追踪记录

最后,使用你之前自己编译好的导出模板,将你的游戏启动并运行在安卓设备上。

当您准备录制跟踪信息时(例如,当您已进入游戏的某个部分并发现性能问题时),你可以使用 Perfetto GitHub仓库中的此脚本

./record_android_trace -c /path/to/godot.config

这会录制 10 秒钟(根据配置设定),或者直到你按下 Ctrl + C 为止。

分析追踪记录

一旦那个脚本执行完毕退出,它就会自动在网页浏览器中打开 Perfetto 的可视化界面(UI)。

要查看Godot事件,请通过单击您的应用的Android 唯一名称 / 软件包名称 / 应用ID 来展开该应用的行(Perfetto还会在跟踪中包含一些来自系统服务的事件)。

../../../_images/cpp_profiler_perfetto.webp

然后,你就可以用 WASD 这几个键在图表里自由浏览啦:

  • 按下 A 键或 D 键,可以在时间轴上向前或向后浏览

  • 按下 WS 以放大或缩小

你可能需要稍微放大一下视图,才能看清 Godot 产生的那些具体事件。

想了解更多详情,可以查阅 Perfetto UI documentation