本主题介绍如何集成 Android 性能调优器(也称为 Tuning Fork 库),以记录和上传来自原生(C 和 C++)游戏引擎的帧时间数据。
对于 Unity 游戏引擎,请参阅 Unity 指南。
背景
游戏体验的关键组成部分是渲染性能。渲染性能是以下两个输入的结果
- 帧速率:绘制帧的频率。
- 图形质量设置:呈现帧的保真度级别,包括模拟保真度和图形。
对于游戏来说,良好的渲染性能定义如下
- 提供稳定一致的帧速率(即,以所需频率渲染的帧的百分比)。
- 以尽可能高的频率渲染帧,同时保持稳定性,通常为 30 或 60 FPS,具体取决于游戏类型。
- 在仍能实现所需稳定帧速率的情况下,针对用户屏幕大小和密度最大化细节级别。
Android 帧速率调节库 限制了帧时间的大部分变化,为游戏提供了稳定的帧速率。帧时间的剩余变化是由于游戏玩法中某些场景的细节级别以及设备的图形能力造成的。使用 Android 性能调优器,您可以精确确定游戏玩法期间帧时间比目标时间慢或快的时间,并将这些问题和机会关联到
- 特定质量设置
- 游戏中的特定场景
- 特定设备型号或设备规格
记录和上传数据
Tuning Fork 库依赖于 Android 帧速率调节库每帧调用其 滴答函数 之一。在库中,此滴答信息被聚合到直方图中,然后定期通过 HTTP 端点上传到 Google Play。每个滴答都被记录为与 仪器键 和 注释 相关联,您在协议缓冲区文件中指定它们的定义。
仪器键
仪器键指示滴答来自帧中的哪个位置,并且是一个整数,必须传递给每个滴答函数调用。Android 帧速率调节库使用预定义的仪器键集,在 swappy_common.h
中定义。如果您不使用帧速率调节库,也可以定义自己的仪器键。
注释
注释提供了有关记录滴答时游戏正在做什么的上下文信息。例如,注释可以识别以下任何内容
- 当前游戏级别
- 屏幕上有一个“大老板”
- 任何其他相关的游戏状态信息
注释由 com.google.tuningfork.Annotation
协议缓冲区消息定义。要设置当前注释,请将您定义的消息的序列化传递给 TuningFork_setCurrentAnnotation()
。所有后续滴答数据随后都与该注释相关联,直到设置另一个注释为止。以下是在注释的示例 proto 定义
import "tuningfork.proto"
enum Level {
INVALID_LEVEL = 0;
Level_1 = 1;
Level_2 = 2;
Level_3 = 3;
}
message Annotation {
optional Level level = 1;
}
保真度参数
保真度参数会影响游戏的性能和图形保真度,例如网格细节级别、纹理分辨率和抗锯齿方法。与注释类似,保真度参数是使用 com.google.tuningfork.FidelityParams
协议缓冲区消息定义的。以下是保真度参数的示例 proto 定义
import "tuningfork.proto"
message FidelityParams {
int32 texture_quality_level = 1;
int32 shadow_resolution = 2;
float terrain_details_percent = 3;
int32 post_processing_effects_level = 4;
}
在 Tuning Fork 初始化时,您会传递游戏使用的参数的序列化。如果您更改了游戏渲染设置(例如),则可以更改这些参数,并且您随后上传的数据将与新参数相关联。
为了使 Google Play 能够理解您定义的注释和保真度参数,保存这些定义的协议缓冲区文件必须与游戏 APK 捆绑在一起,以及初始化设置。您还需要在 APK 中提供常见保真度参数组合的默认值,以便在 Google Play UI 中按这些参数对数据进行细分。有关更多信息,请参阅 定义质量级别。
内存和 CPU 开销
Tuning Fork 库使用的所有内存都在初始化时分配,以避免在游戏玩法期间出现意外情况。数据的大小取决于仪器键的数量、可能的注释数量以及每个直方图中的存储桶数量;它是所有这些的倍数,乘以每个存储桶的 4 个字节。为了允许以双缓冲方式提交,所有直方图也有两个副本。
提交发生在单独的线程上,不会阻塞滴答调用。如果无法获得上传连接,则提交将被排队以供以后上传。
调用滴答函数几乎没有处理开销:它只是计算直方图存储桶数组中的索引并递增整数计数。
集成 Tuning Fork 库
本集成指南分为两部分。第一部分介绍如何使用演示应用和 Google Play Console 运行端到端测试。第二部分介绍如何将 Tuning Fork 库集成到您的工具链中,以及如何使用库提供的函数。单击下面的“下一步”链接开始。