问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

苹果的渲染流程以及屏幕卡顿的原因和解决办法

发布网友 发布时间:2022-09-05 02:20

我来回答

1个回答

热心网友 时间:2024-07-09 02:25

主要苹果在底层是如何渲染画面到屏幕上的过程,以此来进一步分析屏幕卡顿的原理,最后进行屏幕卡顿的解决。

说明:
大体上分为三部分处理,第一部分是CPU的计算,第二部分是GPU的渲染,第三部分是屏幕显示

CPU的计算苹果底层主要是通过核心动画来实现,包含两部分,第一是对CALayer的计算,第二是调用OpenGL ES/Metal库进行调用GPU

CoreGraphics

UIKit:

CoreAnimation:
在苹果官方的描述中,Render、Compose,and animate visual elements,因此不能被名字欺骗了,其实CoreAnimationg中的动画只是一部分,它其实是一个复合引擎,主要的职责包括 渲染、构建和动画实现。

我们平常用的CALayer来自于CoreAnimation框架,CALayer是屏幕上用户可见内容的基础,主要是由于可视化内容到最后都会被分解成独立的图层(layer),被存储在图层树中。

核心动画所处的位置

说明:

CoreImage

OpenGL ES/Metal
渲染API,详情可以查看博客 音视频开发:OpenGL + OpenGL ES + Metal 系列文章汇总

2018年之后苹果底层已经从OpenGL ES切换到Metal渲染了。

说明:

扩展:
UIView和CALayer的区别:
UIView

CALayer:

二者关系:

GPU的渲染流程不再追溯,当前使用Metal来进行渲染,因此Metal的渲染流程可以看 十三、Metal - 初探 。这里进行简单说明

说明:

屏幕显示的操作是从帧缓存区中拿到帧数据,并且显示到显示屏上

说明:

说明:

通过引入双缓存机制来解决读取效率低的问题

如果只有一个帧缓冲区,帧缓冲区的读取和刷新都有较大的效率问题。因此必须等上一帧读取完之后才能才能将下一帧写入到缓存区中。效率较低。

因此苹果引入双缓冲机制,也就是两个帧缓冲区,GPU会预先渲染好一帧放入到帧缓冲区,视频控制区进行读取,在读取的过程中,就可以将新渲染好的一帧放到另一个帧缓冲区,这样就可以一直不停的进行刷新帧缓冲区,而当视频控制器读取完成,GPU会主动的把指针指向第二个缓冲区,这样读取和刷新帧缓冲区的效率都提高了

通过垂直同步机制来较大程度解决画面撕裂问题

上面的双缓冲机制有一个很大的问题,就是GPU会一直不停的将渲染好的一帧数据放到帧缓冲区中,并且在提交完成后,会主动的把指针指向第二个缓冲区,这样如果此时视频控制器还未读取完成,比如读取到一半,下一半就变成了下一帧的数据,就会造成画面撕裂现象

解决:
VSync信号到来后,才开始CPU->GPU->缓冲区,而此时视频控制器会把上一次的帧数据读取到,可以说是读取和更新是同时的,但是读取和更新都依赖于VSync

帧缓冲区的更新和读取时同时进行,而且都收到VSync信号的控制,读取上一个帧数据时,更新下一个帧数据

上面我们已经知道了视图数据渲染到屏幕上所需要经历的过程,最后视频控制器是按照双缓存机制+垂直同步信号来获取帧数据的。因此我们按照这个认知来分析卡顿原理

上面所说的双缓冲机制+垂直同步机制,需要VSync到来时,更新帧数据,下一个VSync到来时,会读取这次更新的帧数据,而如果下一个VSync到来时,因为CPU或GPU的原因,帧数据还没有更新到帧缓冲区,就会继续读取上一个帧数据,在一个VSync时间内显示了两次帧数据,就会造成卡顿现象

思路一实现方法:用 CADisplayLinker 来计数
CADisplayLink可以以屏幕刷新的频率调用指定selector,iOS系统中正常的屏幕刷新率为60次/秒,只要在这个方法里面统计每秒这个方法执行的次数,通过次数/时间就可以得出当前屏幕的刷新率了。

