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架构

 

 

posted @ 2011-11-17 17:36  秋江鹜  阅读(5118)  评论(7编辑  收藏  举报