自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android圖形子系統(tǒng)詳解

移動(dòng)開(kāi)發(fā) Android
Android的圖形系統(tǒng)發(fā)展經(jīng)歷了通過(guò)CPU模擬圖形操作,和GPU專門(mén)進(jìn)行圖形處理的階段,因?yàn)檫@方面硬件技術(shù)發(fā)展很快,因此Android圖形系統(tǒng)也在不斷調(diào)整,以期提供更加快速流暢的UI體驗(yàn)。

圖形操作可以有兩種方式實(shí)現(xiàn):一是利用通用CPU模擬圖形操作;二是利用GPU專門(mén)做圖形操作。前者會(huì)增加CPU的負(fù)擔(dān),在現(xiàn)在高分辨率已經(jīng)是普遍現(xiàn)象的時(shí)候,讓通用處理器來(lái)完成大量的圖形計(jì)算已經(jīng)不現(xiàn)實(shí)。Android圖形系統(tǒng)的發(fā)展過(guò)程也驗(yàn)證了這一觀點(diǎn)。

為了達(dá)到高效的圖形處理效果,是必須緊密結(jié)合軟件和硬件的。這篇文章主要介紹跟Android的圖形子系統(tǒng)。以后可能會(huì)對(duì)這些主題進(jìn)行更加深入的探討。

Android圖形系統(tǒng)的軟件構(gòu)成

下面的示意圖,展示了Android上負(fù)責(zé)圖形處理的軟件模塊。

AndroigGFX2-273x300

一個(gè)典型Android應(yīng)用中各個(gè)圖形系統(tǒng)組件的關(guān)系圖

GPU:

GPU專門(mén)設(shè)計(jì)用于加速圖形操作。GPU不同于CPU,它的一個(gè)設(shè)計(jì)目的就是高度的并行化,并行化是大部分圖形計(jì)算的共同特征。

Android 剛剛問(wèn)世的時(shí)候,GPU還是可選的,最近發(fā)布的版本中,GPU已經(jīng)是一個(gè)必配硬件。如果系統(tǒng)中沒(méi)有GPU,系統(tǒng)使用的OpenGL ES就包含了libagl和pixelflinger,通過(guò)軟件實(shí)現(xiàn)OpenGL ES協(xié)議接口,有時(shí)也有硬件支持的CopyBit。但是不幸的是,Android通過(guò)軟件模擬OpenGL,并不支持OpenGL ES 2.0?,F(xiàn)在,Android系統(tǒng)中的不少組件使用了OpenGL ES 2.0,比如HWUI、Renderscript、SurfaceTexture。平板電腦都有很高的分辨率,純軟件的模擬支持并不能保證圖形的填充需 求,也就不能為用戶提供流暢的UI體驗(yàn)。廠商如果想制造基于ICS或者更高版本Android系統(tǒng)的設(shè)備,就必須具有支持OpenGL ES 2.0 的GPU。

Canvas:

畫(huà)布是應(yīng)用程序用來(lái)繪制Widget或圖形等元素的地 方。Froyo和Gingerbread上,畫(huà)布通過(guò)Skia來(lái)繪制。Honeycomb及以后的版本,HWUI被加入了進(jìn)來(lái),提供了GPU加速支持。在 Ice Cream Sandwich及以后的版本上,HWUI缺省用于圖形的繪制。

Skia:

Skia是一組2D繪圖的API,它完全通過(guò)軟件實(shí)現(xiàn)。由于性能方面的原因,Skia逐漸被HWUI所替代。

HWUI

HWUI 可以使UI組件使用GPU加速。HWUI是在Honeycomb中引入進(jìn)來(lái)的,目的是使交互更加快速,及時(shí)響應(yīng),流暢。在大分辨率的平板電腦上,通過(guò) Skia來(lái)繪制動(dòng)畫(huà),會(huì)占用很高的CPU資源,進(jìn)而拖慢整個(gè)系統(tǒng)。HWUI需要支持OpenGL ES 2.0的GPU,不能通過(guò)軟件模擬。

Renderscript

Renderscript 同樣也是Honeycomb引入的新的API,它的設(shè)計(jì)為了同時(shí)解決移植和性能問(wèn)題。應(yīng)用程序員用Renderscript(基于C99)編寫(xiě)代碼,然后 一個(gè)LLVM的交叉編譯器把它編譯為機(jī)器獨(dú)立的bit code,應(yīng)用程序員再將其打包到apk中。當(dāng)用戶下載apk時(shí),設(shè)備上的編譯器(基于LLVM,位于/system/lib/libbcc.so)將 bit code編譯為目標(biāo)機(jī)器上的指令。

Renderscript在Froyo和Gingerbread上也存在,但是不是公開(kāi)的API。只有Android的一些wallpaper使用了它。那時(shí)它的實(shí)現(xiàn)也非常粗糙,功能有限。

