调试动画卡顿

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

在 ChromeOS 上渲染

经过精心调整的应用(如游戏)通常使用双缓冲来尽可能降低用户响应时间。尽管如此,仍有许多因素会降低性能。例如,如果渲染一帧花费的时间过长,则渲染结果未准备好进行下一次缓冲区交换,因此上一帧会重复。

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

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

合成器在后台透明地工作。但是,它会引入一帧的时间延迟,以最大程度地利用 GPU 管道。在理想情况下,这可能不是必需的,但它可以平滑系统性能波动并帮助平衡非对称负载。

当操作系统处于高负载状态时,GPU 可能会受到挤压。从帧渲染到显示在屏幕上之间可能会存在延迟。根据硬件的不同,系统可能会使用四倍缓冲来进行补偿。即使使用更深的缓冲,图形管道仍然可能出现故障。

ARC 图形跟踪器

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

设置性能分析器

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

在使用性能分析器之前,请在您的应用中添加跟踪信息。在您想要包含跟踪的任何位置,将 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 键来放大和缩小时间线。