Android 动态性能框架 (ADPF) 是 Google 推出的一款强大工具,适用于希望优化应用性能的开发者。ADPF 通过其热管理 API 提供有关设备外部热状态的实时信息,这些信息随后用于调整应用中的图形设置。
出于研究目的,Arm 使用 Unreal Engine 和 ADPF 开发了一个演示,以研究如何使用 ADPF 优化游戏性能。
ADPF 会监控热状态,并相应地在游戏引擎中调整图形质量。
本着以开发者为中心的理念,我们的目标是让用户能够玩更长时间的游戏,同时不会影响游戏体验,也不会导致设备耗电过多。
准备工作
在详细了解该演示之前,我们有必要重点介绍一下 ADPF 的官方 Google 文档。本文档是一项宝贵的资源,可就如何使用 ADPF 提供深入的数据分析和指导。
不过,对于更喜欢自定义学习方式的用户,ADPF 示例代码库包含在 Android 应用中实现 ADPF 的实用示例。
调整图形设置
在 Unreal Engine 环境中,我们可以动态调整图形设置以保持性能。
我们在 ADPF 中使用了 Thermal State 监控器和 Thermal Headroom API 来监控热节流。然后,当设备开始节流时,您可以调整阴影质量、反射质量和纹理质量等质量设置。
Unreal Engine 中的以下图形质量设置用于修改各种设置:
- ViewDistanceQuality
- ShadowQuality
- GlobalIlluminationQuality
- ReflectionQuality
- AntiAliasingQuality
- TextureQuality
- VisualEffectQuality
- PostProcessingQuality
- FoliageQuality
- ShadingQuality
- OverallScalabilityLevel
实际测试
Arm 会自行制作演示版游戏,以便研究移动图形和游戏技术。今年,我们在其中一个演示(SteelArms)中测试了 ADPF。
SteelArms 具有不同级别的图形强度和大量的 CPU 工作负载。它采用与现代移动游戏类似的设计,因此我们可以对当今移动设备上的游戏行为进行建模。它还让我们能够测试不同技术在基于 Arm 的移动设备上的游戏中可能的运作方式。
结果
上图显示了启用 ADPF 来调整图形设置时,最佳画质(电影画质)与最低画质(低画质)之间的差异。这种变化是渐进的,用户在游戏过程中不会注意到。
分屏视图,左侧(蓝色机器人)显示最高的图形设置,右侧(红色机器人)显示最低的图形设置。
在前面的图 3 和图 4 中,可以并排看到同一台机器人的不同视图。仔细观察后,您会看到使用 ADPF 调整的图形设置。请注意擂台地板、机器人的肩膀、擂台绳索和观众。所有这些图片的质量似乎都略低,这是因为使用了 ADPF 的原因。
当即将发生节流时,SteelArms 演示中的这些效果会缩小。在后期处理和视觉效果方面,很难发现这些小幅降低。此外,用户在玩游戏时通常不会注意到这些广告。这意味着,您可以保留游戏的大部分视觉体验,而不会影响游戏体验。您可以在执行所有这些操作的同时,保持游戏的电源性能和设备的电池续航时间。
如前所述,为演示目的,我们将画质设置最高的图片与画质设置最低的图片进行了比较。因此,仔细观察时,您仍然可以看到差异。不过,在游戏过程中缩减时,用户几乎察觉不到,同时还能保持稳定的游戏体验。
结果
设备可避免过热,并保持在 1.0 热余量范围内。
耗电量
ADPF 结果
您可以在前面显示的图表中看到 ADPF 开启和关闭的结果。显示游戏的帧速率和核心的功耗存在差异。开启 ADPF 后,帧速率最高可提升 57%。ADPF 处于关闭状态时,GPU 会消耗大量电量。然后,大 CPU 核心的功耗峰值与 GPU 工作负载一致。因为它正在赶上所需处理的工作量。相比之下,当 ADPF 处于开启状态时,大 CPU 核心会响应节流,并降低设备中所有核心的总功耗。
总结
ADPF 可以显著降低游戏的功耗。这最终意味着,玩家可以延长游戏时间,同时延长电池续航时间并降低所用设备的温度。从开发者的角度来看,ADPF 会维持游戏的正确帧速率。同时让他们能够灵活地降低画质设置,同时仍能为用户提供出色的游戏体验。
新旧设备都可以受益于使用 ADPF。借助它,游戏无需进行额外的优化工作,即可在旧版设备上以高标准运行。