https://blog.csdn.net/alien75/article/details/39290109
注:本文檔基於kk進行分析,着重於概念的精確定義和版本歷史演變
一、關於hwc的介紹
廣義的來講是指利用硬件完成圖像數據組合並顯示的功能(能力),狹義的來講就是指Hwcomposer HAL。
1、從廣義的角度來分析,有幾個概念需要精確定義(注意字母大小寫差異)
(1)hwc:利用硬件完成圖像數據組合並顯示的功能(能力),具體到代碼級別它是由多個類如SurfaceFlinger、HWComposer、DisplayDevice等協同完成的一種功能(能力)。
(2)HWComposer:硬件組合抽象層,介於SurfaceFlinger和HAL之間,具體到代碼級別就是一個類,封裝對於Hwcomposer HAL和Gralloc HAL的使用。根據官方的介紹,Hwcomposer HAL有1.0、1.1、1.2、1.3等多個版本,當為1.1及之后版本時,HWComposer不再需要使用Gralloc HAL。
(3)Hwcomposer:具體到代碼級別就是Hwcomposer HAL
(4)hw composer:具體到平台硬件級別就是composer硬件,如BE。
2、從狹義的角度來分析,
Hwcomposer HAL是從Honeycomb(3.0)引入,取代2.3的Overlay實現方式(但不是必須的),以降低代碼實現及維護難度。它的實現版本經歷了1.0到1.3的演變,在Jellybean MR1(4.2)實現的1.1版本,引入了硬件組合抽象層(HWComposer)的概念,向上對SurfaceFlinger完全隱藏了平台顯示硬件特性,工作方式也修改成如下官方描述:
(1)SurfaceFlinger provides the HWC with a full list of layers, and asks, "how do you want to handle this?"
SurfaceFlinger提供所有軟圖層信息給HWComposer,詢問其處理方式
(2)The HWC responds by marking each layer as "overlay" or "GLES composition"
HWComposer根據硬件性能決定是使用硬件圖層合成器還是GPU合成
(3)SurfaceFlinger takes care of any GLES composition, passing the output buffer to HWC, and lets HWC handle the rest
SurfaceFlinger處理需要GPU合成的軟圖層,將結果遞交給HWComposer做顯示(通過Hwcomposer HAL),需要硬件圖層合成器合成的軟圖層由HWComposer自行處理(通過Hwcomposer HAL)
分析:這樣設計的好處是可以充分發揮硬件性能,同時降低SurfaceFlinger和硬件平台的耦合度(方便移植)
3、Hwcomposer HAL的大概演變
(1)pre-1.1
只支持一個Display
(2)1.1(example: exynos5)
不需要Gralloc HAL
支持Multiple Display
支持hotplug
增加HWC_FRAMEBUFFER_TARGET合成類型
(3)1.2(example: msm8960、msm8x26)
支持Alpha運算(setPlaneAlpha),之前由GPU完成
(4)1.3(example: msm8974)
支持Virtual Display圖層合成,之前由GPU完成
支持crop(裁剪)
4、終端顯示支持
從JellyBean(4.2)開始支持多屏幕,屏幕類型:
Primary Display:設備自帶的屏幕,由SurfaceFlinger管理
External Display:通過HDMI連接,由SurfaceFlinger監控和管理
Virtual Display:這種方式是在4.2新增的(如基於Wifi Direct技術實現的Mircast),由DisplayManagerService監控和管理。Virtual Display可選擇全部或部分的圖層進行合成,在KitKat之前,Hwcomposer只能管理Primary Display的合成,Virtual Display使用GLES進行合成;從KitKat開始,Hwcomposer也能參與Virtual Display的合成。Virtual Display的顯示數據也是由BufferQueue處理
5、hwc能完成的工作
(1)Full-screen games in portrait and landscape mode
(2)Full-screen video with closed captioning and playback control
(3)The home screen(compositing the status bar, system bar, application window, and live wallpapers)
(4)Protected video playback
(5)Multiple display support
二、引用
http://source.anddroid.com/devices/graphics.htmlhttp://blog.csdn.net/jinzhuojun/article/details/17427491
http://www.cnblogs.com/samchen2009/p/3364327.html
http://blog.csdn.net/brucexu1978/article/details/8976781
The Android graphics path, in depth.pdf
Android Graphics And Android EGL.pdf