【Android系统视窗模块】Android Overlay屏幕系统实现原理

      Overlay屏幕不对应实际的物理屏幕设备,即不存在与之对应的framebuffer设备;其实现思路是在实际屏幕设备的layerstack上创建一个layer,作为虚拟屏幕的显示载体。这个layer申请的显存来源是来自实际屏幕的hwc,而这个layer上的图层是由egl合成的。


      标准的显示流程是这样,应用的窗体创建后向surfaceflinger申请到一个layer即surface, 应用的视图使用egl在内存绘制图形,然后在vsync时机将内存图形swap到layer对应的显存中去。每个layer对应的显存都是从窗体所在屏幕hwc分配的。最后surfaceflinger一次性将所有layer合成到屏幕的前缓存中,等待屏幕总线从缓存取走显示,一般是16ms一个周期。


      而针对在虚拟屏幕上创建的窗体,不同的地方在申请layer所对应的显存分配方式;虚拟屏幕上窗体layer显存的分配是复用的虚拟屏幕所在的实际屏幕hwc,并且所有窗体对应的layer是通过egl合成为一个layer, 输出到实际屏幕的framebuffer区域做合成的。
当然,对上层应用来说这些都是透明的。


built-in display:
window1 --disp_0--layer1 
                                        | - FramebufferSurface - hwc1 
window2 --disp_0-- layer2

 

virtual display:
window1 --disp_0_1-- layer1
                                            | --VirtualDisplaySurface -->FramebufferSurface - hwc1
window2 --disp_0_1--layer2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值