/frameworks/native/libs/gui/
platform\frameworks\native\libs\gui\BufferQueue.cpp
platform\frameworks\native\libs\gui\BufferQueueCore.cpp
platform\frameworks\native\libs\gui\BufferQueueProducer.cpp
platform\frameworks\native\libs\gui\BufferQueueConsumer.cpp
BufferQueue的dequeueBuffer
上面的函数主要就是利用GraphicBufferAlloc去分配图形缓冲区的过程,中间会用到gralloc模块,以及GraphicBuffer的序列化和反序列化,反序列化unflatten()时还会调用gralloc在BufferQueue所在的进程将在surfaceflinger中申请的内存map注册过来(匿名共享内存)。
到此,BufferQueue中已经申请到了内存,返回给Surface一个int的数组下标,看来这时候Surface还没有获取到任何图形缓冲区相关的东西。
由于申请的内存是在BufferQueue所在的进程,接下来需要调用requestBuffer将buffer映射到Surface所在的进程
图形缓冲区既可以使用内核的匿名共享内存来分配,这样可以让应用程序和SurfaceFinger进程共享操作,应用程序负责往图形缓冲区填充ui数据,SurfaceFinger进程负责一些处理(例如多个图层的合成)再送往帧缓冲区,进而显示在屏幕上。
网友评论