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