设为首页 加入收藏

TOP

Android 4.0.3 显示系统深入理解
2014-11-24 13:51:40 来源: 作者: 【 】 浏览:1
Tags:Android 4.0.3 显示系统 深入 理解

面对这么复杂一个Android显示系统,如何入手呢 根据以前的经验,不管它有多么复杂,其功能不就是以下三步曲吗?


  1)显示系统的创建及初始化


2)画图


3)销毁


哪我的分析就从显示系统的创建及初始化开始吧!由于小弟对Java没有什么研究兴趣,所有重点就分析Native部分。当然Native的入口就在android_view_Surface.cpp中,此文件主要包含以下两部分给Java层调用:


1)gSurfaceSessionMethods: 操作SurfaceSession的方法


2)gSurfaceMethods:操作Surface的方法


2.1.1 SurfaceSession_init


其功能如下:


1)创建SurfaceComposerClient对象


2)调用SurfaceComposerClient::onFirstRef方法


现在已经进入到SurfaceComposerClient的地盘,根据其名字含义,它应该是一个进行Surface合成的客户端,通过它发命令给SurfaceFlinger来进行需要的操作。其初始化流程如下图所示:



为了方便后面的理解,先看看SurfaceComposerClient中有些什么宝贝来完成这个任务。在其中定义了如下几个类:


一看到名字为Service,应该是用于从SurfaceFlinger中获取Service以建立连接关系<它是一个单实例,一个进程有且只有一个实例对象>,然后供后面进行相关的操作。其构造函数代码如下:


由此可见,ComposerService主要是获取SurfaceFlinger服务、获取在SurfaceFlinger::readyToRun中创建的共享内存块及其基地址。在Client中,谁要想与SurfaceFlinger通信,需要通过接口getComposerService来获取此BpSurfaceComposer


此ComposerService是在调用ComposerService::getInstance时进行有且只有一个的实例化,因为前面讲过,它是一个单实例。



它也是一个单实例,管理并发送每个layer的ComposerState。其定义如下:


把上面的comments看完就明白了,Composer管理每个SurfaceComposerClient中的每一个Surface的状态,并记录在ComposerState的layer_state_t中,然后调用者可以调用其closeGlobalTransaction方法把这些mStates发送给SurfaceFlinger处理(处理函数为:SurfaceFlinger::setTransactionState)。


谁来调用它的方法设置层的属性及发送mStates呢 -----答案是由SurfaceComposerClient来调用。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 字体自适应设置 下一篇PlayBook NDK编程如何获取系统时间

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: