美文网首页
cpu和gpu优化

cpu和gpu优化

作者: 小何才鲁尖尖角 | 来源:发表于2020-05-04 07:46 被阅读0次

    cpu做哪些工作呢?

    对象的创建和销毁,对象属性的调整,布局计算,文本的计算和排版,图片的格式转换和转码,图像的绘制(core graphics);

    gpu做哪些工作呢?

    纹理渲染

    渲染过程?

    ios是双缓存机制,有前帧缓存和后帧缓存

    屏幕成像原理?

    屏幕成像和视频一样,都是一帧一帧的。而当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronization),简称VSync。显示器通常以固定频率(硬件时钟)进行刷新,这个刷新率就是VSync信号产生的频率。

    卡顿产出的原因?

    ios以每秒60帧的频率渲染,如果垂直同步信号来了,cpu和gpu的工作还没处理完,缓存区里还是上一次的,所以渲染的还是上一帧的数据,这样就产生了卡顿。而本次的只能等待下一次垂直同步信号。

    卡顿的解决思路?

    就是尽可能的减少cpu和gpu的工作。

    卡顿的优化-cpu

    1,尽可能的使用轻量级的对象或者数据类型。

    比如用int不要用nsnumer,不需要事件处理时用calayer不要用uiview;

    2,不要频繁的调整uiview的属性,如frame等;

    3,尽可能的提前计算好frame,需要时一次性渲染;

    4,autolayout会比设置frame消耗更多资源;

    5,图片的size最好和uiimageview保持一致,不要让cpu再去进行缩放计算;

    6,控制线程的最大并发数量;

    7,尽量的把耗时的操作放到子线程;

    比如 [UIImage imageNamed:1.png]  我们完全可以改成去子线程解码,再回主线程渲染;

    卡顿的优化-gpu

    1,避免在短时间内绘制大量的图片;

    2,gpu能处理的最大的纹理尺寸就是4096*4096,一旦超过就会让cpu处理,所以尽量不要超过这个尺寸;

    3,尽可能的减少视图的层次和数量;

    4,尽量减少透明的视图(alpha小于1),一旦有透明度,就是一个混合运算。不透明的视图就把opaque设置成yes;

    5,尽量避免离屏渲染;

    opengl中gpu有两种渲染方式,有当前屏幕渲染,还有离屏渲染。离屏渲染要创建新的缓冲区,而且要把新的缓冲区的内容渲染到屏幕上,还要切换上下文。

    那些操作会引发离屏渲染呢?

    5.1  光栅化

    5.2  self.view.layer.mask

    5.3  self.view.layer.masksToBounds = YES;  和  self.view.layer.cornerRadius = 1; 同时使用

    5.4  self.view.layer.shadowxxxx

    卡顿检测

    监听runloop的状态切换,把每两次切换的时间记录下来,如果时间太长,就把主线程调用堆栈打印出来。

    KMCGeigerCounter

    LXDAppFluecyMonitor

    参考文献:

    iOS - 渲染原理

    iOS性能检测全家桶 - 全部实测

    相关文章

      网友评论

          本文标题:cpu和gpu优化

          本文链接:https://www.haomeiwen.com/subject/qodpghtx.html