iOS 渲染流程和屏幕卡顿原因
2021-08-30 本文已影响0人
木扬音
屏幕卡顿
屏幕卡顿是指图形显示到屏幕上时,出现了图像撕裂、掉帧等问题
卡顿原因
- 图形、图像显示到屏幕上,需要经过CPU计算和GPU渲染,但是在这过程中是需要一定的耗时,如果耗时过长,就会导致
帧缓冲区
的数据没有更新,显示的还是上一帧的数据 -
垂直同步+双缓冲区
:通过Vsync
强制同步,虽然可以解决屏幕撕裂
,但同时也会导致掉帧
,虽然采用了双缓冲区,但是并不能从根本上解决CPU、GPU处理图形、图像的速度,从而导致掉帧
屏幕显示的过程
- CPU计算需要显示的图像,提交给GPU
- GPU进行渲染后将结果存放到
帧缓冲区
- 视频控制器再去读取
帧缓冲区
里的内容
image.png
垂直同步和双缓冲区
- 垂直同步:是指给帧缓冲加锁,当电子光束扫描的过程中,只有扫描完成了才会读取下一帧的数据,而不是只读取一部分
- 双缓冲区:采用两个帧缓冲区用于GPU处理结果的存储,当屏幕显示其中一个缓存区内容时,另一个缓冲区继续等待下一个缓冲结果,两个缓冲区依次进行交替
掉帧
当前屏幕显示的是A,在收到垂直信号后,CPU和GPU处理的B还没有准备好,此时,屏幕显示的仍然是A
image.png
iOS渲染流程
- App通过调用
CoreGraphics
、CoreAnimation
、CoreImage
等框架接口触发图像渲染操作 - 框架将渲染交由
OpenGL ES
来驱动GPU做渲染,最后显示到屏幕上