调试动画卡顿

对于应用开发者而言,最困难的问题之一是确保动画流畅、无故障、不卡顿。当系统同时执行资源密集型后台任务时,这一点尤其难以调试。没有简单的方法可以确定卡顿是由于您的应用还是系统引起的。然而,有一个性能分析器工具可以帮助您识别不良行为的可能来源。

在 ChromeOS 上渲染

一个经过精心优化的应用,例如游戏,通常会使用双缓冲来尽可能降低用户响应时间。但是,仍然有许多因素会降低性能。例如,如果渲染一帧花费的时间太长,渲染结果无法为下一次缓冲区交换做好准备,因此会导致上一帧重复。

然后,渲染器无法开始渲染下一帧,从而导致更多问题。这种情况对于 Android 移动开发者来说很熟悉;当应用在 ChromeOS 上运行时,上下文会更加复杂。

在桌面端运行的应用不会直接渲染到屏幕显示帧。它会将其数据渲染到纹理中。通常有多个应用,每个应用都将其图形渲染到一个纹理中。系统使用合成器将所有纹理组合成一个桌面图像,从而在屏幕上构建视图。

合成器在后台透明运行。但是,它会引入一帧的时间延迟,以最大限度地利用 GPU 管道。在一个理想的世界中,这可能没有必要,但它能平滑系统性能波动并帮助平衡不对称负载。

当操作系统工作非常努力时,GPU 可能会受到挤压。从帧渲染到其出现在屏幕上之间可能会有延迟。根据硬件的不同,系统可能会使用四重缓冲进行补偿。即使使用更深层的缓冲,图形管道仍然可能出现故障。

ARC 图形跟踪器

ChromeOS 有一个性能分析工具,可以显示缓冲区如何在系统中流动,内存交换何时发生,CPU/GPU 的繁忙程度,以及您的应用程序在给定时间正在做什么,如下图所示

设置性能分析器

要使用性能分析器,您必须运行 M75 或更高版本。为获得最佳效果,请使用 Intel 设备。

在使用性能分析器之前,请在您的应用中植入跟踪。在您希望包含跟踪的任何位置,将 Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); 添加到您的代码中。使用以 customTrace 前缀开头的 Event。该前缀不会出现在跟踪消息中。

要设置性能分析器,请按照以下步骤操作

  1. 开启开发者模式。
  2. 开启 Chrome 设置并启用ARC 图形缓冲区可视化工具
  3. 导航到 chrome://arc-graphics-tracing

运行性能分析器

  1. 选择在卡顿时停止
  2. 运行 Android 应用。
  3. 当 Android 应用处于活动状态并获得焦点时,按下 Control+Shift+G

当发生卡顿时,会弹出一个浏览器窗口。使用 WS 键缩放和缩小时间线。