思路二实现方法:通过子线程监测主线程的RunLoop,判断两个状态RunLoop的状态区域之间的耗时是否达到一定阈值。
开启子线程,实时计算这两个状态区域之间的耗时是否到达某个阀值,便能揪出这些性能杀手,假定连续6次超时50ms认为卡顿(当然也包含了单次超时300ms)

总的来说有两种,第一是避免使用不必要的操作,第二是必需的操作尽量放到后台执行
避免不必要的操作

必要的操作放到后台执行

GPU的认识:
可进⾏绘图运算⼯作的专⽤微处理器,是连接计算机和显示终端的纽带。
他所做的事情概括起来:1、接收提交的纹理(Textture)和顶点描述。2、应用变换(transform)3、混合并渲染 4、输出到屏幕上

纹理的渲染

视图的混合

图像绘制

苹果的渲染流程以及屏幕卡顿的原因和解决办法

思路一实现方法:用 CADisplayLinker 来计数 CADisplayLink可以以屏幕刷新的频率调用指定selector,iOS系统中正常的屏幕刷新率为60次/秒,只要在这个方法里面统计每秒这个方法执行的次数,通过次数/时间就可以得出当前屏幕的刷新率了。思路二实现方法:通过子线程监测主线程的RunLoop,判断两个状态RunLoop的状态...

ios 图像显示原理及掉帧卡顿、离屏渲染的原因分析与优化

图像撕裂原因:当视频控制器还未读取完成时,GPU将新的一帧内容提交到帧缓冲区并把两个帧缓冲区进行更新后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成画面撕裂的现象。•解决方案:垂直同步机制 •弊端:GPU会等待显示的V-Sync信号发出后,才进行新的一帧渲染和缓存区更新。

屏幕卡顿 及 iOS中OpenGL渲染架构分析

如图所示:当前屏幕显示的是A,在收到垂直信号后,CPU和GPU处理的B还没有准备好,此时,屏幕显示的仍然是A(图有误,第二个为GPU)在iOS中渲染的整体流程如下所示 主要由以下六种框架,表格中已经说明了,就不再详细解释了 首先分别简单说下UIView和CALayer各自的作用 UIView CALayer 【面试题】UI...

苹果电脑pr卡顿怎么解决苹果电脑pr卡顿怎么解决视频

升级电脑硬件:如果 Mac 电脑的硬件性能不足,比如内存不足或硬盘读写速度较慢,可能会导致 PR 运行卡顿。可以考虑增加内存、更换更快的硬盘或使用外置高速存储设备来提升性能。更新 PR 软件:确保你的 PR 软件是最新版本,因为新版本的软件通常会包含性能优化和bug修复。检查视频编解码格式:某些视频编解...

OpenGL 图片从文件渲染到屏幕的过程

在 resetAnimated 方法中进行了初始化操作,包括 _lock 线程锁、 _buffer 缓存容器的初始化、 _requestQueue 线程队列的初始化以及定时器 _link 的初始化等等。1、图片渲染到屏幕的过程:从磁盘读取文件->计算Frame->图片解码->通过数据总线提交给GPU渲染->顶点着色器->光栅化处理->片元着色器着色->...

苹果手机遇到卡顿怎么办

iphone6plus卡顿严重是怎么回事?

iphone6plus卡顿严重可能是存储东西过多,或者是设置出问题。苹果手机卡、反应很慢解决方法:1、删除旧照片 删除不必要的文件是加快您的手机的主要方法之一。 iPhone上已经储存了数百张照片。他们可以备份到电脑或iCloud,然后从机器中删除。2、删除占用大量空间的应用程序 iPhone越大,速度越慢。您可以在...

苹果14pro玩王者卡顿掉帧怎么解决

首先,当玩游戏时,尽量关闭其他不必要的应用程序。这些后台运行的应用会占用大量设备资源,影响游戏流畅度,所以关闭它们有助于减轻设备负担,减少卡顿。其次,调整游戏画质设置也能起到关键作用。高画质对设备的渲染要求极高,如果发现游戏卡顿,可以适当降低画质级别,这样能减轻设备渲染压力,提升游戏的流畅...

计算机渲染原理及图像撕裂掉帧