Surface:

一 個(gè)Surface對(duì)應(yīng)一個(gè)屏幕外緩沖區(qū),應(yīng)用程序用來(lái)渲染窗口內(nèi)容。一個(gè)游戲程序,它可能使用OpenGL在Surface上繪制3D對(duì)象,一個(gè)普通應(yīng)用 程序,它可能使用Skia來(lái)繪制Widget或者文本,它也可能使用HWUI庫(kù)來(lái)啟用GPU加速。從ICS開(kāi)始,Surface通過(guò)一個(gè)后端的 SurfaceTexture實(shí)現(xiàn),這就意味著Surface對(duì)應(yīng)的不再是一個(gè)緩沖區(qū),而是一個(gè)紋理(texture)。

AndroigGFX1-300x290

Android平臺(tái)的圖形棧

SurfaceFlinger:

SurfaceFlinger是一個(gè)合成器,它管理來(lái)自于不同應(yīng)用的Surface。比如,可能有許多應(yīng)用同時(shí)存在,與此對(duì)應(yīng)的,存在許多獨(dú)立的Surface需要被渲染。SurfaceFlinger決定屏幕上顯示的內(nèi)容,那些需要被覆蓋,進(jìn)行裁剪。

SurfaceFlinger使用的是OpenGL ES 1.1標(biāo)準(zhǔn)中的函數(shù)。為什么呢?如果使用OpenGL ES 2.0,就必須需要支持OpenGL ES 2.0的硬件GPU,這會(huì)使系統(tǒng)的啟動(dòng)更加復(fù)雜,也會(huì)使模擬器的實(shí)現(xiàn)更加困難。

HW Composer:

硬件合成器是Honeycomb引入的一個(gè)HAL,SurfaceFlinger使用它,利用硬件資源來(lái)加速Surface的合成,比如3D GPU和2D的圖形引擎。

CopyBit:

CopyBit也是一個(gè)HAL。它允許使用特殊硬件來(lái)加速一些圖形操作,比如復(fù)制(blitting)。它設(shè)計(jì)的初衷是在沒(méi)有3D GPU的系統(tǒng)上加速軟件的渲染過(guò)程。CopyBit在ICS中被刪除了,因?yàn)镚PU已經(jīng)成為一個(gè)必備硬件,沒(méi)有必要專門(mén)設(shè)計(jì)一個(gè)加速部件。

Libagl/PixelFlinger:

libagl 是一個(gè)通過(guò)軟件實(shí)現(xiàn)了OpenGL ES 1.0和1.1版本API的組件。它使用PixelFlinger來(lái)實(shí)現(xiàn)OpenGL調(diào)用。為了加速使用PixelFlinger的渲染過(guò)程,JIT被引 入了進(jìn)來(lái),稱為CodeFling。CodeFling生成機(jī)器代碼,它急劇加速了許多類型的像素操作。

可以看出,Android的圖形系統(tǒng)在不斷的調(diào)整,目的是為了提供更加快速流暢的UI體驗(yàn)。這就是Android版本中圖形相關(guān)代碼變動(dòng)很大的原因。

責(zé)任編輯:徐川 來(lái)源: OSChina
相關(guān)推薦

2022-01-20 11:04:31

Linux DRMOpenHarmon鴻蒙

2021-12-17 16:42:09

鴻蒙HarmonyOS應(yīng)用

2021-08-31 11:53:38

Linux inputLinux 系統(tǒng)

2010-02-07 13:55:39

Android圖形

2023-08-02 08:38:27

JVM加載機(jī)制

2021-10-22 06:07:37

Windows 11 Windows 11應(yīng)用

2022-09-01 08:08:35

Android移動(dòng)操作系統(tǒng)

2018-09-17 08:36:59

機(jī)房監(jiān)控配電

2021-09-07 08:49:35

Android

2023-06-28 15:00:02

開(kāi)源鴻蒙輸入系統(tǒng)架構(gòu)

2021-10-26 09:44:51

Windows操作系統(tǒng)Android

2021-12-08 08:41:31

Linux 中斷子系統(tǒng)Linux 系統(tǒng)

2022-05-12 12:47:07

SPI主設(shè)備通信

2022-05-15 22:34:32

SPI 控制器SPI 子系統(tǒng)

2016-07-22 10:50:56

Linux內(nèi)核無(wú)線子系統(tǒng)

2021-07-22 08:03:08

Windows 操作系統(tǒng)Linux

2021-09-03 18:57:03

Windows 11AndroidXbox

2017-09-11 15:35:43

AndroidInput系統(tǒng)框架

2010-01-28 14:35:21

Android系統(tǒng)信息

2009-10-21 17:29:34

Oracle管理系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)