对于应用开发者而言,最困难的问题之一是确保动画流畅、无故障、不卡顿。当系统同时执行资源密集型后台任务时,这一点尤其难以调试。没有简单的方法可以确定卡顿是由于您的应用还是系统引起的。然而,有一个性能分析器工具可以帮助您识别不良行为的可能来源。
在 ChromeOS 上渲染
一个经过精心优化的应用,例如游戏,通常会使用双缓冲来尽可能降低用户响应时间。但是,仍然有许多因素会降低性能。例如,如果渲染一帧花费的时间太长,渲染结果无法为下一次缓冲区交换做好准备,因此会导致上一帧重复。
然后,渲染器无法开始渲染下一帧,从而导致更多问题。这种情况对于 Android 移动开发者来说很熟悉;当应用在 ChromeOS 上运行时,上下文会更加复杂。
在桌面端运行的应用不会直接渲染到屏幕显示帧。它会将其数据渲染到纹理中。通常有多个应用,每个应用都将其图形渲染到一个纹理中。系统使用合成器将所有纹理组合成一个桌面图像,从而在屏幕上构建视图。
合成器在后台透明运行。但是,它会引入一帧的时间延迟,以最大限度地利用 GPU 管道。在一个理想的世界中,这可能没有必要,但它能平滑系统性能波动并帮助平衡不对称负载。
当操作系统工作非常努力时,GPU 可能会受到挤压。从帧渲染到其出现在屏幕上之间可能会有延迟。根据硬件的不同,系统可能会使用四重缓冲进行补偿。即使使用更深层的缓冲,图形管道仍然可能出现故障。
ARC 图形跟踪器
ChromeOS 有一个性能分析工具,可以显示缓冲区如何在系统中流动,内存交换何时发生,CPU/GPU 的繁忙程度,以及您的应用程序在给定时间正在做什么,如下图所示
设置性能分析器
要使用性能分析器,您必须运行 M75 或更高版本。为获得最佳效果,请使用 Intel 设备。
在使用性能分析器之前,请在您的应用中植入跟踪。在您希望包含跟踪的任何位置,将 Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);
添加到您的代码中。使用以 customTrace
前缀开头的 Event
。该前缀不会出现在跟踪消息中。
要设置性能分析器,请按照以下步骤操作
- 开启开发者模式。
- 开启 Chrome 设置并启用ARC 图形缓冲区可视化工具。
- 导航到
chrome://arc-graphics-tracing
。
运行性能分析器
- 选择在卡顿时停止。
- 运行 Android 应用。
- 当 Android 应用处于活动状态并获得焦点时,按下 Control+Shift+G。
当发生卡顿时,会弹出一个浏览器窗口。使用 W 和 S 键缩放和缩小时间线。