Instruments 中 Core Animation优化(二)

真机在debug模式下。【Debug】->【View Debugging】-> 【Rendering】选项下面可以看到

选项说明
Color Blended Layers:图层混合图层混合层会显示为红色,调优的方向是减少红色显示区域
Color Hits Green and Misses Red :光栅化光栅化如果命中缓存则显示为绿色,否则显示为红色,绿色越多越好,红色越少越好 光栅化是将一个layer预先渲染成位图(bitmap),然后加入缓存中
Color Copied Images: 图片格式转化如果存在需要转换格式的图片,则会将图片标记为蓝色,调优的方向是减少蓝色显示区域 应用中若出现GPU不支持的图片格式,则需要CPU预先进行格式转化才能正常显示。
Color Immediately: 取消颜色刷新延时表示Instruments在做color-flush操作时取消10毫秒的延时
Color Color Misaligned Images:图片压缩和对齐如果图片需要缩放则标记为黄色,如果没有像素对齐则标记为紫色,调优的方向是减少黄色和紫色显示区域
Color Offscreen-Rendered Yellow:图片离屏渲染如果图片出现离屏渲染则标记为黄色,调优的方向是减少黄色显示区域 我们需要尽可能避免离屏渲染
Color Compositing Fast-Path Blue :标记由硬件绘制的路径用于标记图片由硬件绘制的路径,用蓝色表示,蓝色越多越好
Flash Updated Regions:标记发生重绘的区域重绘的区域会被标记为黄色,应该把需要重绘的区域尽可能缩小,调优的方向是减少黄色显示区域

一、Color Blended Layers (图层混合)

这个选项是检测哪里发生了图层混合。

先介绍一下什么是图层混合?很多情况下,界面都是会出现多个UI控件叠加的情况,如果有透明或者半透明的控件,那么GPU会去计算这些这些layer最终的显示的颜色,也就是我们肉眼所看到的效果。

例如一个上层Veiw颜色是绿色RGB(0,255,0),下层又放了一个View颜色是红色RGB(0,0,255),透明度是50%,那么最终显示到我们眼前的颜色是蓝色RGB(0,127.5,127.5)。这个计算过程会消耗一定的GPU资源损耗性能。如果我们把上层的绿色View改为不透明, 那么GPU就不用耗费资源计算,直接显示荧光绿色。

混合颜色计算公式:
R©=alpha*R(B)+(1-alpha)*R(A) R(x)、G(x)、B(x)分别指颜色x的RGB分量

Color Blended Layers (图层混合) 模式下,如果界面出现混合图层,那么该控件会显示成红色。如下图:
gif1

如何消除这些混合图层呢?
设置一个不透明的背景颜色就可以了。设置view的backgroundColor,并且alpha=0或者alpha=1。就可以避免混合图层

只有当View的存在alpha不为1或者不为0时,就会出现混合图层。

UILabel为什么要设置masksToBounds = YES
首先masksToBounds裁剪view上超出view的部分。而UILabel如果显示的内容是中文,label实际渲染区域要大于label的size,最外层多了一个sublayer。masksToBounds就能让UILabel的size和设置的rect中的size保存一致。显示的是英文不需要设置。

注意点:单独设置masksToBounds = YES不会引起离屏渲染
UIImageView:它的内容图片image 也必须是不透明的。不然也会出现图层混合

二、 Color Offscreen-Rendered Yellow(离屏渲染)

当前屏幕渲染On-Screen Rendering: 指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。
离屏渲染Off-Screen Rendering : 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。 离屏渲染会先在屏幕外创建新缓冲区,离屏渲染结束后,再从离屏切到当前屏幕, 把离屏的渲染结果显示到当前屏幕上,这个上下文切换的过程是非常消耗性能的,实际开发中尽可能避免离屏渲染。

触发离屏渲染Offscreen rendering的行为:

  1. layer.masksToBounds && layer.cornerRadius
  2. shadow
  3. shouldRasterize
  4. mask
  5. drawRect:

注意:
layer.masksToBounds && layer.cornerRadius同时设置才会触发

shadowOpacity 必须设置,并且不为零,才能触发离屏渲染

    iv.layer.shadowColor = [UIColor cyanColor].CGColor;
    iv.layer.shadowOffset = CGSizeMake(10,10);
    iv.layer.shadowOpacity = 0.5;

3、Color Misaligned Images(图片大小)

这个选项检查了图片是否被缩放,像素是否对齐。被放缩的图片会被标记为黄色,像素不对齐则会标注为紫色。

图片尺寸尽量和view的尺寸一样,这样不会有额外的计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值