Android NDK开发详解之调试和性能分析的检查 GPU 渲染

Android NDK开发详解之调试和性能分析的检查 GPU 渲染

    • 检查 GPU 渲染速度和过度绘制
    • 分析 GPU 渲染速度
      • 启用性能分析器
      • 检查输出
    • 直观呈现 GPU 过度绘制

检查 GPU 渲染速度和过度绘制

Android 包含一些设备上的开发者选项,可帮助您直观地查看应用可能会在何处遇到界面渲染问题,如执行不必要的渲染工作,或执行长时间的线程和 GPU 操作。本页介绍了如何调试 GPU 过度绘制以及如何分析 GPU 渲染。

如需详细了解设备上的开发者选项,包括如何启用它们,请阅读配置设备上的开发者选项。

分析 GPU 渲染速度

GPU 渲染模式分析工具以滚动直方图的形式直观地显示渲染界面窗口帧所花费的时间(以每帧 16.67 毫秒的速度作为对比基准)。

在性能较低的 GPU 上,可用的填充率(GPU 填充帧缓冲区的速度)可能很低。随着绘制一帧所需的像素数的增加,GPU 可能需要更长的时间来处理新命令,并要求系统的其余任务等待,直到它跟上进度。此分析工具可帮助您确定 GPU 何时因尝试绘制像素而不堪重负,或何时因大量的过度绘制而被拖累。

注意:此分析工具不适用于使用 NDK 的应用。这是因为每当 OpenGL 采用全屏上下文时,系统都会将框架消息推送到后台。在这种情况下,您可能会发现 GPU 制造商提供的分析工具很有帮助。

启用性能分析器

开始前,请确保您使用的是搭载 Android 4.1(API 级别 16)或更高版本的设备,并启用开发者选项。如需在使用应用时开始分析设备 GPU 渲染,请执行以下操作:

在您的设备上,转到设置并点按开发者选项。
在监控部分,选择 GPU 渲染模式分析或 HWUI 呈现模式分析,具体取决于设备上搭载的 Android 版本。
在“GPU 渲染模式分析”对话框中,选择在屏幕上显示为条形图,以在设备的屏幕上叠加图形。
打开您要分析的应用。

检查输出

在图 1 中显示的 GPU 渲染模式分析图形的放大图像中,您可以看到 Android 6.0(API 级别 23)上显示的彩色部分。
Android NDK开发详解之调试和性能分析的检查 GPU 渲染_第1张图片

图 1. 放大的 GPU 渲染模式分析图形。

下面是有关输出的几点注意事项:

对于每个可见应用,该工具将显示一个图形。
沿水平轴的每个竖条代表一个帧,每个竖条的高度表示渲染该帧所花的时间(以毫秒为单位)。
水平绿线表示 16.67 毫秒。若要实现每秒 60 帧,代表每个帧的竖条需要保持在此线以下。当竖条超出此线时,可能会使动画出现暂停。
该工具通过加宽对应的竖条并降低透明度来突出显示超出 16.67 毫秒阈值的帧。
每个竖条都有与渲染管道中某个阶段对应的彩色区段。区段数因设备的 API 级别不同而异。
下表介绍了使用运行 Android 6.0 及更高版本的设备时分析器输出中某个竖条的每个区段。
Android NDK开发详解之调试和性能分析的检查 GPU 渲染_第2张图片

表 1. Android 6.0 及更高版本中的竖条区段。

4.0(API 级别 14)和 5.0(API 级别 21)之间的 Android 版本具有蓝色、紫色、红色和橙色区段。低于 4.0 的 Android 版本只有蓝色、红色和橙色区段。下表显示的是 Android 4.0 和 5.0 中的竖条区段。

Android NDK开发详解之调试和性能分析的检查 GPU 渲染_第3张图片

表 2. Android 4.0 和 5.0 中的竖条区段。

如需详细了解如何解释分析工具提供的信息,请阅读使用 GPU 渲染模式分析工具进行分析。

注意:尽管此工具名为“GPU 渲染模式分析”,但所有受监控的进程实际上发生在 CPU 中。通过将命令提交到 GPU 来触发渲染,GPU 也会异步渲染屏幕。在某些情况下,GPU 可能会有太多工作要处理,因此您的 CPU 必须先等待一段时间,然后才能提交新命令。如果发生这种情况,您将看到橙色竖条和红色竖条上出现峰值,且命令提交将被阻止,直到 GPU 命令队列中腾出更多空间。

直观呈现 GPU 过度绘制

这是开发者选项中的另一个功能,通过对您的界面进行彩色编码来帮助您识别过度绘制。当您的应用在同一帧中多次绘制相同像素时,便会发生过度绘制。因此,此图可显示您的应用可能在何处执行不必要的渲染工作,这可能是 GPU 多此一举地渲染用户不可见的像素所导致的性能问题。因此,您应尽可能修复过度绘制事件。
Android NDK开发详解之调试和性能分析的检查 GPU 渲染_第4张图片
Android NDK开发详解之调试和性能分析的检查 GPU 渲染_第5张图片

你可能感兴趣的:(学习交流,android,java,kotlin,c++,数据结构)