借助 Android Studio 中的功耗性能分析器进行 A/B 测试

作者 / Android Studio 产品经理 Mayank Jain 和软件工程师 Yasser Dbeis

我们知道 Android 开发者一直希望找到能在不同 Android 设备上优化功耗的工具。

Android Studio 中全新的 功耗性能分析器 可显示设备在运行应用时的功耗,从而为 Android 开发者提供帮助。了解各种 Android 设备上的功耗有助于 Android 开发者识别和解决其应用中的功耗问题。您可以运行 A/B 测试来比较不同算法、功能甚至不同版本应用的功耗。

△ Android Studio 中全新的功耗性能分析器

针对低功耗进行优化的应用可以改善设备的电池和散热性能,这意味着 Android 提供的用户体验也将得到改善。

在 Pixel 6 及之后推出的 Pixel 设备上,设备端功耗管理器 (ODPM) 可提供功耗数据,该数据会按照名为 “电源轨 (Power Rails)” 的子系统进行细分。有关受支持子系统的列表,您可以查阅官方网站了解有关 可分析电源轨 的详细信息。

功耗性能分析器可以帮助应用开发者检测以下几个方面的问题:

  • 检测功耗超出必要范畴的未优化代码。
  • 查找导致非必要 CPU 占用的后台任务。
  • 识别在非必要时使设备保持唤醒状态的唤醒锁定。

一旦识别出功耗问题,功耗性能分析器便可通过测试不同的假设,了解造成应用功耗过高的原因。例如,如果问题是由后台任务引起的,那么开发者可以尝试阻止任务在非必要情况下运行或长时间运行。如果问题是由唤醒锁定引起的,那么开发者可以尝试在不使用资源时释放唤醒锁定,或以更明智的方式使用它们。然后,开发者就可以使用功耗性能分析器比较变更前后的功耗区别。

本文将展示 A/B 测试帮助您理解您应用的功耗特征会如何随着同一功能的不同版本产生变化,并且帮助您有效地测量这些变化。欢迎您继续阅读,了解更多详情。

真实示例:功耗性能分析器可帮助您改善应用电池续航时间

假设您有一款应用,用户可以通过该应用购买他们最喜欢的电影。

△ 示例应用,用于演示测量功耗的 A/B 测试视频 (c) 版权所有 Blender 基金会 | www.bigbuckbunny.org

随着您的应用越来越流行并为人所熟知,您会发现每次启动应用时,高画质 4K 视频都需要很长时间才能加载完毕。由于该视频较大,您希望了解加载该视频对设备功耗的影响。

最初,该视频是以 4K 画质呈现的,旨在以最佳画质向您的用户展示电影的精彩片段。

但在视频加载时间过长的情况下,您或许会考虑:

  • 您是否真的需要在主页上显示 4K 视频?
  • 每次运行应用时都通过网络加载 4K 视频是否有意义?
  • 如果您将 4K 视频替换为画质较低的视频 (但仍保留视频的观感),应用的功耗特征将会发生什么变化?

针对功耗进行 A/B 测试的最佳场景

通过 A/B 测试,您可以测试视频功能不同的两个变体,从而选择功耗特征更好的变体。

场景 A:运行应用时在屏幕上播放 4K 视频,并测量功耗
场景 B:运行应用时在屏幕上播放分辨率较低的视频,并测量功耗

A/B 测试设置

让我们花点时间设置 Android Studio 性能分析器,以便进行此 A/B 测试。我们需要启动应用,并将 CPU 性能分析器附加到应用上,然后触发系统跟踪 (功耗性能分析器将显示在此处)。

第 1 步

点击菜单 > 编辑,以创建自定义 “Run configuration” (运行配置)

△ 自定义运行配置

第 2 步

然后,选择 “Profiling” (分析) 选项卡,并确保选择 “Start this recording on startup” (启动时开始进行记录) 以及 “CPU Activity” (CPU 活动) > “System Trace” (系统跟踪) 并点击 “Apply” (应用)。

△ 编辑配置设置

现在,每当您想从头运行此应用并将 CPU 性能分析器附加到应用上时,只需运行 “Profile app startup profiling with low overhead” (低开销的应用启动分析) 即可。

测试精度注意事项

以下示例场景使用整个应用启动过程来估算功耗,以达成测试的目的。但是,您可以使用更高级的方法来获取精度更高的功耗读数,例如:

  • 仅点击视频播放器后,才隔离并测量播放视频的功耗
  • 使用跟踪标记 API 在时间轴上标记功耗测量的开始和结束时间,然后仅测量该标记时间段内的功耗

场景 A

在此场景中,我们在运行应用时播放 4K 视频,并测量前 30 秒的功耗。我们还可以选择多次运行场景 A,并取平均数。Android Studio 中显示系统跟踪标记后,在时间轴选择面板中选择 0 - 30 秒的时间范围,并截图记录,用于与场景 B 进行比较。

△ 场景 A (播放 4K 视频) 中的功耗

如您所见,WLAN、CPU 内核和内存的平均合计功耗约为 1,352 mW (毫瓦)。现在,让我们将其与场景 B 中的功耗进行比较,看看有什么变化

场景 B

在此场景中,我们在运行应用时播放画质较低的视频,并测量前 30 秒的功耗。与之前一样,我们也可以选择多次运行场景 B,并取功耗平均数。同样,Android Studio 中显示系统跟踪标记后,在时间轴选择面板中选择 0 - 30 秒的时间范围。

△ 场景 B (播放画质较低的视频) 中的功耗

WLAN、CPU Little、CPU Big、CPU Mid 及内存的总功耗约为 741 mW (毫瓦)。

总结

在其他条件相同的情况下,场景 B (使用画质较低的视频) 的功耗为 741 mW,而场景 A (使用 4K 视频) 的功耗则为 1,352 mW。

场景 B (画质较低视频) 的功耗比场景 A (4K视频) 低 45%,而画质较低的视频在应用上的画面观感与 4K 视频几乎没有差异。

通过对功耗进行 A/B 测试,您会发现,在应用主页上以画质较低的视频替换 4K 视频不仅可以将功耗降低 45%,还可以降低所需的网络带宽,同时还有可能改善设备的散热性能。

如果您应用的业务逻辑仍然要求在应用画面上呈现 4K 视频,您也可以探索以下策略:

  • 将 4K 视频缓存,用于应用的后续运行。
  • 在用户点击时才加载视频。
  • 最初仅加载图像,在画面完全渲染后再加载视频 (延迟视频加载)。

上述 A/B 测试场景中提供的功耗总数看起来可能很小,但由此我们展示了一种方法和思路,帮助应用开发者使用 Android Studio 中的功耗性能分析器有效地对其应用功能的功耗进行 A/B 测试。

未来计划

全新的功耗性能分析器将在 Android Studio Hedgehog 及后续版本中提供。您可以参 阅官方文档 了解更多信息。欢迎您持续关注我们,及时了解更多开发技术和产品更新等资讯动态。