概览

Android 中有多个窗口,每个窗口都是一个 Renderer,每个窗口渲染后把 buffer 传递给 Composer。由 Composer 来合成每个窗口的 buffer,最后发送给显示器显示。

Graphic data flow through Android

Graphic data flow through Android

左侧多个 Renderer 填充 GraphicBuffer,通过 BufferQueue 传递给右侧的 Composer 合成,再送给显示器。

Renderer 和 Composer 通过 BufferQueue 交互,它是一个生产者消费者模式,Renderer 是生产者,Composer 是消费者。

BufferQueue communication process

BufferQueue communication process

对于 Activity 来说,Renderer 是 ViewRootImpl,Composer 是 SurfaceFlinger。Renderer 和 Composer 通过 ISurfaceComposer 与 ISurfaceComposerClient 交互。

BufferQueue - BufferSlot 与 BufferState 介绍了 BufferQueue 如果管理 buffer,该文档会介绍生产者和消费者的关系。

IGraphicBufferProducer 与 IGraphicBufferConsumer

whiteboard_exported_image-2.png

IGraphicBufferProducer 和 IGraphicBufferConsumer 继承 IInterface,它们的实现是 BufferQueueProducer 和 BufferQueueConsumer。

在 BufferQueue::createBufferQueue() 创建 BufferQueueCore、BufferQueueProducer 和 BufferQueueConsumer。

ViewRootImpl 与 SurfaceFlinger

whiteboard_exported_image-3.png