真机在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 (图层混合)
模式下,如果界面出现混合图层,那么该控件会显示成红色。如下图:
如何消除这些混合图层呢?
设置一个不透明的背景颜色就可以了。设置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的行为:
- layer.masksToBounds && layer.cornerRadius
- shadow
- shouldRasterize
- mask
- 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的尺寸一样,这样不会有额外的计算。