![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
---【android 8.1 surface机制】
文章平均质量分 85
Achillisjack
这个作者很懒,什么都没留下…
展开
-
surfaceflinger 进程启动
surfaceflinger进程surfaceflinger是一个守护进程,开机启动。surfaceflinger代码的路径如下,frameworks\native\services\surfaceflinger在android 8.1系统中, surfaceflinger进程对应的配置不是在init.rc中,而是在surfaceflinger.rc中,如下,service surfaceflin...原创 2018-03-28 20:24:41 · 2936 阅读 · 0 评论 -
HWComposer 分析
HWComposerVsync信号的产生有两种来源,一种是硬件,也就是显示模块产生;另外一种是软件模拟,因为目前基本都是硬件产生的,所以软件模拟的代码就没有分析的必要了。接下来分析由硬件产生的vsync是怎么传到surfaceflinger的。这个硬件源就是HWComposer,它一方面管理这composer的hal模块,composer模块是厂商定制UI合成的接口,通常不会直接操作HWCompo...原创 2018-03-28 20:34:59 · 12060 阅读 · 0 评论 -
vsync信号
上个小节说明了HWC模块的加载等操作,并且也说明了HWC模块主要用于产生vsync信号,现在的问题是, vsync信号是如何产生的呢? 又是如何传输到SurfaceFlinger 中,处理的呢?在上面的论述中,HWComposer 的构造方法在加载完FB模块打开设备文件以及加载HWC模块之后,会注册vsync信号,mHwc->registerProcs(mHwc, &mCBConte...原创 2018-03-28 20:46:03 · 3095 阅读 · 0 评论 -
DispSync 分析
在SurfaceFlinger的构造方法中调用了DispSync的init方法对DispSync进行初始化,mPrimaryDispSync.init(hasSyncFramework, dispSyncPresentTimeOffset);调用流程图如下,DispSync的构造方法如下,DispSync::DispSync(const char* name) : mName(name),...原创 2018-03-28 20:58:02 · 2341 阅读 · 1 评论 -
EventThread 分析
在SurfaceFlinger的init方法中,构造了2个EventThread类型的线程,mEventThread = new EventThread(vsyncSrc, *this, false);sp<VSyncSource> sfVsyncSrc = new DispSyncSource(&mPrimaryDispSync, sfVsyncPhaseOffse...原创 2018-03-28 22:01:58 · 3359 阅读 · 0 评论 -
Looper 监听文件描述符
还是以SurfaceFlinger为例论述。SurfaceFlinger的init方法会调用MessageQueue的setEventThread方法创建Connection对象,并且还会调用Looper的addFd方法将BitTube对象的文件描述符添加到Looper中进行监听,mEventThread = eventThread;mEvents = eventThread->creat...原创 2018-03-28 22:08:03 · 1770 阅读 · 0 评论 -
SurfaceFlinger处理vsync信号
surfaceflinger创建Connection对象的过程前面已经论述过,在此就不赘述了。Surfaceflinger中接收vsync信号的入口为MessageQueue的cb_eventReceiver方法,调用流程图如下,cb_eventReceiver方法如下,直接调用eventReceiver方法,MessageQueue* queue = reinterpret_cast<Me...原创 2018-03-28 22:11:20 · 2105 阅读 · 1 评论