11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析

 

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 client用来表示和SurfaceFlinger的连接,其内部有一些mClient用来指向SurfaceFlinger中对应的client

sp surfaceControl 用来管理应用程序的surface,通过surfaceControl->getSurface()获得surface,surfaceControl 通过client得到

Surface里有一个数组BufferSlot mSlots[64],这个数组和SurfaceFlinger中BufferSlot [64]  mSlots一样对应,两者指向的应该是同一块内存区域

 

11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析_第1张图片

 

具体各个数据结构流程如下:

11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析_第2张图片

 


4.2 APP创建SurfaceFlinger客户端(client)的过程

11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析_第3张图片

 


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

11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析_第4张图片

 


4.6 APP申请(lock)Buffer的过程_获得buffer信息

4.7 APP提交(unlockAndPost)Buffer的过程_框架

11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析_第5张图片

 


4.8 APP提交(unlockAndPost)Buffer的过程_消费者创建过程
4.9 APP提交(unlockAndPost)Buffer的过程_提交过程

你可能感兴趣的:(android)