資源描述:
《android圖形系統(tǒng)及gpu加速分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Android圖形系統(tǒng)及GPU加速分析---西安交大智能交互與軟件實(shí)驗(yàn)室2013-5-7一、Android圖形系統(tǒng)簡介1.1Surface與SurfaceFlinger對于現(xiàn)代的操作系統(tǒng)而言,流暢、精致的圖形用戶界面是構(gòu)建優(yōu)秀用戶體驗(yàn)的重要手段。作為圖形用戶界面賴以存在的基礎(chǔ),圖形系統(tǒng)已經(jīng)成為操作系統(tǒng)的重要基礎(chǔ)設(shè)施,特別對于移動(dòng)設(shè)備而言,圖形系統(tǒng)決定著該設(shè)備的整體體驗(yàn)與運(yùn)行效率。Android圖形系統(tǒng)由兩大組件構(gòu)成:Surface和SurfaceFlinger。Surface,又稱繪圖表面,代表應(yīng)用程序需要顯示在屏幕上的內(nèi)容。Andorid
2、系統(tǒng)中同時(shí)存在多個(gè)Surface,這些Surface可能會(huì)重疊、相互遮擋。SurfaceFlinger負(fù)責(zé)Surface的疊加與合成,并把合成結(jié)果輸出到屏幕上。同時(shí),SurfaceFlinger為每一個(gè)Surface建立一個(gè)繪圖緩沖區(qū)隊(duì)列,用于存儲Surface繪制的圖像。Android圖形系統(tǒng)的總體結(jié)構(gòu)如下:圖1Android圖形系統(tǒng)總體結(jié)構(gòu)1.2Surface與SurfaceFlinger的交互過程Surface與SurfaceFlinger的交互主要集中于當(dāng)Surface需要更新的時(shí)候。交互過程如圖2所示:圖2Surface與Surf
3、aceFlinger的交互過程首先,當(dāng)Surface需要更新的時(shí)候,向SurfaceFlinger申請一塊繪圖緩沖區(qū);之后,Surface就在這塊緩沖區(qū)上繪圖;繪圖完成后,Surface把緩沖區(qū)歸還給SurfaceFlinger,并通知SurfaceFlinger重新合成各個(gè)Surface;SurfaceFlinger接收到合成請求后,合成并重繪需要重繪的Surface,并輸出給顯示設(shè)備,從而使屏幕上呈現(xiàn)最新的界面。1.3圖形系統(tǒng)的效率提升作為Android系統(tǒng)的關(guān)鍵組件,圖形系統(tǒng)的運(yùn)行效率直接影響著用戶體驗(yàn),而且關(guān)乎系統(tǒng)的整體效率。And
4、roid系統(tǒng)采取如下措施提升圖形系統(tǒng)的效率:1.共享緩沖區(qū)2.使用GPU加速圖形繪制與疊加下面,就分別分析Android圖形系統(tǒng)對緩沖區(qū)的管理和對GPU的使用。二、緩沖區(qū)管理2.1Gralloc為了便于使用,并隔離底層硬件的變化,向上提供統(tǒng)一的接口,Android在其HAL層為其圖形系統(tǒng)提供了gralloc(即GraphicAlloc)模塊,負(fù)責(zé)圖像緩沖區(qū)的分配、映射和回收。它可以從Andorid匿名共享內(nèi)存(以下簡稱AShm設(shè)備)和圖形設(shè)備(Framebuffer設(shè)備,以下簡稱fb設(shè)備)的存儲區(qū)中分配緩沖區(qū),并且可以把緩沖區(qū)映射到不同的進(jìn)
5、程中。Ashm設(shè)備的存儲區(qū)位于系統(tǒng)內(nèi)存中,它的容量只受系統(tǒng)內(nèi)存大小的限制。Framebuffer設(shè)備的存儲區(qū)位于顯示設(shè)備的內(nèi)存(即顯存),或者位于系統(tǒng)內(nèi)存的一塊特定區(qū)域,這里統(tǒng)稱為顯存。顯示設(shè)備可以直接訪問顯存,但是受技術(shù)和成本的限制,相對于系統(tǒng)內(nèi)存來說,其容量往往較小。注意,這兩個(gè)存儲區(qū)是不相交的,它們之間傳遞數(shù)據(jù)只能逐位復(fù)制。Gralloc向外提供了3個(gè)主要的數(shù)據(jù)結(jié)構(gòu)及其接口,他們的關(guān)系如下:圖3Gralloc數(shù)據(jù)結(jié)構(gòu)及其接口Gralloc是作為HAL層的一個(gè)模塊運(yùn)行的,所以其必須遵守HAL層的規(guī)范,即繼承并實(shí)現(xiàn)代表HAL模塊的hw_m
6、odule_t和代表設(shè)備的hw_device_t。有關(guān)AndroidHAL的詳細(xì)信息,請參考資料2。作為分配圖像緩沖區(qū)的模塊,gralloc應(yīng)該提供緩沖區(qū)分配和回收的機(jī)制;由于圖像緩沖區(qū)會(huì)被不同的進(jìn)程使用,gralloc還應(yīng)該提供把緩沖區(qū)映射到特定進(jìn)程的機(jī)制;為了保證多個(gè)進(jìn)程的有序訪問,gralloc必須提供鎖機(jī)制;同時(shí),gralloc還應(yīng)該能夠把緩沖區(qū)提交給fb設(shè)備,用于顯示保存在其中的圖像。gralloc模塊的實(shí)現(xiàn)如下:gralloc_module_t:代表gralloc模塊,并提供了進(jìn)程映射和鎖機(jī)制。其中:intregisterBuf
7、fer(gralloc_module_tconst*thiz,buffer_handle_th)會(huì)把h代表的緩沖區(qū)映射到調(diào)用者進(jìn)程;intunregisterBuffer(gralloc_module_tconst*thiz,buffer_handle_th)執(zhí)行相反的操作,即從調(diào)用者進(jìn)程解除映射;intlock(gralloc_module_t*thiz,buffer_handle_th,intusage,intl,intt,intw,inth,void**vaddr)會(huì)鎖定h緩沖區(qū)中的左上角為(l,t),寬為w,高為h的區(qū)域,并把該區(qū)域
8、的起始地址保存在vaddr中;intunlock(gralloc_module_t*thiz,buffer_handle_th)用于解鎖h代表的緩沖區(qū)。alloc_device_