当前位置: 移动技术网 > 移动技术>移动开发>IOS > IOS 性能优化中离屏渲染

IOS 性能优化中离屏渲染

2019年07月24日  | 移动技术网移动技术  | 我要评论

gpu屏幕渲染有以下两种方式:

on-screen rendering

意为当前屏幕渲染,指的是gpu的渲染操作是在当前用于显示的屏幕缓冲区中进行。

off-screen rendering

意为离屏渲染,指的是gpu在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

特殊的离屏渲染:

如果将不在gpu的当前屏幕缓冲区中进行的渲染都称为离屏渲染,那么就还有另一种特殊的“离屏渲染”方式: cpu渲染。
如果我们重写了drawrect方法,并且使用任何core graphics的技术进行了绘制操作,就涉及到了cpu渲染。整个渲染过程由cpu在app内 同步地

完成,渲染得到的bitmap最后再交由gpu用于显示。(cpu渲染—>gpu显示) 

什么时候会唤起离屏渲染: 

         当使用圆角,阴影,遮罩的时候,图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,所以就需要屏幕外渲染被唤起。

 为什么离屏渲染会造成性能消耗:

屏幕外渲染并不意味着软件绘制,但是它意味着图层必须在被显示之前在一个屏幕外上下文中被渲染(不论cpu还是gpu)。
所以当使用离屏渲染的时候会很容易造成性能消耗,因为在opengl里离屏渲染会单独在内存中创建一个屏幕外缓冲区并进行渲染,而屏幕外缓冲区跟当前屏幕缓冲区上下文切换是很耗性能的。 

使用instruments来监测离屏渲染

instruments的core animation工具中有几个和离屏渲染相关的检查选项:
color offscreen-rendered yellow

开启后会把那些需要离屏渲染的图层高亮成黄色,这就意味着黄色图层可能存在性能问题。

color hits green and misses red

如果shouldrasterize被设置成yes,对应的渲染结果会被缓存,如果图层是绿色,就表示这些缓存被复用;如果是红色就表示缓存会被重复创建,这就表示该处存在性能问题了。

ios版本上的优化

ios 9.0 之前uiimageview跟uibutton设置圆角都会触发离屏渲染。

ios 9.0 之后uibutton设置圆角会触发离屏渲染,而uiimageview里png图片设置圆角不会触发离屏渲染了,如果设置其他阴影效果之类的还是会触发离屏渲染的。

这可能是苹果也意识到离屏渲染会产生性能问题,所以能不产生离屏渲染的地方苹果也就不用离屏渲染了。

通过此文,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网