美文网首页
Android 三重缓冲

Android 三重缓冲

作者: tiger桂 | 来源:发表于2017-04-27 17:36 被阅读0次

1、系统每隔1/60秒发出VSYNC信号;

2、当绘制系统收到VSYNC信号后,CPU和GPU依次开始对下一帧的数据进行计算;

3、当GPU计算完成,系统在接收到下一个VSYNC信号时,将绘制结果上屏。

当每一帧的处理时间都小于1/60秒时,整个系统都可以保证流畅的绘制。

在上图中,A、B分别代表两个不同的缓冲区,这种系统也就是我们常说的「双缓冲系统」。

在双缓冲系统中的同一个时刻,两个缓冲区会分别处于「显示(Display)」和「待上屏(CPU+GPU+空闲)」两个状态。当处于「待上屏」的缓冲区已经绘制完成,并处于空闲状态,在下一个VSYNC信号到达时会进行缓冲区切换。

双缓冲系统可以有效的避免当绘制速度与屏幕刷新速度不匹配时,新旧画面的一部分同时显示在屏幕上的问题。

然而在双缓冲系统中,如果连续两帧出现处理超时,就会出现下图中的现象:

当第一个VSYNC信号到来时,由于GPU对B缓冲区的操作还没有结束,错过了上屏时机。根据双重缓冲区的特性,虽然CPU已经处于空闲状态,但由于B缓冲区的数据还没有准备好,而A缓冲区的数据正处于显示的过程中,此时已经没有缓冲区可供CPU进行下一帧的计算,这就导致了在前两个VSYNC信号之间,CPU都处于空闲的状态,而GPU也有大部分时间处于空闲。

双缓冲系统在这种情况下,4个VSYNC周期内丢失了两帧。

如果在这种情况下,系统再额外提供一个缓冲区,就可以让CPU在第二个VSYNC信号到来的同时进入工作状态:

在三重缓冲系统中,第一个VSYNC信号到来时,系统发现A、B缓冲区正在使用中,但是CPU此时处于空闲状态。此时,系统会再次分配一个缓冲区C,让CPU立即开始下一帧的计算。

对比双缓冲系统,三重缓冲在这种场景下可以保证让每一个VSYNC信号都触发下一帧的计算,这样即便有两帧的处理时间超过了1/60秒,但仍能避免第二帧的计算超时导致的丢帧,绘制效率提升了25%。

相关文章

  • Android 三重缓冲

    1、系统每隔1/60秒发出VSYNC信号; 2、当绘制系统收到VSYNC信号后,CPU和GPU依次开始对下一帧的数...

  • instrument实战:iOS的三重缓冲和微型口吃(micro

    1. 测试代码 Instrument 中的 Display 模块: iOS 中采用双重缓冲和三重缓冲一起使用,从 ...

  • APP运行日志分析

    Android 日志系统为日志消息保留了多个循环缓冲区,不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲...

  • Android屏幕刷新机制

    3缓冲策略:在android4.1后提供了3缓冲策略。CPU GPU 和display各使用一个buffer。三缓...

  • 优化 - 暂时

    自定义 view 的双缓存技术: android双缓冲绘图技术分析 分析工具: 知识体系引导 Android系统对...

  • read: unexpected EOF!

    read: unexpected EOF!android logcat,读取日志出现如题目异常,这个是因为日志缓冲...

  • 原生mediaplayer的一些坑,加载缓冲过程黑屏,有声音没画

    Android中如何实现边下边播? 1,需流媒体服务器才能支持快进到任意位置断点开始缓冲播放,不然只能在缓冲好的进...

  • Android 双缓冲 使用 示例

    本文参考文献:《疯狂Android讲义(第2版)》 自定义视图: 自定义 menu 资源文件: 主布局文件的内容:...

  • OpenGL ES for Android(帧缓冲)

    简介 我们学过的颜色缓冲,深度缓冲已经模板缓冲结合起来就叫帧缓冲。默认系统会定义一个帧缓冲(在移动端就是EGL创建...

  • Android View双缓冲机制

    java的绘图时,都接触过图像的双缓存技术,解决绘制频繁导致闪屏的问题。今天,记录一下安卓客户端自定义View的缓...

网友评论

      本文标题:Android 三重缓冲

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