文章都是通过阅读源码分析出来的,还在不断完善与改进中,其中难免有些地方理解得不对,欢迎大家批评指正。
转载请注明:From LXS. http://blog.csdn.net/uiop78uiop78/
GUI系统之SurfaceFlinger章节目录:
blog.csdn.net/uiop78uiop78/article/details/8954508
1.1 BufferQueue详解
上一小节我们已经看到了BufferQueue,它是SurfaceTextureClient实现本地窗口的关键。从逻辑上来推断,BufferQueue应该是驻留在SurfaceFlinger这边的进程中。我们需要进一步解决的疑惑是:
Ø 每个应用程序可以对应几个BufferQueue,它们是一对一、多对一或者是一对多?
Ø 应用程序所需要的绘图空间是由谁分配的?
在音频系统的学习中,我们知道AudioTrack和AudioFlinger是通过共享内存的形式来进行数据传递的,那么显示系统中是否也是类似情况?
Ø 应用程序与SurfaceFlinger如何互斥共享数据区
和在Audio系统中遇到的问题一样,我们面临的是经典的“生产者-消费者”模型。显示系统又是如何协调好这两者间的互斥访问的呢?
1.1.1 BufferQueue的内部原理
先来解析下BufferQueue的内部构造,如下图所示: