欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Android?圖形系統剖析?(轉)
架構
 
   Android 中的圖形系統采用 Client/Server架構。Server (即SurfaceFlinger) 主要由 C++ 代碼編寫(xiě)而成。Client端代碼分為兩部分,一部分是由 Java 提供的供應用程序使用的 API,令一部分則是用 C++寫(xiě)成的底層實(shí)現。下圖概要介紹了 Android 圖形系統的架構以及使用的主要組件。


SurfaceFlinger

SurfaceFlinger 在整個(gè)圖形系統中擔任 server 角色,它負責將各個(gè) surface 根據 Z order 合成(composer) 起來(lái)。
Surface

Android圖形系統中一個(gè)重要的概念和線(xiàn)索是surface。View及其子類(lèi)(如 TextView,Button)要畫(huà)在surface上。每個(gè)surface創(chuàng )建一個(gè)Canvas對象(但屬性時(shí)常改變),用來(lái)管理view在surface上的繪圖操作,如畫(huà)點(diǎn)畫(huà)線(xiàn)。每個(gè)canvas對象對應一個(gè)bitmap,存儲畫(huà)在surface上的內容。

每個(gè)Surface通常對應兩個(gè)buffer,一個(gè)front buffer, 一個(gè)back buffer。其中, backbuffer就是canvas繪圖時(shí)對應的bitmap (研究 android_view_Surface.cpp::lockCanvas)。因此,繪畫(huà)總是在backbuffer上,需要更新時(shí),則將back buffer和front buffer互換。

The window is tied to a Surface and the ViewRoot asks the Surfacefor a Canvas that is then used by the Views to draw onto. AfterView draw its data to canvas, ViewRoot will callsurface.unlockCanvasAndPost(canvas) to schedulesurfaceFlinger::composeSurfaces() which do the actually display todisplay panel. SurfaceFlinger handles to transfers drawn data incanvas to surface front buffer or backbuffer.

Except for SurfaceViews, different views within the same ViewRootshare the same surface.
Layer

每個(gè)surface又對應一個(gè)layer, SurfaceFlinger負責將各個(gè)layer的frontbuffer合成(composite)繪制到屏幕上。

A Layer is something that can be composited by SurfaceFlinger(should have been called LayerFlinger). There are several types ofLayers if you look in the code, in particular the regular ones(Layer.cpp) , they are backed by a Surface, and the LayerBuffer(very badly chosen name) which don't have a backing store, butreceive one from their client. . Note that the GGLSurface type,should have been called GGLBuffer.

Multiple layers are just composited to the final buffer in their Zorder.
創(chuàng )建一個(gè) Surface 的過(guò)程

Android 創(chuàng )建一個(gè) Surface 的過(guò)程如下面的序列圖所示:

研究一個(gè)surface如何創(chuàng )建的關(guān)鍵路徑如下:

1. frameworks/base/core/java/android/view/Surface.java —Surface::Surface ()。

2. frameworks/base/core/jni/android_view_Surface.cpp — Surface_init()。

在這個(gè)函數中SurfaceComposerClient對象被創(chuàng )建。

3. frameworks/base/libs/ui/SurfaceComposerClient.cpp —SurfaceComposerClient::SurfaceComposerClient ().

這個(gè)函數非常重要,在這里建立了client和server之間的橋梁。通過(guò)函數_get_surface_manager()獲得了一個(gè)指向server的IBinder對象(具有ISurfaceComposer接口),之后通過(guò)這個(gè)IBinder就可以跨進(jìn)程訪(fǎng)問(wèn)Server的功能。接著(zhù)調用ISurfaceComposer::createConnection()創(chuàng )建并返回了一個(gè)ISurfaceFlingerClient的IBinder。

4. frameworks/base/libs/ui/SurfaceComposerClient.cpp —SurfaceComposerClient::createSurface().

這個(gè)函數中,利用前面獲得的ISurfaceFlingerClient的IBinder,調用其createSurface接口。

5.frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp —BClient::createSurface ()。

BClient由ISurfaceFlingerClient派生而來(lái)。

   6.frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp —SurfaceFlinger:: createSurface()。

這個(gè)函數為Surface創(chuàng )建一個(gè)對應的Layer。

上述關(guān)鍵路徑中,1,2,3,4運行于client進(jìn)程中,而5,6運行與server進(jìn)程中。server作為一個(gè)service提供給client訪(fǎng)問(wèn)。
與圖形相關(guān)的代碼分析

與圖形相關(guān)的代碼主要位于下列目錄:

1. frameworks/base/graphics/java/android/graphics

2.frameworks/base/core/java/android/view

3.frameworks/base/core/java/android/widget

4.frameworks/base/opengl/

5.frameworks/base/libs/ui

6.frameworks/base/libs/surfaceflinger

7.frameworks/base/core/jni/android/graphics

8.frameworks/base/core/jni/android/opengl

