iOS

浅谈 iOS 性能优化

2020-05-11  本文已影响0人  Q以梦为马

iOS 中的 CPU 和 GPU

在屏幕成像过程中,CPU 和 GPU 起着很重要的作用。

iOS 缓冲机制

iOS 使用的是双缓冲机制。即 GPU 会预先渲染好一帧放入一个缓冲区内(前帧缓存),让视频控制器读取,当下一帧渲染好后,GPU 会直接把视频控制器的指针指向第二个缓冲器(后帧缓存)。当你视频控制器已经读完一帧,准备读下一帧的时候,GPU 会等待显示器的 VSync 信号发出后,前帧缓存和后帧缓存会瞬间切换,后帧缓存会变成新的前帧缓存,同时旧的前帧缓存会变成新的后帧缓存。

屏幕成像原理

时钟信号:垂直同步信号V-Sync / 水平同步信号H-Sync。

屏幕成像就是垂直同步信号和水平同步信号一直发送。发出垂直同步信号(VSync)时,即将显示一页的数据。水平同步信号(HSync)发出时,就一行一行的显示。

按照60FPS的刷帧率,每隔16ms就会有一次VSync信号。出现卡顿的原因就是发送VSync信号间隔时间过大。

卡顿的原因

屏幕内容是怎么显示到屏幕上的?

在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换、合成、渲染。随后 GPU 会把渲染结果提交到帧缓冲区去,等待下一次 VSync 信号到来时显示到屏幕上。由于垂直同步的机制,如果在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容不变。这就是界面卡顿的原因。

上面一段内容出自 iOS 保持界面流畅的技巧,你可以在上述文章中对卡顿的原因做更深入的了解。

在开发中,CPU 和 GPU 中任何一个压力过大,都会导致掉帧现象,所以在开发时,需要分别对 CPU 和 GPU 压力进行评估和优化。

卡顿优化 - CPU

卡顿优化 - GPU

离屏渲染

在OpenGL中,GPU有2种渲染方式
离屏渲染消耗性能的原因
哪些操作会触发离屏渲染?

卡顿检测

卡顿主要是因为在主线程执行了比较耗时的操作。我们可以使用 CADisplayLink 来监视 CPU 的卡顿问题,这是一个 FPS 指示器

参考文档:

原文地址:浅谈 iOS 性能优化
更多文章请点击:Articles

上一篇下一篇

猜你喜欢

热点阅读