Android 动态性能框架 (ADPF) 是 Google 为想要优化其应用程序性能的开发者提供的强大工具。通过其热管理 API,ADPF 提供有关设备热状态的实时信息,然后将其用于调整应用程序中的图形设置。
出于研究目的,Arm 使用虚幻引擎和 ADPF 开发了一个演示,以调查如何使用 ADPF 来优化游戏性能。
ADPF 监控热状态,游戏引擎会相应地调整图形质量。
考虑到开发者,目标是允许用户更长时间地玩游戏,而不会影响游戏体验和设备功耗过高。
开始之前
在更详细地查看演示之前,务必重点介绍一下关于 ADPF 的官方 Google 文档。这份文档是一个宝贵的资源,它提供了关于如何使用 ADPF 的深入见解和指导。
但是,对于那些喜欢自定义学习的人来说,ADPF 示例代码库包含在 Android 应用程序中实现 ADPF 的实际示例。
图形设置调整
在虚幻引擎的上下文中,我们可以动态调整图形设置以保持性能。
我们在ADPF中使用了Thermal State监控器和Thermal Headroom API来监控热限制。当设备开始降频时,您可以调整画质设置,例如阴影质量、反射质量和纹理质量。
虚幻引擎中的以下图形质量设置用于修改各种设置
- 视距质量 (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中受益。它允许游戏在上一代设备上以高标准运行,无需额外的优化工作。