使用 Intel GPA 系统分析器改进 Android* 应用





0/5 (0投票)
移动应用程序在模拟器和设备上的行为可能不同,而且随着应用程序变得越来越复杂,调试性能瓶颈可能会变得非常困难。GPA System Analyzer 是 Intel® INDE 的一部分,是一个可以帮助诊断各种性能问题的工具。
安装 Intel® Integrated Native Developer Experience Beta 版(Intel® INDE)
Intel INDE 提供一套完整且一致的 C++/Java* 工具、库和示例,用于在 Intel® 架构设备上以及部分 ARM* 架构 Android* 设备上进行环境设置、代码创建、编译、调试和分析。
在此处安装 Intel INDE:http://software.intel.com/en-us/intel-inde
为远程调试构建您的应用
为了让 GPA System Analyzer 能够连接到您的应用,您需要确保它具有INTERNET权限,并且debuggable设置为“true”。
了解应用
Art Browser 示例应用是一个基础的示例,它封装了大型真实应用程序的某些方面。它是一个极其简单的图片轮播,就像您在媒体播放器或图片浏览应用中可能找到的那样。它有两个在生产应用中找不到的按钮,这些按钮有助于重现常见的性能问题。
- 一个用于启用和禁用“高级数学计算”的按钮。这模拟了现实世界中的情况,您可以选择使用高级、CPU 密集型的物理引擎、极其冗长的日志记录、重型位图效果,或任何其他非应用程序成功所必需的 CPU 密集型功能。该按钮在启用状态下会通过过载 CPU 来显着降低应用程序速度,从而为我们提供机会来查看如何调试 CPU 绑定的应用程序。该按钮默认处于禁用状态,以允许应用程序平稳加载。
- 一个用于选择几何复杂度的下拉菜单。将大型平面细分为更小的瓷砖网格通常有利于避免深度排序问题。默认值为 128x128 网格,这比必需的更复杂,但有助于说明我们的观点。如此复杂的几何图形将使 GPU 过载,并让我们有机会了解 GPA 中的 GPU 绑定应用程序是什么样的。将其减少到任何较低的值都会使应用程序运行更流畅。
连接到您的应用
在您的设备或模拟器上构建并安装 Art Browser 示例应用。然后确保您的 Android 开发工具(Eclipse 等)未运行,因为这会导致连接到您的应用程序出现问题。启动 GPA System Analyzer 工具。它将列出您的本地计算机以及任何正在运行的模拟器或连接的设备。
确保您的设备或模拟器已解锁并启用了 USB 调试。点击“连接”按钮进行连接。GPA 将显示所有启用了调试的应用列表。
GPA 可以监控大量数据,但对于此应用程序,我们将最关注帧速率和 CPU 负载。将左侧边栏中的 CPU → Aggregated CPU Load 拖到顶部图表中,并将 OpenGL → FPS 拖到底部图表中。
优化代码
为了演示 CPU 绑定情况,我们需要通过应用中的按钮启用我们的复杂数学计算。我们可以立即看到它占用了 100% 的处理器。这解释了接近 0 FPS 的帧速率。再次单击按钮关闭重型数学运算会稍有改善,将聚合 CPU 负载降至 30% 以下,并将我们的 FPS 提高到勉强可用的 10。
优化 OpenGL
我们已经禁用了唯一 CPU 密集型的代码段,但我们的性能仍然相对较差。我们现在唯一的选择是优化 OpenGL 渲染。图形瓶颈可能比 CPU 瓶颈更难解决,因为 OpenGL 图形管道是一个复杂的过程,并不总有一个指标可以揭示问题。幸运的是,GPA 配备了一套丰富的 OpenGL 优化工具,其中包括用于打开或替换 OpenGL 渲染管道不同部分的复选框。
确定您的应用程序是否为具有 OpenGL 瓶颈的 GPU 绑定应用程序的最简单方法是使用“禁用绘制调用”状态覆盖。这将关闭已发送到 GPU 的所有操作。如果使用此覆盖不能提高性能,我们就知道问题与 CPU 相关。然而,如果 FPS 显着提高,我们肯定存在 OpenGL 瓶颈。
正如您所见,FPS 图表因此飙升,所以我们知道我们的应用程序是 GPU 绑定的。通过禁用所有状态覆盖,然后使用 Texture 2x2 覆盖,我们可以看看高分辨率纹理是否会导致问题。
这几乎没有带来任何改变。然后,我们可以尝试使用 Simple Fragment Shader 覆盖来查看我们的着色器代码是否过于复杂。
同样,没有达到我们期望的收益。通过比较 TA Load 指标和 USSE Vertex Load 指标,我们可以测试过于复杂的几何图形。将 GPU → TA Load 指标拖到顶部图表,然后按住 CTRL 并将 GPU → USSE Vertex Load 指标也拖到顶部图表,使其与 TA Load 一起显示。与您可能期望的有些相反,高 TA Load 和低 Vertex Load 表明正在处理过多的顶点。
这显然是一个问题,因为 TA Load 的数量级要高得多。然而,请注意,它仍然徘在 50% 以下。值得再次注意的是,即使是严重的图形瓶颈也可能不会使任何一个指标达到 100%。
通过使用我们应用程序中的 Geometry Complexity 旋转器,我们可以将几何图形简化为 2x2 网格。
这带来了即时的 FPS 提升,并且 TA Load 与 USSE Vertex Load 更加平衡。如果我们想在性能和深度排序之间找到最佳点,我们也可以尝试 8x8 和 32x32。现在,应用程序已准备好投入使用了!
注意:应用程序在 Intel Atom 处理器 Z2760 平板电脑上进行了测试并分析了结果。
结论
尽管在商业规模的应用程序中调试性能问题可能很困难,但 GPA System Analyzer 在调查复杂的性能瓶颈方面可以是一个巨大的优势。有关更多信息和完整文档,请访问 Intel.com 上的 GPA System Analyzer 主页。