Android 设备上的一些开发人员选项,可帮助你应用在运行其 UI 时可视化遇到的问题,例如执行了多余的渲染工作,或执行长线程和 GPU 操作。
要了解有关设备上开发人员选项的更多信息,包括如何启用它们,请阅读配置设备上的开发人员选项。
一、分析 GPU 渲染速度
Profile GPU Rendering
工具以滚动直方图的形式显示相对于每帧 16 ms 的基准测试渲染 UI 窗口的帧所花费的时间。
在性能较差的 GPU 上,可用的填充率(GPU 可以填充帧缓冲区的速度)可能非常低。随着绘制帧所需的像素数量增加,GPU 可能需要更长的时间来处理新命令,并要求系统的其余部分等待直到它能够赶上来。分析工具可以帮助你识别 GPU 何时不堪重负。
注意:此分析工具不适用于使用 NDK 的应用程序。这是因为只要 OpenGL 采用全屏上下文,系统就会将框架消息推送到后台。在这种情况下,你可能会发现 GPU 制造商提供的分析工具很有帮助。
1.1 启用分析器
在开始之前,请确保你使用的是 Android 4.1(API 级别 16)或更高版本的设备,以及启用开发人员选项。要在使用应用程序时开始分析设备 GPU 渲染,请执行以下操作:
-
在你的设备上,打开设置,然后点击开发者选项。
-
在监控(Monitoring)部分中,选择 GPU 呈现模式分析(Profile GPU Rendering)。
-
在 GPU 呈现模式分析(Profile GPU Rendering)对话框中,选择在屏幕上显示为条形图(On screen as bars),以覆盖设备屏幕上的图形。
-
打开要分析的应用程序。
1.2 检查输出
在图 1 中所示的 Profile GPU Rendering 图的放大图像中,你可以看到彩色部分,如 Android 6.0(API 级别 23)所示。
图 1. 放大的配置文件 GPU 渲染图。以下是有关渲染图的一些注意事项:
-
对于每个可见的应用程序,该工具都会显示一个图表。
-
沿水平轴的每个直方条代表一帧,每个直方条的高度表示该帧渲染所用的时间(以毫秒为单位)。
-
绿色水平线代表 16 毫秒。要达到每秒 60 帧,每帧的直方条需要保持在此线以下。任何时候一个直方条超过这条线,都有可能出现卡顿。
-
该工具通过使直方条更宽且更不透明来突出显示超过 16 毫秒阈值的帧。
-
每个直方条都有颜色组件,可以映射到渲染过程中的阶段。组件数量取决于设备的 API 级别。
下表提供了使用运行 Android 6.0 及更高版本的设备时,直方条的每个段的说明。
4.0(API 级别 14)和 5.0(API 级别 21)之间的 Android 版本具有蓝色,紫色,红色和橙色段。4.0 以下的 Android 版本只有蓝色,红色和橙色组件。下表显示了 Android 4.0 和 5.0 中的组件栏。
注意:虽然工具名为 Profile GPU Rendering,但所有受监视的进程实际上都在 CPU 中进行。通过向 GPU 提交命令来进行渲染,GPU 以异步的方式渲染屏幕。在某些情况下,GPU 可能需要做太多工作,而 CPU 必须等待它才能提交新命令。发生这种情况时,你会在橙色和红色条中看到尖峰,并且命令提交将被阻塞,直到 GPU 命令队列上有空闲。
二、GPU 过度绘制可视化
GPU 过度绘制可视化可帮助你通过对 UI 进行颜色编码来识别是否存在过度绘制。当你的应用在同一帧内多次绘制相同的像素时,会发生过度绘制。这可能是一个性能问题,因为额外的 GPU 工作会渲染用户无法看到的像素。所以,你应该尽可能地修复过度绘制事件。
要可视化你的设备上的过度绘制,请按以下步骤操作:
-
在你的设备上,打开“设置”,然后点击“开发者选项”。
-
向下滚动到硬件加速渲染部分,然后选择调试 GPU 过度绘制(Debug GPU Overdraw)。
-
在调试 GPU 过度绘制(Debug GPU Overdraw)对话框中,选择显示过度绘制区域(Show overdraw areas)。
Android UI 元素过度绘制色谱图如下:
图 2. 正常显示的应用程序(左侧),以及启用 GPU Overdraw(右侧)时显示的应用程序 图 3. 具有大量过度绘制(左)和少量过度绘制的应用程序示例(右)请注意,这些颜色是半透明的,因此你在屏幕上看到的确切颜色取决于 UI 的内容。现在你可以识别出布局中出现过度绘制的位置,更多详情请看 Reduce overdraw。
请记住,一些过度绘制是不可避免的。当你调整用户界面时,尽量让渲染图显示大多数真实颜色或仅 1 倍过度绘制(蓝色)。
网友评论