iOS APP性能检测

性能检测 CPU 内存 屏幕刷帧率FPS

2019-06-12  本文已影响0人  leesen

机型: 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

上一篇 下一篇

猜你喜欢

热点阅读