基本原理:
SF一个Client对应一个app中的SurfaceComposerClient, 分别是Binder的n端和b端,主要用来CreateSurface
一个app中有多个Activity,一个Activity一般有一个Surface(除SurfaceView,一个View就有一个Surface),这个Acitivity所有View都是画在这个Surface上的。
App中的每个Surface对应SF中的每个Layer,因为SF为App创建Surface的时候,同时在SF端创建一个Layer。
Layer里面有个一个BufferQueue,对应Surface中的一个mGraphicBufferProducer,分别是Binder中的n端和b端。主要方法是dequeueBuffer和queueBuffer,当app需要在surface上画图时,dequeueBuffer申请一个缓存,写入,然后queueBuffer送出缓存并且通知SF来合成。
可以注意到,QueueBuffer和Surface都有一个BufferSlot数组,里面Buffer顺序是同步的,两个数组对应每一个元素指向同一个数据,这个数据也就是GraphicBuffer,应为这两个数组各自在两个进程中,所以这里是通过内存共享来实现。