Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android核心分析(27)-----Android GDI 之SurfaceFlinger之動態結構示意圖

Android核心分析(27)-----Android GDI 之SurfaceFlinger之動態結構示意圖

編輯:Android開發實例

SurfaceFlinger對象建立過程示意

 

1 SurfaceSession的建立

    客戶端請求建立Surface時,首先在要與SurfaceFlinger建立一個Session,然後再Session上建立一個Connection通過概念返回Bclient對象。WindowManagerService在添加第一個窗口前會檢查SurfaceSession是否建立,如何沒有建立,將會新建立一個實例來代表與SurfaceFlinger的一個連接。

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

SurfaceSession的建立過程大部分是在C++ Native空間中完成的,表現在SurfaceSession的初始化函數:init()本地函數上。從下面的初始化函數可以看到:

Init()<->[email protected]_view_Surface.cpp

     new SurfaceComposerClient

    SurfaceSession在C++Native空間建立一個SurfaceComposerClient實例。而該實例的建立實現了如下的與SurfaceFlinger通訊基礎:

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

(2)建立了IsurfaceFlingerClient連接,在SurfaceFlinger端建立了對應的Client,並將BClient返回給WindowManagerService。

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但是不分配顯示內存。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved