Xcode 8 Instruments 工具集的变化与趋势

2,942 阅读3分钟
原文链接: www.jianshu.com

最近项目比较赶,没看Xcode 8的发布说明,不过,在做性能优化时,发现Instruments工具集比Xcode 7少了几项,被精简的工具中有一项对我们项目影响较大,就是GPU Driver。

Xcode 8 Instruments保留了17个工具。


Xcode 8 Instruments

相比之下,Xcode 7 Instruments装载了19个工具。


Xcode 7 Instruments

被删除的工具分别是Automation和GPU Driver。Automation执行我们编写的脚本并启动在Automation分析应用列表中指定的App,这些脚本模拟了界面点击功能。GPU Driver则从GPU驱动统计接口调用并对相应时间段的CPU占用情况进行采样,用以分析OpenGL (ES)代码的性能。


被移除的工具

趋势分析

下面就Instruments的变更谈谈个人想法。

  1. Automation对应了自动化界面逻辑测试,此次Xcode更新移除它是否会在后期给出更方便的替代品,暂未得到消息,因此令人费解。
  2. GPU Driver的移动与Metal System Trace工具新增了tvOS和macOS对Metal的支持,暗示了苹果将不会推出官方支持的Vulkan,因为GPU Driver的存在主要是分析OpenGL (ES)程序的性能,Metal System Trace新增说明如下图所示。


    Metal System Trace新增说明

    那么,在未来的日子里,OpenGL ES 3.0将是iOS支持的最后一个OpenGL ES版本。对于国内多数GPU编程的小团队而言,可能需要同时使用Xcode 7及Xcode 8,工作流依然是在Xcode 8中实现着色器逻辑,用Xcode 7 Instruments进行GPU优化,调校完iOS的着色器性能,再移植至Android端,根据相应的芯片作进一步针对性的优化。当然,对于SenseTime这类有专业GPU开发团队的公司应该是没什么大影响的,因为它有资源实现Metal、Vulkan两套代码以便得到每个平台的最佳性能。当然,我是不会告诉你百度地图的引擎部分也是先在iOS上调试好再往Android上搬运的,这些故事是不能随便告诉别人的。

Xcode 8的GPU相关新增功能

问题来了,既然Xcode 8的Instruments被阉割了,为何我们还要使用Xcode 8呢?原因是,Xcode 8新增了几个实用的GPU调试功能,当然,新功能更多是方便Metal的。

1、查看已上传至GPU的纹理大小


Xcode 8 GPU调试新增功能

此功能可用于OpenGL ES,可方便查看上传到GPU的纹理尺寸及格式和缓冲区大小,比如1920x1080、Luminance8。

2、屏蔽GPU部分功能

严格意义上说,这并非新功能,而是从Instruments OpenGL ES Analysis搬运到Xcode。


Xcode 8新增的GPU调优功能

使用Xcode 8创建新项目,把老项目的代码逐一拷贝进来,发现部分功能可在OpenGL ES程序中使用,可禁用部分GPU功能查看性能表现,如下图所示。


禁用GPU部分功能

比如,选择最小化渲染的像素数量查看Fragment Shader对性能的影响,如下图所示。


最小化渲染的像素数量查看GPU性能影响