应用开发者面临的最棘手问题之一是如何确保动画流畅、无故障且无卡顿。当系统也在执行资源密集型后台任务时,这尤其难以调试。无法轻松确定某些卡顿是由您的应用还是系统引起的。但是,有一个分析器工具可以帮助您识别不良行为的可能来源。
在 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 键放大和缩小时间轴。