9.frameworks/base/core/jni/android/android_view_*.cpp

10.external/skia
android.graphics, android.view和android.widget

1.frameworks/base/graphics/java/android/graphics

2.frameworks/base/core/java/android/view

3.frameworks/base/core/java/android/widget

android.graphics, android.view和android.widget功能和其他類(lèi)似的圖形庫如Qt/Gtk+差不多,分別提供基本的圖形原語(yǔ)(如畫(huà)點(diǎn)畫(huà)線(xiàn),設置圖形上下文等),事件機制,以及開(kāi)發(fā)圖形用戶(hù)界面控件等。canvas 用于開(kāi)發(fā)2D圖形,Surface 代表一個(gè)可供圖形系統繪制的surface??稍谄渖侠L制2D活3D圖形。
frameworks/base/opengl/

這個(gè)目錄包含opengel的接口以及軟件實(shí)現。在

http://developer.android.com/guide/topics/graphics/opengl.html

有詳細介紹如何使用android.opengl開(kāi)發(fā)3d graphics。
external/skia

skia與cairo功能相當,封裝底 層的圖形硬件,為上面的圖形庫提供最基礎的操作圖形硬件的原語(yǔ)。關(guān)于skia 可參考《淺談 Google Skia 圖形處理引擎》2和 《Android 的圖形引擎 Skia》3兩篇文章。
frameworks/base/libs/ui 和 frameworks/base/libs/surfaceflinger

ISurface 定義了基礎的Surface接口,供圖形系統客戶(hù)端(應用)和server端(即surfaceflinger)交互。

BpSurface是ISurface的派生類(lèi),提供接口供server 調用客戶(hù)端功能;

BnSurface是ISurface的另一個(gè)派生類(lèi),提供接口供客戶(hù)端調用server功能。當 server 收到來(lái)自客戶(hù)端(通過(guò)BnSurace)的調用請求后,如registerBuffers,postBuffer等,BnSurface:
nTransact被觸發(fā)。

Surface (LayerBaseClient的私有類(lèi))是BnSurface的派生類(lèi)。

SurfaceBuffer (SurfaceBuffer的私有類(lèi))是Surface的派生類(lèi)。

ISurfaceComposer 定義了基礎的接口,供客戶(hù)端和server端交互。

BpSurfaceComposer是一個(gè)派生類(lèi),提供接口供server調用客戶(hù)端功能;

BnSurfaceComposer是另一派生類(lèi),提供接口供客戶(hù)端調用server功能。類(lèi) SurfaceFlinger由BnSurfaceComposer派生而來(lái)。

SurfaceComposerClient直接供客戶(hù)端使用,調用ISurface (BnSurface)和ISurfaceComposer (BnSurfaceComposer)以及 ISurfaceFlingerClient接口,與server交互。

BClient 派生自ISurfaceFlingerClient(BnSurfaceFlingerClient),調用server的createSurface,真正創(chuàng )建一個(gè)surface。每個(gè)surface對應一個(gè)layer.

egl_native_window_t 定義了一個(gè)本地window類(lèi) 。這個(gè)類(lèi)提供了對本地window 的所有描述以及用于egl(opengl 與本地圖形系統的接口)操作本地windwo的所有方法。

EGLNativeSurface是egl_native_window_t的一個(gè)派生類(lèi)。

EGLDisplaySurface是EGLNativeSurface的派生類(lèi)。 EGLDisplaySurface是一個(gè)非常重要的類(lèi),在這個(gè)類(lèi)里,真正打開(kāi)framebuffer設備(/dev/graphics/fb0或者/dev/fb0),并將這個(gè)設備封裝成EGLDisplaySurface的形式供server使用。函數mapFrameBuffer打開(kāi)framebuffer,創(chuàng )建兩個(gè)緩沖區,(一個(gè)是on screen front 緩沖區, 另一個(gè)back buffer, 可能位于offscreenframebuffer,也可能位于系統內存)。函數swapBuffers將back buffer內容拷貝到front buffer中。

DisplayHardware 類(lèi)中初始化了egl系統,并為本地窗口對象EGLDisplaySurface創(chuàng )建了對應的EGLSurface 對象。surfaceflinger使用DisplayHardware去和本地窗口打交道。
jni

7.frameworks/base/core/jni/android/graphics

8.frameworks/base/core/jni/android/opengl

9.frameworks/base/core/jni/android/android_view_*.cpp

這些目錄下的代碼在Java層的graphics 組件和native(c++)組件之間銜接,將java層的功能調用轉換到對應的本地調用。

hardware/libhardware實(shí)現了HAL(Hardware Abstraction Layer)層,copybitdevice是其中一個(gè)模塊。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
android中的surface
Android 4.4 源碼中的關(guān)鍵代碼途徑
Android 圖形顯示框架
[譯]Android Graphics I 簡(jiǎn)介
Android圖形顯示系統(一)
android的UI系統分析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久