11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统

5. Vsync机制
5.1 黄油计划_三个方法改进显示系统
vsync, triple buffering, vsync虚拟化

参考文档:
林学森 <深入理解Android内核设计思想>第2版 9.6节

Getting To Know Android 4.1, Part 3: Project Butter - How It Works And What It Added
http://www.androidpolice.com/2012/07/12/getting-to-know-android-4-1-part-3-project-butter-how-it-works-and-what-it-added/

Android 4.4(KitKat)中VSync信号的虚拟化
http://blog.csdn.net/jinzhuojun/article/details/17293325

Vsync:

图中的16ms表示显示一副图片的时间,display表示第几帧,图中display显示第0帧的时候,GPU或者CPU准备第1帧显示的图片,在第0帧尾部,CPU或者GPU本应该开始准备第2帧显示的图片,结果他们偷懒了,没有被强制在Vsync处开始工作,因此Display只能连续两帧显示一副图片 ,称这种现象为Jank

假如cpu或者gpu掉链子了怎么办,如下图,如果GPU忙不过来了,没有能及时完成,又会导致Jank,引入了 triple buffering

 上述优化是在Vsync时刻才开始工作,而APP准备好数据是发送给surface,surface使用CPU和GPU进行渲染生成图片,然后发给display,如果都同时工作,那么一副图片显示需要经过两个Vsync时刻32ms,先是APP生成,接着surface处理,然后才能显示,问题的根源是都在Vsync时刻开始工作,错过了就要等到下个Vsync,解决办法是让surface在APP就绪好后就开始工作,因此把App开始工作的时候是Vsync+offset1,surface工作的时刻在Vsync+offset1+offset2


5.2 Vsync框架

5.3 初始化代码分析

5.4 surfaceflinger使用vsync过程代码分析

5.5 surfaceflinger对vsync的处理
buffer状态图画得不错:
http://ju.outofmemory.cn/entry/146313

5.6 基础知识_Region及操作
Android Region代码分析
http://blog.csdn.net/fuyajun01/article/details/25551717


5.7 rebuildLayerStacks源码分析
按z轴值从大到小计算各个layer的可视区域、被遮盖区域, 并把脏区域、不透明区域汇总记入display中

5.8 DisplayDevice创建流程分析

5.9 使用opengl进行界面合成流程速览

5.10 hdmi

猜你喜欢

转载自www.cnblogs.com/liusiluandzhangkun/p/9196187.html