Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示
??????? SurfaceFlinger對象建立過程示意
1 SurfaceSession的建立
客戶端請求建立Surface時,首先在要與SurfaceFlinger建立一個Session,然后再Session上建立一個Connection通過概念返回Bclient對象。WindowManagerService在添加第一個窗口前會檢查SurfaceSession是否建立,如何沒有建立,將會新建立一個實例來代表與SurfaceFlinger的一個連接。
new SurfaceSession()@windowAddedLocked() @WindowManagerService.java。
SurfaceSession的建立過程大部分是在C++ Native空間中完成的,表現(xiàn)在SurfaceSession的初始化函數(shù):init()本地函數(shù)上。從下面的初始化函數(shù)可以看到:
Init()<->SurfaceSession_init@android_view_Surface.cpp
new SurfaceComposerClient
SurfaceSession在C++Native空間建立一個SurfaceComposerClient實例。而該實例的建立實現(xiàn)了如下的與SurfaceFlinger通訊基礎(chǔ):
(1)建立了代理SurfaceFlinger服務(wù)的代理服務(wù)端
(2)建立了IsurfaceFlingerClient連接,在SurfaceFlinger端建立了對應(yīng)的Client,并將BClient返回給WindowManagerService。
???????????????????????
asd.jpg (10 KB, 下載次數(shù): 0)
下載附件 ?保存到相冊
?????????????????????????
qwe.jpg (46.71 KB, 下載次數(shù): 0)
下載附件 ?保存到相冊
2 Surface的建立
在WindowManagerService中WindowState類中,我們知道每個主窗口子啊需要是都需要建立一個Surface與之對應(yīng)。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分配顯示內(nèi)存
*createPushBuffersSurfaceLocked:建立一個LayBuffer但是不分配顯示內(nèi)存。
???????????????????????????
qrt.jpg (90.01 KB, 下載次數(shù): 0)
下載附件 ?保存到相冊
轉(zhuǎn)載于:https://www.cnblogs.com/kingshow123/p/androidcore27.html
總結(jié)
以上是生活随笔為你收集整理的Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery以JSONP的访问调用一个W
- 下一篇: Android 自定义Applicati