4.1 APP跟SurfaceFlinger之间的重要数据结构
一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向surfaceflinger申请;
在surfaceflinger中用client表示每一个应用程序,client中用layer结构来表示应用程序的surfaceControl
layer中含有mProducer生产者和mSurfaceFlingerCinsumer消费者,生产者和消费者有同一个mCore(BufferQueueCore),它有一个BufferSlot [64] mSlots数组,数组的每一项表示一个buffer(数组每一项是个结构体,里面有一项mGraphicBuffer,用其来表示buffer),从数组可以看到每个应用程序最多有64个buffer
以上所涉及的都是SurfaceFlinger中所涉及的数据结构,下面分析APP中涉及的应用结构:
sp<SurfaceComposerClient> client用来表示和SurfaceFlinger的连接,其内部有一些mClient用来指向SurfaceFlinger中对应的client
sp<SurfaceControl> surfaceControl 用来管理应用程序的surface,通过surfaceControl->getSurface()获得surface,surfaceControl 通过client得到
Surface里有一个数组BufferSlot mSlots[64],这个数组和SurfaceFlinger中BufferSlot [64] mSlots一样对应,两者指向的应该是同一块内存区域
具体各个数据结构流程如下:
4.2 APP创建SurfaceFlinger客户端(client)的过程
4.3 APP申请创建Surface的过程
4.4 APP申请(lock)Buffer的过程_框架
获得surface中的buffer过程:
(1)向生产者申请:(后面的步骤是在SurfaceFlinger中进行)查看自己的mslots中有无空余项,若无,向Gralloc HAL申请,实质是通过Ashmem驱动申请,并返回fd给APP(通过binder返回)
(2)应用程序获得fd,mmap获得地址,这些信息会放到mslots中
上面说的步骤是在APP中进行
4.5 APP申请(lock)Buffer的过程_分配buffer
4.6 APP申请(lock)Buffer的过程_获得buffer信息
4.7 APP提交(unlockAndPost)Buffer的过程_框架
4.8 APP提交(unlockAndPost)Buffer的过程_消费者创建过程
4.9 APP提交(unlockAndPost)Buffer的过程_提交过程