Android 检查 GPU 渲染速度以及是否过度绘制

Inspect GPU rendering speed and overdraw

Analyze with Profile GPU Rendering

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 渲染,请执行以下操作:

  1. 在你的设备上,打开设置,然后点击开发者选项

  2. 监控(Monitoring)部分中,选择 GPU 呈现模式分析(Profile GPU Rendering)

  3. GPU 呈现模式分析(Profile GPU Rendering)对话框中,选择在屏幕上显示为条形图(On screen as bars),以覆盖设备屏幕上的图形。

  4. 打开要分析的应用程序。

1.2 检查输出

在图 1 中所示的 Profile GPU Rendering 图的放大图像中,你可以看到彩色部分,如 Android 6.0(API 级别 23)所示。

7182360-bad272a2a708a1bc.png
图 1. 放大的配置文件 GPU 渲染图。

以下是有关渲染图的一些注意事项:

  • 对于每个可见的应用程序,该工具都会显示一个图表。

  • 沿水平轴的每个直方条代表一帧,每个直方条的高度表示该帧渲染所用的时间(以毫秒为单位)。

  • 绿色水平线代表 16 毫秒。要达到每秒 60 帧,每帧的直方条需要保持在此线以下。任何时候一个直方条超过这条线,都有可能出现卡顿。

  • 该工具通过使直方条更宽且更不透明来突出显示超过 16 毫秒阈值的帧。

  • 每个直方条都有颜色组件,可以映射到渲染过程中的阶段。组件数量取决于设备的 API 级别。

下表提供了使用运行 Android 6.0 及更高版本的设备时,直方条的每个段的说明。

7182360-c40c8827f45fe439.png

4.0(API 级别 14)和 5.0(API 级别 21)之间的 Android 版本具有蓝色,紫色,红色和橙色段。4.0 以下的 Android 版本只有蓝色,红色和橙色组件。下表显示了 Android 4.0 和 5.0 中的组件栏。

7182360-0f17a0f5f1532f32.png

注意:虽然工具名为 Profile GPU Rendering,但所有受监视的进程实际上都在 CPU 中进行。通过向 GPU 提交命令来进行渲染,GPU 以异步的方式渲染屏幕。在某些情况下,GPU 可能需要做太多工作,而 CPU 必须等待它才能提交新命令。发生这种情况时,你会在橙色和红色条中看到尖峰,并且命令提交将被阻塞,直到 GPU 命令队列上有空闲。

二、GPU 过度绘制可视化

GPU 过度绘制可视化可帮助你通过对 UI 进行颜色编码来识别是否存在过度绘制。当你的应用在同一帧内多次绘制相同的像素时,会发生过度绘制。这可能是一个性能问题,因为额外的 GPU 工作会渲染用户无法看到的像素。所以,你应该尽可能地修复过度绘制事件。

要可视化你的设备上的过度绘制,请按以下步骤操作:

  1. 在你的设备上,打开“设置”,然后点击“开发者选项”

  2. 向下滚动到硬件加速渲染部分,然后选择调试 GPU 过度绘制(Debug GPU Overdraw)

  3. 调试 GPU 过度绘制(Debug GPU Overdraw)对话框中,选择显示过度绘制区域(Show overdraw areas)

Android UI 元素过度绘制色谱图如下:

7182360-84700a8ac2ce636c.png
7182360-35ccebcf53da0b6e.png
图 2. 正常显示的应用程序(左侧),以及启用 GPU Overdraw(右侧)时显示的应用程序
7182360-e5bfc1b66cf393c8.png
图 3. 具有大量过度绘制(左)和少量过度绘制的应用程序示例(右)

请注意,这些颜色是半透明的,因此你在屏幕上看到的确切颜色取决于 UI 的内容。现在你可以识别出布局中出现过度绘制的位置,更多详情请看 Reduce overdraw

请记住,一些过度绘制是不可避免的。当你调整用户界面时,尽量让渲染图显示大多数真实颜色或仅 1 倍过度绘制(蓝色)。

猜你喜欢

转载自blog.csdn.net/weixin_33697898/article/details/86995649