调试动画卡顿问题

对于应用开发者来说,最困难的问题之一就是确保动画流畅、无故障且无卡顿。当系统也在执行会占用大量资源的后台任务时,此问题尤其难以调试。没有简单的方法来确定某些卡顿是由您的应用还是系统导致的。不过,我们提供了一个性能分析器工具,可帮助您确定不良行为的可能来源。

在 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 应用处于活动状态并具有焦点时,按 Ctrl+Shift+G

当发生某种卡顿现象时,系统会弹出一个浏览器窗口。 使用 WS 键可缩放时间轴。