Android核心分析(27)-----Android GDI 之SurfaceFlinger之动态结构示意图

本文详细解析了Android系统中SurfaceFlinger对象的创建过程,包括SurfaceSession的初始化及Surface的建立步骤。揭示了SurfaceSession如何与SurfaceFlinger建立连接,并在WindowManagerService中为每个窗口创建对应的Surface。
部署运行你感兴趣的模型镜像

SurfaceFlinger对象建立过程示意

 

1 SurfaceSession的建立

    客户端请求建立Surface时,首先在要与SurfaceFlinger建立一个Session,然后再Session上建立一个Connection通过概念返回Bclient对象。WindowManagerService在添加第一个窗口前会检查SurfaceSession是否建立,如何没有建立,将会新建立一个实例来代表与SurfaceFlinger的一个连接。

new SurfaceSession()@windowAddedLocked() @WindowManagerService.java。

SurfaceSession的建立过程大部分是在C++ Native空间中完成的,表现在SurfaceSession的初始化函数:init()本地函数上。从下面的初始化函数可以看到:

Init()<->SurfaceSession_init@android_view_Surface.cpp

     new SurfaceComposerClient

    SurfaceSession在C++Native空间建立一个SurfaceComposerClient实例。而该实例的建立实现了如下的与SurfaceFlinger通讯基础:

(1)建立了代理SurfaceFlinger服务的代理服务端

(2)建立了IsurfaceFlingerClient连接,在SurfaceFlinger端建立了对应的Client,并将BClient返回给WindowManagerService。

image

image

2 Surface的建立

    在WindowManagerService中WindowState类中,我们知道每个主窗口子啊需要是都需要建立一个Surface与之对应。win.createSurfaceLocked()@relayoutWindow

Surface.java

Init()< -- >Surface_init(….,session,pid,dpy,w,h,format)@android_view_Surface.cpp

     SurfaceControl surface(client->createSurface

      在mClient的连接上:建立ISurface接口:

      M_Client->greateSurface(...)@

        Bclient ::createSurface(mId...)@SurfaceFlinger.cpp

            mFlinger->createSurface(clientid....)

               createNormalSurfaceLocked

*createNormalSurfaceLocked:建立一个Layer分配显示内存

*createPushBuffersSurfaceLocked:建立一个LayBuffer但是不分配显示内存。

image

 

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值