[Android] SurfaceFlinger (2)
這裡整理了一份從java層surface到surfaceflinger的source code trace route,雖然只列出Surface init及Surface destroy,不過看起來基本的流程就是這樣了,其他的surface operations應該也可以依循這樣的路徑去看。
相關的檔案位置如下:
frameworks/base/core/java/android/view/Surface.java
frameworks/base/core/jni/android_view_Surface.cpp
frameworks/base/libs/ui/SurfaceComposerClient.cpp
frameworks/base/libs/ui/ISurfaceFlingerClient.cpp
frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp
還有一些相關的header files可能會需要看看,可以在以下兩個位置找到
frameworks/base/include/ui
frameworks/base/include/binder
簡單說一下,其實基本上就是找到上層java那邊的功能,然後一定會有相對應的jni,去作為java操控底層native library的interface,所以找到相對的程式碼,從裡面可以再trace到相對應的library。surfaceflinger的部份,首先要注意的是Binder的介接,因為這裡的實作方式是透過Binder去作為SurfaceComposerClient及SurfaceFlinger之間的溝通管道,所以在此會看到好幾個加上了像ISurfaceFlingerClient.cpp這種由I開頭的檔名,裡面基本上都是繼承自Binder相關的class,Binder的宣告和實作部份,大致上有以下幾個檔案要注意,
frameworks/base/include/binder/IInterface.h
frameworks/base/include/binder/Binder.h
frameworks/base/include/binder/IBinder.h
frameworks/base/include/binder/BpBinder.h
而他們的實作內容放在
frameworks/base/libs/binder/
在SurfaceFlinger裡面,則要注意到一些Layer的操作,這部份Android 1.6和2.0之間似乎有些區別,Android 2.0在LayerBase的部份,另外有個class sp來作template包裝,這是跟1.6之間的小差異吧。
接下來再針對找尋dirty region的部份作整理。
發佈留言
很抱歉,必須登入網站才能發佈留言。