1. Android中的应用层每申请一个Surface,最终会通过jni和binder调用到surfaceflinger中,最终会创建一个Layerxxx(Layer,LayerBuffer,LayerBlur,LayerDim)类,最通常的是Layer类,在Layer类中有一个成员变量:
sp mBuffers[NUM_BUFFERS];
Layer的成员函数SetBuffers()初始化了该数组:
for(size_t i=0 ; i
mBuffers[i] = newGraphicBuffer();
}
其中,NUM_BUFFERS的定义是2,也就是说,android为每个Layer分配了两个显示缓冲,以便于做出PageFlip的动作。
2. GraphicBuffer作为显示内存的管理类,负责显示内存的申请和释放。

分配和释放显存有辅助类GraphicBufferAllocator完成,lock和unlock则是由辅助类GraphicBufferMapper来完成。这两个辅助类都会调用HAL层的模块gralloc来完成和底层驱动程序的交互。
本文介绍了Android系统中Surface的应用及其实现原理。当应用程序请求一个Surface时,最终会在SurfaceFlinger中创建一个Layer实例,用于管理两个显示缓冲区,实现PageFlip效果。此外,还详细解释了GraphicBuffer在内存管理中的作用。
3635

被折叠的 条评论
为什么被折叠?



