前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >显示撕裂、掉帧的原因以及苹果的处理方案显示撕裂、掉帧的原因以及苹果的处理方案

显示撕裂、掉帧的原因以及苹果的处理方案显示撕裂、掉帧的原因以及苹果的处理方案

作者头像
用户8893176
发布2021-08-09 13:43:04
1.5K0
发布2021-08-09 13:43:04
举报
文章被收录于专栏:小黑娃Henry

显示撕裂、掉帧的原因以及苹果的处理方案

本文阅读时间大约5分钟

前言

依旧还是老规矩,提出几个问题,希望看完本文后可以完美的回答:

  1. 屏幕撕裂罪魁祸首是谁?如何解决?
  2. 掉帧问题出现的原因,如何解决?

本文钟会出现很多专用的名词,不清楚可以去我另一篇文章中查看。

OpenGL (二)--OpenGL中那些晦涩难懂的名词、动词解析

屏幕扫描->显示

这是显示器的电子信号扫描图,会从左上到右下一个像素点一个像素点的扫描,于此同时也会从帧缓存区中一个像素一个像素的读取,最终完成显示。

屏幕撕裂

这个问题大家应该都遇到过,尤其喜欢玩游戏的同学更加常见,先上一张我的女神,无视上面的字是在找不到其他的了....

先说一些自己最直观的认知:这是两张图片拼接成的。可是在一个时刻为什么会出现两张图片呢?这就要从这张图片是如何渲染到屏幕上说起了。

计算机显示流程
  • 理想状态:

显示器显示完一张位图后,cpu、gpu刚好把下一张位图处理好存放到帧缓存区中,这样显示器就可以展示新的内容。

  • 现实状态

cpu、gpu的处理是根据位图的复杂程度决定的,导致这个处理时间或长或短。所以控制器读取的内容就会提前或者延后,而帧缓存区内容就会异常导致屏幕出现撕裂。对照屏幕扫描这个概念一起理解。

现在可以回答问题一:屏幕显示周期与cpu、gpu的处理周期不同步,加之显示的扫描原理,导致出现撕裂。

如何解决

为了解决撕裂,苹果大大引入了:垂直同步Vsync + 双缓存区 DoubleBuffering来彻底解决撕裂问题,如何理解呢?

  • 垂直同步,既然之前会出现两者周期不同步的问题,那么对帧缓存区加入一个同步信号,保证:
  • 当前位图已经完全扫描、显示完成,在帧缓存区中才会放入新的位图;
  • 如果下一帧位图还没有渲染完成,那么原位图不会被销毁,继续进行下次扫描。
  • 双缓存区,为GPU在增加一个缓存区域,当然显示控制器也会交叉读取两个帧缓存区内的内容。这是一种拿空间换时间的策略,当然这样做的好处:
  • 不浪费cpu、gpu的资源,为提前渲染好的位图有一个区域保存,cpu、gpu就可以进行下一帧的处理。
  • 减少掉帧的出现。

现在就可以彻底回答问题一了。

掉帧

可以说掉帧是为了解决撕裂问题而带来的副作用,但是在我看来掉帧还可以“眨眼补帧”,但是撕裂的体验就会非常差了。

Snip20200707_15.png

对图做一个简单解释:

  1. 每一个竖线分段代表16.67ms,因为大多数设备的刷新频率是60HZ,所以需要16.67ms之内就要处理好下一帧的位图数据。马上推出的120HZ-iPhone要真香了。
  2. 前两步出现了两次A,那第二次出现A就是掉帧,因为B没有处理好。后面2次B也是同理。

对于问题二,就很好解释了:cpu、gpu来不及处理下一帧数据,导致下个显示周期只能重复显示当前帧的位图。当然它也是为了解决屏幕撕裂带来的副作用。

如何优化

因为处理任务的不确定性,计算机永远都无法保证在一个周期内能完成所有任务,所以掉帧问题就目前技术是无法根本解决的,只能是优化。

目前苹果大大使用三缓存区的方案来进一步减少掉帧的出现,因为缓存区越多cpu、gpu的利用率就越高,出现卡顿的频率也会越少。

后序

相信在科学技术、硬件技术的发展下,这个问题可以得到完美的解决。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/7/7 下午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 显示撕裂、掉帧的原因以及苹果的处理方案
    • 前言
      • 屏幕扫描->显示
      • 屏幕撕裂
      • 掉帧
    • 后序
    相关产品与服务
    图数据库 KonisGraph
    图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档