surfaceflinger中的显示内存管理类--GraphicBuffer

http://blog.csdn.net/DroidPhone/archive/2010/09/17/5891786.aspx

1.  Android中的应用层每申请一个Surface,最终会通过jni和binder调用到surfaceflinger中,最终会创建一个Layerxxx(Layer,LayerBuffer,LayerBlur,LayerDim)类,最通常的是Layer类,在Layer类中有一个成员变量:

            sp<GraphicBuffer> mBuffers[NUM_BUFFERS];

Layer的成员函数SetBuffers()初始化了该数组:

 

view plain copy to clipboard print ?
  1. for (size_t i=0 ; i<NUM_BUFFERS ; i++) {   
  2.     mBuffers[i] = new GraphicBuffer();   
  3. }  

for (size_t i=0 ; i<NUM_BUFFERS ; i++) { mBuffers[i] = new GraphicBuffer(); }

 

其中,NUM_BUFFERS的定义是2,也就是说,android为每个Layer分配了两个显示缓冲,以便于做出PageFlip的动作。

2.  GraphicBuffer作为显示内存的管理类,负责显示内存的申请和释放。

surfaceflinger中的显示内存管理类--GraphicBuffer_第1张图片

分配和释放显存有辅助类GraphicBufferAllocator完成,lock和unlock则是由辅助类GraphicBufferMapper来完成。这两个辅助类都会调用HAL层的模块gralloc来完成和底层驱动程序的交互。

你可能感兴趣的:(android,jni,layer,2010)