调试动画卡顿

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

在 Chrome 操作系统上渲染

经过细致优化的应用(如游戏)通常会使用双重缓冲来尽可能缩短用户响应时间。尽管如此,仍有很多因素可能会降低性能。例如,如果渲染某一帧花费的时间太长,渲染的结果还没有为下一个缓冲区交换做好准备,因此前一帧就会重复。这样,渲染程序就无法开始渲染下一帧,从而导致更多问题。这种情况对于“纯粹的”Android 开发者来说很熟悉。当应用在 Chrome 操作系统上运行时,情况变得更加复杂。

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

合成器在后台以透明方式工作。不过,它引入了一帧时间延迟,以最大限度地利用 GPU 管道。在理想情况下,可能没有必要这样做,但这样可以缓和系统性能波动,并且有助于平衡不对称负载。

当操作系统工作非常吃力时,GPU 可能会遭到挤压。从渲染某一帧到它出现在屏幕上之间可能会有额外的延迟。系统可能会使用四重缓冲来进行补偿(这取决于硬件)。即使有了更深的缓冲,图形管道仍可能会出现故障。

ARC 图形跟踪器

Chrome 操作系统具有一个分析工具,该工具可以显示缓冲区如何渗透整个系统、何时发生内存交换、CPU/GPU 的繁忙程度,以及您的应用在给定时间执行的操作:

设置性能剖析器

如需使用性能剖析器,您必须运行 M75 或更高版本。为获得最佳效果,我们建议您使用 Intel 设备。

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

如需设置性能剖析器,请按以下步骤操作:

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

运行性能剖析器

  1. 勾选卡顿时停止
  2. 运行 Android 应用。
  3. 当 Android 应用处于活动状态并具有焦点时,按 Ctrl+Shift+G

当发生某种卡顿现象时,浏览器窗口会弹出。您可以使用 ws 键来缩放时间轴。