iOS探究:UI视图之卡慢、掉帧及绘制原理
来源:熊猫超人biubiubiu     阅读:726
立米互动
发布于 2018-12-06 22:50
查看主页

在开始了解卡慢、掉帧及绘制原理前,首先让我们先理解下图像的显示原理

图像显示原理

WX20181206-150708@2x.png

那么接下来让我们看一下CPU和GPU分别做了哪些事情

WX20181206-153514@2x.png

那么CPU和GPU具体做了哪些工作承担呢

CPU

具体分为四个阶段

GPU渲染管线

UI卡慢、掉帧的起因

WX20181206-160621@2x.png

在显示器中是固定的频率,比方iOS中是每秒60帧(60FPS),即每帧16.7ms

从上图中可以看出,每两个VSync信号之间有时间间隔(16.7ms),在这个时间内,CPU主线程计算布局,解码图片,创立视图,绘制文本,计算完成后将内容交给GPU,GPU变换,合成,渲染(详细可学习 OpenGL相关课程),放入帧缓冲区

如果16.7ms内,CPU和GPU没有来得及生产出一帧缓冲,那么这一帧会被丢弃,显示器就会保持不变,继续显示上一帧内容,这就将导致导致画面卡慢

所以无论CPU,GPU,哪个消耗时间过长,都会导致在16.7ms内无法生成一帧缓存

卡慢、掉帧优化方案切入点

UIView的绘制原理

流程图
QQ20181206-211905@2x.png

上面就是UIView的绘制原理,接下来我们看一下系统绘制流程是怎么的

老规矩,先上流程图
QQ20181206-213639@2x.png

那么问题来了,我们如何进行异步绘制呢

实际上我们就需要借用系统给开的这个口子,即[layer.delegate displayLayer:]

国际惯例,流程图走一波(原谅我画图能力实在有限TT)

QQ20181206-220620@2x.png

离屏渲染 (便于了解视图卡慢、掉帧中对GPU的开销)

离屏渲染指的是GPU在当前屏幕缓冲区以外开拓了一个缓冲区进行渲染操作

当前屏幕渲染不需要额外创立新的缓存,也不需要开启新的上下文,相对于离屏渲染性能更好。但是受当前屏幕渲染的局限因素限制(只有自身上下文、屏幕缓存有限等),当前屏幕渲染有些情况下的渲染处理不了的,就使用到离屏渲染

离屏渲染对性能的的代价是很高的,主要表现在:

导致产生离屏渲染的起因:

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
http2.0——速度与激情
Python详情,满满的全是干货,要看就请认真看完
没有对象怎样面向对象编程呢?真让人头秃!
补单系统搭建补单源码搭建
程序员如何利用周末提高自己?
首页
搜索
订单
购物车
我的