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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值