首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android SurfaceFlinger服务起动过程源码分析

2013-10-08 
Android SurfaceFlinger服务启动过程源码分析Android系统的SurfaceFlinger服务有两种启动方式:1)在SystemS

Android SurfaceFlinger服务启动过程源码分析

Android系统的SurfaceFlinger服务有两种启动方式:1)在SystemServer进程中以服务线程的方式提供服务;2)启动SurfaceFlinger独立的进程通过服务。第一种方式是在SystemServer进程启动过程中启动SurfaceFlinger服务的,而第二中方式是在Android启动脚本init.rc中配置SurfaceFlinger服务,通过init进程来启动的。下面就分别介绍SurfaceFlinger的两种启动方式。

1 服务线程启动方式在Android 开关机动画显示源码分析中已经简要介绍过SurfaceFlinger服务的这种启动方式,在SystemServer进程的init1阶段,通过JNI调用system_init()函数来启动SurfaceFlinger:frameworks\base\cmds\system_server\library\system_init.cpp
如果system_init.startsurfaceflinger属性的值等于0,意味着SurfaceFlinger是以服务进程的方式启动的。2.服务进程启动方式当system_init.startsurfaceflinger属性的值设置为0时,就必须在init.rc中配置SurfaceFlinger服务,通过init进程启动。Android SurfaceFlinger服务起动过程源码分析
Android SurfaceFlinger服务起动过程源码分析
当SurfaceFlinger以服务进程的方式启动时,必现提供进程入口函数main,在frameworks\native\cmds\surfaceflinger\main_surfaceflinger.cpp中实现:
4)SurfaceFlinger线程模型无论SurfaceFlinger是以服务线程启动还是已服务进程启动,在启动过程中,主线程启动SurfaceFlinger线程,EventThread线程及DisplayEventThread线程Android SurfaceFlinger服务起动过程源码分析EventThread线程启动过程:
void DisplayHardwareBase::startSleepManagement() const {    if (mDisplayEventThread->initCheck() == NO_ERROR) {        mDisplayEventThread->run("DisplayEventThread", PRIORITY_URGENT_DISPLAY);    } else {        ALOGW("/sys/power/wait_for_fb_{wake|sleep} don't exist");    }}

热点排行