# 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。
[
](http://hi.csdn.net/attachment/201006/14/0_1276524101W877.gif)
[
](http://hi.csdn.net/attachment/201006/14/0_1276524104Q1xk.gif)
### 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但是不分配顯示內存。
[
](http://hi.csdn.net/attachment/201006/14/0_1276524110bgH4.gif)
- 前言
- (一)分析方法論探討之設計意圖
- (二)方法論探討之概念空間篇
- (三)手機之硬件形態
- (四)手機的軟件形態
- (五)基本空間劃分
- (六)IPC框架分析 Binder,Service,Service manager
- (七)Service深入分析
- (八)Android 啟動過程詳解
- (九)Zygote Service
- (十)Android GWES之基本原理篇
- (十一)Android GWES之消息系統
- (十二)Android GEWS窗口管理之基本架構原理
- (十三)Android GWES之Android窗口管理
- (十四)Android GWES之輸入系統
- (十五)Android輸入系統之輸入路徑詳解
- (十六)Android電話系統-概述篇
- (十七)電話系統之rilD
- (十八)Android電話系統之RIL-Java
- (十九)電話系統之GSMCallTacker
- (二十)Android應用程序框架之無邊界設計意圖
- (二十一)Android應用框架之AndroidApplication
- (二十二)Android應用框架之Activity
- (二十三)Andoird GDI之基本原理及其總體框架
- (二十四)Android GDI之顯示緩沖管理
- (二十五)Android GDI之共享緩沖區機制
- (二十六)Android GDI之SurfaceFlinger
- (二十七)Android GDI 之SurfaceFlinger之動態結構示意圖
- (二十八)Android GDI之Surface&Canvas