基本上解决撕裂的问题。但是,解决了撕裂的问题,却又带来了新的问题: 掉帧 。总结起来,屏幕卡顿的原因在以下几点: 1.CPU/GPU渲染流水线耗时过长,屏幕刷新时取不到下一帧的数据,造成掉帧。 2.使用了垂直同步Vsync+双缓存区DoubleBuffering的技术,以掉帧为代价解决屏幕撕裂的问题。

苹果闪退卡顿反应慢怎么解决

苹果手机它会系统默认永久性保存所有已经发出去和接收到的短信,所以如果想要手机不卡顿和有足够大的空间,那么最好选择关闭它!方法:设置→信息→保留信息→选择30天!三、减少界面渲染 打开手机设置→通用→辅助功能→开启增强对比度和降低透明度,可以关闭iOS中通知栏和快捷上拉栏的半透明效果,减轻硬件...

3dmax卡顿解决方法 会声会影渲染出来的视频卡顿 电脑卡顿严重解决方法 win10卡顿解决方法 win7卡顿严重解决方法 ae渲染出来声音会卡顿 ae渲染后视频卡顿 vue数据多渲染卡顿 pr卡顿怎么解决
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
哪些狗好养 眉山到重庆顺丰快递多少 从四川寄信到重庆要多少天啊 四川眉山到重庆万州,哪种快递最便宜 四川眉山市洪雅县寄信到重庆市垫江县大概多少天能到? 关于韵达快递的 优速快递成都眉山到重庆需要多久的时间? 用烤箱烤红薯(用烤箱烤红薯的温度和时间) 海鲜酱油能完全替代生抽在烹饪中使用吗? ...钻戒,但是我的预算不多,想知道晶豆子的莫桑石戒指大家觉得怎么样... ios 图像显示原理及掉帧卡顿、离屏渲染的原因分析与优化 国有资产划转流程 资产划转移交协议书 如果是浪琴水货手表怎么哪区别呢??? ...说换排线连着屏幕一起换,换屏幕那不就贵了,问魅族手机换排线能换吗... excel表格里,如何用函数将不规则区域文本叠加合并到新的单元格_百度知... 被提醒频繁怎么加人? Su 怎么拉弧形格栅 什么时候有彩虹 西安有几家粗粮王,都具体在哪 西安长安区有千家粗粮王吗?有的话具体位置麻烦介绍一下! 西安小杂粮收购市场在哪里啊? 聚氨酯打料机黑料压力过高老停机 痞幼黑料正能量事件出现四个疑点 6岁儿童睡前讲故事 温暖治愈系儿童睡前故事大全10篇 期货:假如我6000元空豆油,后来豆油涨到6500,我爆仓了吗?保证金10%_百 ... 关于期货。我现在只有6000块左右,想抄期货,做什么期货好。要有风险... 被提醒频繁怎么加人? 英语单词缩写大全简写带翻译 为何中国的人均购买力远远超过了人均GDP? 奇迹暖暖之环游世界能用qq号登录吗? 请你们帮我写一篇"电子游戏或上网游戏对中学生的影响和对策"急用_百度... 哪里有星力电玩城客服 听过“星空物语”的朋友们,有谁知道前两段分别是谁唱的?(按顺序)_百度... 魏晨、俞灏明、张翰 - 星空物语 - 朱梓骁.这些歌手的歌好听吗? 星空物语这首歌怎么样?我想听一听大家评论 ! 语文好和听过星空物语的来帮帮忙 一起来看流星雨中的主题曲 星空物语难听吗? 兵团省考不去 输出马力112Ps什么意思 112马力是多大发动机? 最大马力(Ps) 昕锐测评,搭载1.5L动力,最大马力112PS 植物大战僵尸2功夫世界僵王怎么打 第30天通关技巧 植物大战僵尸2,功夫世界的僵王好弱,还是他 小星晶说植物大战僵尸2功夫世界第30天僵尸王怎么对付 植物大战僵尸2的功夫世界的僵王点不了是还不可以打么? ...看快手主播下象棋怎么知道和他对战方是谁怎么去他的直播间,谁知道啊... 刻板印象的例子