SurfaceFlinger的分析理解,基于android4.4.2 aosp源码

整体描述:

每一个应用程序,对应SF中的一个Client对象;

每一个应用程序的Surface,对应SF中对应Client对象中的一个Layer对象;

应用程序在Surface上借助skia或者opengles去绘制图形,绘制的结果通过调用eglSwapBuffer()从而进入对应Layer对象监控的BufferQueue中;这个过程底层涉及的过程为:

从Layer控制的BufferQueue中dequeueBuffer,也就是得到一个用于绘图的缓冲区;在这个buffer上调用opengles绘制完成后,调用eglSwapBuffer实际是queueBuffer过程;这个函数结束前,通知BufferQueue的监听者,有buffer准备好了;而bufferqueue的监听者就是Layer本身,它会调用自身的Layer::onFrameAvailable函数,从而通知SF有数据到来;然后SF在下一个Vsync信号到来时,开始执行一系列的合成工作并最终显示到displaydevice上;

这块有需要区分的:

BufferQueue:每个应用的每一个Surface都对应一个BufferQueue;SF中的每一个DisplayDevice也有一个BufferQueue;

Surface的BQ是用来为应用程序画图的;

DisplayDevice的BQ是当SF在合成layers时,在调用hwcomposer的prepare后,获取的那些layers需要使用opengl去合成的,这部分layers就是SF通过opengl去合成,合成最后会同样执行elgSwapBuffer,也就是入BQ的队列中,同样有监听者FramebufferSurface::onFrameAvailable;合成的最终结果再和能够被hwc合成的layer一起通过hwc来合成;

这块强调的意思是,我们的BQ,是有两级的概念;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值