Keep on going, never give up.

Android Surface机制流程

Android采用的SurfaceFlinger来管理整个系统的UI工作,既然是管理当然SurfaceFlinger不会去做具体的绘制工作,而只负责整个系统UI资源的协调管理,所以,SurfaceFlinger是个总承包商。干活的则是下面诸多符合OpenGL开放图形库规范的接口库。

一、几个概念

OpenGL——Open Graphic Library,开放图形接口库,是一套跨编程语言、跨平台的编程接口的规范,不同厂家可能有不同的实现。

SurfaceFlinger——Android中负责Surface之间叠加(merge)、混合(Composer)操作的动态库

libagl——Android通过软件方法实现的一套OpenGL动态库

libhgl——Android通过硬件实现的一套OpenGL(也就是由GPU厂商提供GPU库),随集成GPU不同而不同。

二、几个目录

Android中几个Surface相关的主要目录:

frameworks/base/opengl/——该目录下包含相关opengl本地库源码,有libGLESv1_CM.so、libEGL.so、libagl.so。

frameworks/base/services/java/com/android/server/——Surface服务相关源码放在此系统目录下

frameworks/base/core/jni/——一些关于Surface Jni接口源码在此目录下。

以下则为MTK平台下的厂家配置:

alps/mediatek/platform/mt6573/kernel/drivers/video——底层显示驱动

alps/mediatek/source/kernel/drivers/video——fb及disp显示驱动

alps/mediatek/source/kernel/drivers/gpu——GPU硬件驱动

二、几个流程

SurfaceFlinger启动流程按层级分底层物理层和顶层逻辑层,当然严格点SurfaceFlinger其实只是指Java层面的机制。以下说法仅从调用流程从上到下方面理解划分。

顶层流程:系统服务(System Server)->启动BinderService->启动SurfaceFlinger->去中间层

中间层流程:native_window->libagl(或libhgl)->去底层

底层启动流程:LCD驱动程序(xxx.cpp)->接口驱动程序(比如dsi_xxx.cpp)->显示驱动程序(disp_xxx.cpp)->fb管理器(比如mtk_fb.cpp)

数据流向,SurfaceFlinger接受UI动作,然后协调后经过软件或硬件接口库运算完成,把最终运算完成的显示数据,统一通过fb(比如/dev/fb0)传到底层刷新到LCD进行显示。

参考资料:

http://cn.khronos.org/opengles

http://zh.wikipedia.org/wiki/OpenGL

http://www.cnitblog.com/luofuchong/archive/2011/08/10/75036.html[推荐]

http://blog.sina.com.cn/s/blog_72819b170101an7k.html

http://blog.csdn.net/innost/article/details/6172893

http://blog.chinaunix.net/uid-23602891-id-3415237.html

http://blog.chinaunix.net/uid-26553782-id-4080817.html

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.