机型: iPhone8P iOS12.2
OC Swift混编嵌套第三方, App内部直观 查看 CPU 内存 刷新帧率FPS
在Instrument中,Command+L打开Library,然后添加Core Animation。我们来看看GPU的相关的问题
最直观的就是滚动视图,查看FPS(Frame per second),一般小于50帧就会看到明显的掉帧,
45帧一下就属于明显异常
iOS设备通常是60fps(每秒60帧),也就是说两帧相隔的时间是1/60秒,大概16.7ms。在这16.7ms中,为了显示一帧,需要如下工作
CPU计算好各个视图的位置,大小,对图片进行解码等,绘制成纹理交给GPU
GPU对收到的纹理进行混合,顶点变换,渲染到帧缓冲区
每16.7ms,一个时钟信号到达,帧缓冲区取出一帧,显示到屏幕。
也就是说,CPU或者GPU被大量占用的时候,都有可能在16.7ms中没办法完成一帧的绘制,导致时钟信号到来的时候,取得还是上一帧的内容,也就都有可能导致界面卡顿
离屏渲染
在iOS中,渲染通常分为CPU和GPU渲染两种,而GPU渲染又分为在GPU缓冲区和非GPU缓冲区两种
CPU渲染(软件渲染),CPU绘制成bitmap,交给GPU
GPU渲染(硬件渲染)
GPU缓冲区渲染
非GPU缓冲区渲染(额外开辟缓冲区)
通常,CPU渲染,和GPU非帧缓冲区内渲染统称为离屏渲染。因为,CPU和帧缓冲区是为图形图像显示做了高度优化的,速度较快。
用CoreGraphics的CGContext绘制的
在drawRect中绘制的,即使drawRect是空的
Layer具有Mask(比如圆角)或者Shadow
Layer的隔栅化shouldRasterize为True
文本(UILabel,UITextfield,UITextView,CoreText,UITextLayer等)
很少会,比如drawRect这个方法,只会在时图进行重新绘制的时候才会调用。也就是说,假如你的View并不会频繁重绘,那么即使实现了drawRect,也没什么关系。
对了,目前iOS设备的硬件越来越好也是一个原因,想要要性能差也挺难的。
CoreGraphics VS CALayer
CoreGraphics通常是CPU渲染成bitmap交给GPU,假如频繁的大量的绘制出现,往往会导致界面卡顿。而CALayer是对GPU做过优化的,能够硬件加速。所以,对于性能要求较高的绘制,尝试用CALayer替代CoreGraphics












网友评论