Android2.3异步双屏修改记录之android CS架构
转载请注明本文出处:http://www.cnblogs.com/xl19862005
作者:Xandy
android之CS架构
在此之前,有必要理清一下下表1中所列出的一些概念。
ISurface |
定义了基础的Surface接口,供GUI系统客户端(应用)和Server端(surfaceflinger)交互 |
BpSurface |
ISurface的派生类,提供接口供Server调用Client功能 |
BnSurface |
ISurface的另一个派生类,提供接口供Client调用Server功能。当Server收到来自Client(通过BnSurface)的调用请求后,如registerBuffer、postBuffer等,BnSuerface::onTransact被触发 |
Surface |
(LayerBaseClient的私有类)是BnSurface的派生类 |
SurfaceBuffer |
(SurfaceBuffer的私有类)是Surface的派生类 |
ISurfaceComposer |
定义了基础的接口,供客户端和Server端交互 |
BpSurfaceComposer |
是一个派生类,提供接口供Server调用Client功能 |
BnSurfaceComposer |
是一个派生类,提供接口Client端调用Server功能。类SurfaceFlinger由BnSurfaceComposer派生而来 |
SurfaceComposerClient |
直接供Client使用,调用ISurface(BnSurface)和ISurfaceComposer(BnSurfaceComposer)以及ISurfaceFlingerClient接口与Server交互 |
bClient |
派生自ISurfaceFlingerClient(BnSurfaceFlingerClient),调用Server的createSurface,真正创建一个surface。每个surface对应一个layer |
EGLDisplay |
系统显示ID或句柄 |
EGLSurface |
系统窗口或framebuffer句柄 |
EGLConfig |
Surface的EGL配置 |
EGLContext |
OpenGL ES图形上下文件 |
NativeDisplayType |
Native系统显示类型 |
NativeWindowType |
Native系统窗口缓存类型 |
NativePixmapType |
Native系统framebuffer |
egl_native_window_t |
定义了一个本地window类。这个类提供了对本地window的所有描述以及用于egl(OpenGL ES与本地GUI系统的接口)操作本地window的所有方法 |
-表1- Surface 相关概念
Google在设计android的时候GUI这部分采用了CS的架构,可以理解为新创建的每一个surface(client端为surface,与service端的layer一一对应)为一个client,service端主要是surfaceflinger这个东东,它会独立生成一个libsurfaceflinger.so的库,在client端通过”surfaceflinger”这个service名与它进行连接,然后通过IPC(binder)的方式将surface的内容,如buffers、format、width、height等发送给service,然后相应surface的内容则会在surfaceflinger的threadLoop中进行计算、裁减、排列及绘制输出,其中涉及到了EGL(OpenGL ES)绘图,buffer管理等。
android的GUI系统的CS架构如图1所示,相应的程序流程如图2所示,这部分内容都在frameworks这个包中,其中的JNI为C及C++层与java层之间的桥梁。
-图1- CS架构