配置文件引导优化支持在 AGDE 版本 22.2.71 中引入。
查找 PGO 设置
从解决方案资源管理器中打开您的项目设置。
图 1:Visual Studio 解决方案资源管理器窗口。
确保您的平台设置为 Android 配置(例如,Android-arm64-v8a)。
在左侧面板中,选择配置属性 > 常规。查找名为PGO的属性组。
图 2:项目属性对话框。
在项目中启用 PGO 检测构建
向您的项目添加一个名为Instrumented的新配置。这基于您在开发期间用于测试的配置,这应该是您传统的优化构建(只要您保留编译器优化设置,您仍然可以启用其他调试功能)。
在属性页对话框中单击配置管理器…。
图 3:配置管理器对话框。
在配置管理器对话框中,选择活动解决方案配置下拉列表并选择<新建…>。
图 4:创建新的构建配置。
… 并创建一个新的 PGO 检测配置。
图 5:新的解决方案配置对话框。
要启用以 PGO 检测模式构建,以便您可以为游戏生成配置文件,请从配置文件引导优化模式设置的选项列表中选择Instrumented。
图 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 会自动为您执行此步骤,方法是将您添加到项目中的任何配置文件数据文件合并在一起,并在项目属性页中将配置文件引导优化模式设置为Optimized时使用它们。
使用启用了配置文件引导优化的功能构建您的项目
现在您已捕获配置文件并将其添加到项目中,编译器可以使用这些数据来微调构建的优化。
为您的 PGO 优化构建创建一个新的项目配置,以便仅在需要时以这种模式构建。
图 7:创建新的 PGO 优化构建配置。
将项目属性页中的配置文件引导优化模式设置为Optimized。
图 8:将 PGO 优化模式设置为 Optimized。
将文件从设备复制并添加到解决方案资源管理器中的项目中。下次构建 PGO 优化配置时,编译器会拾取这些配置文件数据文件,并用于调整编译器优化代码的方式。
您可以使用 ADB 或 Android 设备资源管理器将配置文件数据文件从设备复制到项目中。
在 AGDE 之外使用配置文件引导优化
如果您使用的是 AGDE 不支持的构建系统,则可能需要直接编辑构建。 Clang 的文档涵盖了必要的开关 - -fprofile-generate
和-fprofile-use
。
如果您正在为游戏使用中间件引擎,请查阅引擎的文档以了解如何启用 PGO(如果支持)。