avatar

Catalog
iOS性能优化02-产生卡顿的原因
  • 卡顿产生的主要原因CPU和GPU所花费的时间太长从而造成俗称的丢帧(掉帧)

我们以下图为例,红色代表CPU,绿色代表GPU

  1. 首先把CPU把计算好的数据交给GPU去渲染,紧接着来一个VSync(垂直同步信号)就会把刚CPU计算好并且GPU渲染好的数据展示到屏幕上完成这一帧的显示,注意一旦发生一个VSync就会把GPU渲染到帧缓存里的数据显示到屏幕上,并且开始下一帧的操作,

  2. 我们第二帧的操作GPU花费的时间比较短还留出一段空闲时间等VSync的到来然后显示到屏幕上,但也有一种情况就是:

  3. 我们第三帧的操作,CPU计算完数据交给GPU去渲染,然而由于这次的数据比较多当VSync到来时,发现GPU还没有渲染完,上面我们也说了VSync一旦到来就会把GPU渲染到帧缓存里的数据显示到屏幕上,但是GPU并没有渲染完,所以只能显示上一帧的数据,也就意味着当前这帧数据丢失了,俗称丢帧或掉帧,而当前帧只能等下次VSync到来时再显示,因此就会造成卡顿(本来要显示当前帧结果只能显示前一帧)

卡顿解决的主要思路:

  • 尽可能减少CPU、GPU资源消耗
  • 一般我们要保证每秒60帧这样看起来就不会有什么问题了,那按照60FPS的刷帧率,每个16ms就会有一次VSync信号(为什么是16ms?因为1s=1000ms,1000ms/60~16ms)也就是说我们16ms内完成CPU和GPU操作就不会有什么卡顿问题了

喜欢的朋友可以扫描关注我的公众号(多谢支持)

Author: 木子召
Link: https://lizhaobomb.github.io/2020/02/27/iOS%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%9602-%E5%8D%A1%E9%A1%BF%E4%BA%A7%E7%94%9F%E7%9A%84%E5%8E%9F%E5%9B%A0/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment