使用Xcode8的Instruments检测图形性能
2016-11-05 本文已影响2291人
skylor
关于图形性能方面,我们平时最关注的应该就是「帧率」这个概念了。在 Instruments 中,我们可以使用 Core Animation
- Time Profiler
来评估图形性能。使用步骤如下:
1、同「CPU 占用性能测试」一样,先在 Xcode 中对当前的项目执行 Profile (Command-I),并在打开的对话框中选择 Core Animaiton
这个模板:
image
2、进入 Instruments 后,选择正确的设备和应用程序。
3、点击红色按钮运行应用程序,随着我们操作 App 界面,就可以看到帧率的变化和数据了:
image
在滑动屏幕时,帧率越高表示性能越好,帧率过低则意味着屏幕可能会出现卡顿。
4、在右下角面板的 Display Settings 区域,我们可以看到多个 Debug Options:
Color Blended Layers
,这个选项选项基于渲染程度对屏幕中的混合区域进行绿到红的高亮显示,越红表示性能越差,会对帧率等指标造成较大的影响。红色通常是由于多个半透明图层叠加引起。
Color Hits Green and Misses Red
,当 UIView.layer.shouldRasterize = YES
时,耗时的图片绘制会被缓存,并当做一个简单的扁平图片来呈现。这时候,如果页面的其他区块(比如 UITableViewCell 的复用)使用缓存直接命中,就显示绿色,反之,如果不命中,这时就显示红色。红色越多,性能越差。因为栅格化生成缓存的过程是有开销的,如果缓存能被大量命中和有效使用,则总体上会降低开销,反之则意味着要频繁生成新的缓存,这会让性能问题雪上加霜。
Color Copied Images
,对于 GPU 不支持的色彩格式的图片只能由 CPU 来处理,把这样的图片标为蓝色。蓝色越多,性能越差。因为,我们不希望在滚动视图的时候,由 CPU 来处理图片,这样可能会对主线程造成阻塞。
Color Immediately
,通常 Core Animation Instruments 以每毫秒 10 次的频率更新图层调试颜色。对某些效果来说,这显然太慢了。这个选项就可以用来设置每帧都更新(可能会影响到渲染性能,而且会导致帧率测量不准,所以不要一直都设置它)。
Color Misaligned Images
,这个选项检查了图片是否被缩放,以及像素是否对齐。被放缩的图片会被标记为黄色,像素不对齐则会标注为紫色。黄色、紫色越多,性能越差。
Color Offscreen-Rendered Yellow
,这个选项会把那些离屏渲染的图层显示为黄色。黄色越多,性能越差。这些显示为黄色的图层很可能需要用 shadowPath 或者 shouldRasterize 来优化。
Color OpenGL Fast Path Blue
,这个选项会把任何直接使用 OpenGL 绘制的图层显示为蓝色。蓝色越多,性能越好。如果仅仅使用 UIKit 或者 Core Animation 的 API,那么不会有任何效果。如果使用 GLKView 或者 CAEAGLLayer,那如果不显示蓝色块的话就意味着你正在强制 CPU 渲染额外的纹理,而不是绘制到屏幕。
Flash Updated Regions
,这个选项会把重绘的内容显示为黄色。不该出现的黄色越多,性能越差。通常我们希望只是更新的部分被标记完黄色。
我们可以使用这些选项,来监测更加具体的图形性能。
5、我们还可以选择使用 OpenGL ES Analysis
、GPU Driver
等模板来监测图形相关性能。