iOS 卡顿、掉帧原因+优化

news/2024/11/30 0:29:49/

卡顿、掉帧原因

在这里插入图片描述
VSync垂直信号,一般说页面流畅是60fps,也就是每一秒钟会有60帧画面更新,相当于16.7ms就要产生一帧画面,那么在这16.7ms之内需要由CPU和GPU共同协同完成产生一帧的数据和画面。CPU做文本布局和UI计算、视图的绘制以及图片解码,然后把产生的位图最终提交给GPU,由GPU进行相应的涂层和成纹理渲染,显示到屏幕上。
在16.7ms内,CPU或者GPU没有把相应工作做完就会产生卡顿掉帧现象。

卡顿、掉帧优化

减轻CPU负担
对象创建、调整、销毁
预排班(布局计算、文本计算)
预渲染(文本等异步绘制,图片解码等)

减轻GPU负担
纹理渲染(避免离屏渲染 异步绘制)
视图混合(减轻视图复杂程度)

什么是离屛渲染?

当我们设置某一些UI视图的图层属性,标记为它在未预合成之前,不能用于当前屏幕上面直接显示的时候,就会触发离屏渲染。离屏渲染的概念,起源于GPU层面,指的是在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
在这里插入图片描述

什么场景下会触发离屏渲染

设置视图的圆角属性(必须同时maskToBounds为YES才会触发)
设置视图的图层蒙版
设置阴影
设置光栅化

为何要避免离屏渲染

离屏渲染是发生在GPU层面上的,离屏渲染使GPU层面上面触发了OpenGL的多通道渲染管线,产生了额外的开销,所以我们要避免离屏渲染
离屏渲染会创建新的渲染缓冲区,会有内存上的开销。包括对上下文的切换(因为有多通道的渲染管线,所以会需要把多通道的渲染结果做渲染合成,就涉及到了上下文切换),就会有GPU的额外开销
触发离屏渲染时,会增加GPU的工作量,很可能导致CPU和GPU的总耗时加起来超过了16.7ms,就会导致UI的卡顿和掉帧,所以需要避免离屏渲染


http://www.ppmy.cn/news/789920.html

相关文章

关于掉帧问题

众所周知,Android程序的大多数代码操作都必须执行在主线程,例如系统事件(例如设备屏幕发生旋转),输入事件(例如用户点击滑动等),程序回调服务,UI绘制以及闹钟事件等等。那么我们在上述事件或者方法中插入的代码也将执行…

【Yocto】学习记录(1)理论知识

文章目录 简述背景关键词理解 yocto 官方参考文档: https://docs.yoctoproject.org/index.html bitbake 参考文档: https://docs.yoctoproject.org/bitbake/index.html 简述 Yocto项目比Buildroot复杂得多。它不仅可以像Buildroot一样构建工具链、引导加载程序、内核和根文件…

在PS中,锁定的背景图层不可以直接删除吗?

在 Photoshop 中,如果你想要删除锁定的背景图层,你需要先解锁该图层。如果你想要保留该图层中的图像内容,可以使用“图层”菜单中的“新建图层”命令,将图层中的图像复制到新图层中,然后再删除锁定的背景图层。 注意&a…

photoshop无法删除图层

CTRLD取消选择,就可以进行图层删除了

[PS] 没有图层匹配此滤镜 我的图层消失了

今天学习PS的时候 连续DELETE 突然发现我的图层不见了! 查了下资料,原来是图层过滤的原因。 这个红点所在的矩形块就是图层过滤的开关,当红点状态时,就是开启图层过滤的状态。 只需要点一下这个红点就可以切换状态了。 可以看到…

如何用PS去掉照片中的路人

欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 1 问题描述 在刚过去不久的国庆节里,想必大家都出去好好的玩了一圈吧,出去玩肯定要做的就是拍各种好看的照片啦,但是各旅游景点都有很多的人…

Ps中如何去掉图片中不相关的背景

Ps中如何去掉图片中不相关的背景 步骤一:用Photoshop打开待修改的图片; 步骤二:选择左侧工具栏中的“魔棒工具”,然后选取图中对应背景部分; 步骤三:当选取完背景部分之后,按“delete”按键可…