配置文件引导优化支持在 AGDE 22.2.71 版中引入。
查找 PGO 设置
从解决方案资源管理器中打开项目设置。
图 1:Visual Studio 解决方案资源管理器窗口。
确保您的平台设置为 Android 配置(例如,Android-arm64-v8a)。
在左侧面板中,选择配置属性 > 常规。查找名为 PGO 的属性组。
图 2:项目属性对话框。
在项目中启用 PGO 插桩构建
为您的项目添加一个名为插桩的新配置。这基于您在开发测试期间使用的配置,它应该是您传统的优化构建(只要您保留编译器优化设置,仍然可以启用其他调试功能)。
点击属性页对话框中的配置管理器…。
图 3:配置管理器对话框。
在配置管理器对话框中,选择活动解决方案配置下拉菜单,然后选择<新建…>。
图 4:创建新构建配置。
…并创建新的 PGO 插桩配置。
图 5:新建解决方案配置对话框。
要启用 PGO 插桩模式下的构建,以便为游戏生成配置文件,请在配置文件引导优化模式设置的选项列表中选择插桩。
图 6:项目属性对话框,突出显示 PGO 设置。
对于配置文件引导优化配置文件设置,输入要将原始输出配置文件数据文件写入 Android 设备上的文件夹路径。通常,此值应类似于 /data/data/<package name>/cache/
– 其中 <package name>
是您的 APK 的完整软件包名称 – 例如,com.google.sample.tunnel。
有关此工作原理的更深入信息,请参阅 Clang 文档。
将 PGO 插桩配置文件数据写入设备
PGO 数据通常在进程退出时由 PGO 插桩系统写入设备。在 Android 上,应用不会退出 – 它们总是被终止。这意味着默认的“写入磁盘”功能永远不会触发,需要您的应用手动写入 PGO 数据。
您的应用应该显式调用 __llvm_profile_write_file
来写入配置文件数据。此符号仅在构建 PGO 插桩构建时可用。为了简化此操作,我们建议在前向声明 __llvm_profile_write_file
时使用以下模式。
#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif
调用此函数会将配置文件数据写入您之前指定的文件夹。
执行配置文件运行
要生成配置文件,您可以在目标设备上运行使用 PGO 插桩构建的 APK。在您满意地运行代码并触发对 __llvm_profile_write_file
函数的调用后,您的应用会将配置文件数据写入存储。
此时,将配置文件从设备复制回来供编译器使用。
准备配置文件数据供编译器使用
在独立使用时,作为 Android NDK 中 Clang/LLVM 的一部分提供的命令行工具 llvm-profdata
用于准备配置文件数据文件,以供编译器在构建的配置文件引导优化期间使用。
AGDE 会自动为您执行此步骤,方法是合并您添加到项目中的任何配置文件数据文件,并在项目属性页中的配置文件引导优化模式设置设置为已优化时使用它们。
构建已启用配置文件引导优化的项目
现在您已经捕获了配置文件并将其添加到您的项目,编译器可以使用该数据来微调构建的优化。
为您的 PGO 优化构建创建新的项目配置,以便您仅在需要时才在此模式下构建。
图 7:创建新的 PGO 优化构建配置。
将项目属性页中的配置文件引导优化模式设置设置为已优化。
图 8:将 PGO 优化模式设置为“已优化”。
从设备复制文件并将其添加到解决方案资源管理器中的项目。这些配置文件数据文件将在您下次构建 PGO 优化配置时由编译器拾取,并用于调整编译器优化代码的方式。
您可以使用 ADB 或 Android 设备浏览器将配置文件数据文件从设备复制到您的项目。
在 AGDE 之外使用配置文件引导优化
如果您使用的构建系统不受 AGDE 支持,您可能需要直接编辑您的构建。Clang 的文档涵盖了必要的开关 – -fprofile-generate
和 -fprofile-use
。
如果您正在为游戏使用中间件引擎,请查阅您引擎的文档,了解如何启用 PGO(如果支持)。