了解OpenGL ES 开发人员工具(1)
8.1 Adreno profiler
改善3D应用程序的性能是一个具有挑战性的过程。 如果没有适当的工具集,开发人员通常会发现他们尝试使用试错法来发现瓶颈或识别视觉故障的源头,从而迫使应用程序为每次尝试进行重建。 这是一个耗时且繁琐的过程。
开发人员很少访问应用程序发出的ES命令的原始列表。 这使优化过程变得棘手,因为开发人员通常可能了解和理解其ES应用程序的功能,但可能无法完全了解渲染过程。 这意味着可能发出冗余的ES调用,从而降低了渲染效率。 ES应用程序开发人员可以使用一种工具来警告可能会从改进的GL状态管理处理中受益的区域,这将是有益的。
首先,渲染性能差的原因通常不清楚。 实时了解详细的GPU利用率,纹理缓存未命中或管道停滞统计信息将使您更容易确定速度下降的原因。
有时,渲染过程由许多绘制调用组成,并且很难具体确定这些绘制调用中的哪一个负责绘制破碎的网格。 能够突出显示由于任何特定的绘制调用而绘制的几何图形是很有帮助的。
在某些情况下,Adreno Profiler可以提供帮助,从而提供更好的渲染性能和更短的应用程序开发时间。
该工具以三种不同的模式工作,每种模式都适合不同的目的:
- 清理器模式–从运行在Qualcomm支持的嵌入式平台上的动画中捕获帧,并详细检查呼叫跟踪
- Grapher模式–绘制来自嵌入式图形驱动程序和系统的实时性能数据流
- 着色器分析器模式–离线分析片段和顶点着色器,以确定在实际的Adreno设备上运行它们的成本是多少
8.1.1 Scrubber 模式
此模式允许捕获帧以进行离线分析。 呼叫跟踪可用于以下用途:
- 捕获每个渲染调用的GPU指标,例如扩展的时钟周期,顶点和片段计数等(仅限OpenGL ES 2.0应用程序)
- 收集并显示重要的绩效统计数据
- 下载,检查和覆盖纹理
- 修改特定绘图调用的任何上下文状态变量,并在模拟器中查看结果更改
- 通过集成的OpenGL ES仿真器清理捕获的呼叫跟踪
- 在跟踪中搜索特定的状态设置
- 查看,编辑和覆盖着色器,以获得即时,实时的性能反馈,以优化着色器(仅基于OpenGL ES 2.0的应用程序)
覆盖的一个重要用例是用较小的版本替换原始纹理,实质上是在应用程序中使用压缩纹理。 由于艺术品烘烤会花费一些时间,因此,一旦放置了压缩的纹理,此功能就可以检查可以预期的性能改进。
8.1.2 Grapher 模式
此模式绘制来自嵌入式图形驱动程序的实时性能数据流,包括:
CPU
- 平均三角形面积
- 时钟频率
- 详细的指令计数,例如ALU,着色器分支和纹理获取
- 贞率
- 每个管道阶段的原始吞吐量和碎片吞吐量
- 停顿,例如texel提取和通用寄存器(GPR)
- 纹理缓存丢失
- 拉伸
系统
- 当驱动程序的操作成本很高时的反馈通知,例如解决阻塞管道何时被冲洗的解决方案
- 全局和上下文GPU活动
- 表示当前上下文的GPU活动或所有上下文的全局GPU活动的指标
在捕获性能指标时,还可以通过许多方式覆盖嵌入式图形驱动程序的操作,例如:
- 覆盖纹理参数
- 更换着色器
- 开启和关闭混合
8.1.3 着色器分析器模式
在这种模式下,开发人员可以将片段和顶点着色器代码粘贴到工具中,该工具将报告可能影响着色器执行时间的重要指标。 这些包括但不限于:
- 着色器使用的GPR数
- 着色器使用的ALU数量