GUI系统之SurfaceFlinger(12)VSync信号的产生和处理

本文详细介绍了Android系统中SurfaceFlinger如何处理VSync信号的产生和分发。通过分析源码,揭示了硬件和软件模拟VSync的实现方式,以及VSync信号如何从产生到分发到各个组件的过程,涉及HWComposer、DisplayHardware和EventThread等关键组件的角色和交互。
摘要由CSDN通过智能技术生成
文章都是通过阅读源码分析出来的,还在不断完善与改进中,其中难免有些地方理解得不对,欢迎大家批评指正。
转载请注明:From LXS. http://blog.csdn.net/uiop78uiop78/

GUI系统之SurfaceFlinger章节目录:
blog.csdn.net/uiop78uiop78/article/details/8954508


1.1 VSync的产生和处理

前面小节ProjectButter中我们学习了Android 4.1显示系统中的新特性,其中一个就是加入了VSync同步。我们从理论的角度分析了采用这一机制的必要性和运作机理,那么SurfaceFlinger具体是如何实施的呢?

先来想一下有哪些东西要考虑:

·          VSync信号的产生和分发

如果有硬件主动发出这一信号,那是最好的了;否则就得通过软件定时模拟来产生

·          VSync信号的处理

当信号产生后,SurfaceFlinger如何在最短的时间内响应,具体处理流程是怎么样子的

1.1.1 VSync信号的产生和分发

在Android源码surfaceflinger目录下有一个displayhardware文件夹,其中HWComposer的主要职责之一,就是用于产生VSync信号。

/*frameworks/native/services/surfaceflinger/displayhardware/HWComposer.cpp*/

HWComposer::HWComposer(const sp<SurfaceFlinger>& flinger,EventHandler& handler, nsecs_t refreshPeriod)

: mFlinger(flinger), mModule(0), mHwc(0), mList(0), mCapacity(0),mNumOVLayers(0),

 mNumFBLayers(0), mDpy(EGL_NO_DISPLAY),mSur(EGL_NO_SURFACE),

      mEventHandler(handler),mRefreshPeriod(refreshPeriod),

      mVSyncCount(0),mDebugForceFakeVSync(false)

{

    charvalue[PROPERTY_VALUE_MAX];

   property_get("debug.sf.no_hw_vsync", value, "0"); //系统属性

    mDebugForceFakeVSync =atoi(value);

    bool needVSyncThread =false;//是否需要软件模拟VSync

    int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &mModule);//加载HAL模块

    if (err == 0) {

        err = hwc_open(mModule, &mHwc);//打开module

        if (err == 0) {

if(mHwc->registerProcs) { //注册硬件设备事件回调

                mCBContext.hwc= this;

               mCBContext.procs.invalidate = &hook_invalidate;

               mCBContext.procs.vsync = &hook_vsync;

                mHwc->registerProcs(mHwc, &mCBContext.procs);

               memset(mCBContext.procs.zero, 0, sizeof(mCBContext.procs.zero));

            }

            if(mHwc->common.version >= HWC_DEVICE_API_VERSION_0_3) {

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值