Surface, SurfaceFlinger的CS架构,写的不错。

转自:http://www.cnblogs.com/xl19862005/archive/2011/11/17/2215363.html

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

 

 

 

更多相关文章

  1. Android平台输入法的生命周期
  2. Android(安卓)JNI 篇 - JNI回调的三种方法(精华篇)
  3. Android(安卓)---- WebView与JavaScript交互调用(2)
  4. Android软件开发之常用系统控件界面大合集
  5. Android中webview和js之间的交互
  6. Android(安卓)AsyncTask实现
  7. 基于ActionbarActivity中Actionbar自定义布局
  8. Android(安卓)教程 翻译 1 Activities 活动
  9. andriod API22

随机推荐

  1. ProgressBar的父控件为白色背景时progres
  2. Android(安卓)API中文(1) -- Android是什么
  3. Android(安卓)Studio使用Apache POI在And
  4. FileProvider无法获取外置SD卡问题解决方
  5. 一起Talk Android吧(第一百四十六回:Androi
  6. android 悬浮控件-仿360手机助手应用详情
  7. Android中从本地未安装的APK动态加载类和
  8. Android中,Broadcas介绍
  9. String.format()在android中的应用
  10. Android Makefile and build system 分析