高通平臺Display顯示架構

目錄

  • 一、顯示整體架構
  • 二、SurfaceFlinger
  • 三、HWC
  • 四、Gralloc
  • 五、DisplayManagerService
  • 六、WindowManagerService


一、顯示整體架構

在這里插入圖片描述


二、SurfaceFlinger

SurfaceFlinger是一個系統服務,如:audioflinger等等,這個系統服務主要實現了Surface的建立、控制、管理等功能。換種說法就是,在Android 的實現中它是一個service,提供系統范圍內的surface composer功能,它能夠將各種應用程序的2D、3D surface進行組合。

SurfaceFlinger是整個Android系統渲染的核心進程。所有應用的渲染邏輯最終都會來到SF中進行處理,最終會把處理后的圖像數據交給CPU或者GPU進行繪制,在每一個應用中都以Surface作為一個圖元傳遞單元,向SF這個服務端傳遞圖元數據。
目前SurfaceFlinger中支持兩種合成方式,一種是Device合成,一種是Client合成。SurfaceFlinger 在收集可見層的所有緩沖區之后,便會詢問Hardware Composer應如何進行合成。

  • 1、Device合成
    Device合成方式是相對與硬件合成來說的,其合成方式是,將各個Layer的內容用GPU渲染到暫存緩沖區中,最后將暫存緩沖區傳送到顯示硬件。這個暫存緩沖區,我們稱為FBTarget,每個Display設備有各自的FBTarget。Device合成,之前稱為GLES合成,我們也可以稱之為GPU合成。Device合成,采用RenderEngine進行合成。
  • 2、Client合成
    Client合成就是用專門的硬件合成器進行合成HWComposer,所以硬件合成的能力就取決于硬件的實現。其合成方式是將各個Layer的數據全部傳給顯示硬件,并告知它從不同的緩沖區讀取屏幕不同部分的數據。

三、HWC

HWC是Android中進行窗口合成和顯示的HAL層模塊,通常是由OEM實現并完成,為SurfaceFlinger提供硬件支持。

SurfaceFlinger可以使用OpenGL ES合成Layer,這需要占用并消耗GPU資源。大多數GPU都沒有針對圖層合成進行優化,因此當SurfaceFlinger通過GPU合成圖層時,應用程序無法使用GPU進行自己的渲染。而HWC通過硬件設備進行圖層合成,可以減輕GPU的合成壓力

HWC合成機制:

  1. SurfaceFlinger向HWC提供所有Layer的完整列表,讓HWC根據其硬件能力,決定如何處理這些Layer
  2. HWC會為每個Layer標注合成方式,表明是通過GPU還是通過HWC合成
  3. SurfaceFlinger負責先把所有注明GPU合成的Layer合成到一個輸出Buffer,然后把這個輸出Buffer和其他Layer(注明HWC合成的Layer)一起交給HWC,讓HWC完成剩余Layer的合成和顯示

四、Gralloc

在android中,HAL層的gralloc庫負責申請圖形緩沖區的所有工作,HAL層之上的Surface、BufferQueue最終都是調用gralloc庫去申請圖形緩沖區,然后返回給上層一個buffer_handle_t

gralloc分配framebuff圖形緩沖區
gralloc調用gralloc_alloc_framebuffer()分配framebuffer的內存,其核心是對fb設備/dev/graphics/fb或者/dev/fb執行mmap(),映射到用戶空間

gralloc分配普通圖形緩沖區
普通圖形緩沖去則是通過gralloc_alloc_buffer()分配內存的


五、DisplayManagerService

DisplayManagerServices主要是用來管理顯示的生命周期,它決定如何根據當前連接的物理顯示設備控制其邏輯顯示,并且在狀態更改時,向系統和應用程序發送通知。

默認支持4種顯示類型:

  1. LocalDisaplay:本地物理屏幕顯示設備,DMS啟動之后通過SurfaceFlinger獲取物理屏數據
  2. OverlayDisplay: 模擬輔助顯示設備, 開發者選項->模擬輔助顯示
  3. WIFIDisplay: 無線連接顯示設備, Wifi連接顯示的物理屏幕
  4. VirtualDisplay: 虛擬顯示設備,如VR ,屏幕錄制

提供上層訪問的主要接口:

  • public Display[ ] getDisplays():獲取當前所有有效的logic display列表
  • public Display getDisplay(int displayId):根據displayId獲取logic display的信息
  • public void registerDisplayListener(DisplayListener listener, Handler handler):
    注冊顯示器監聽事件,用來監聽顯示器的新增,刪除,變更等事件
  • public void unregisterDisplayListener(DisplayListener listener):
    取消顯示器監聽事件

六、WindowManagerService

WindowManagerService是WindowManager的管理者,負責窗口的啟動、添加和刪除,WindowManager會監控窗口的生命周期、輸入事件、屏幕方向、旋轉、動畫、位置等多種狀態,同時會將所有窗口的元數據發送給SurfaceFlinger,SurfaceFlinger使用這些數據在屏幕上合成Surface。

在這里插入圖片描述


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40455.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40455.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過升級nginx完美修復nginx相關漏洞

目錄 前言1 安全評估報告的漏洞信息1.1 nginx漏洞概況1.2 nginx漏洞詳細信息1.3 安裝的軟件信息 2 問題分析3 Nginx從1.18版本升級到1.26版本的步驟與說明3.1 查看現有Nginx配置參數3.2 下載新版本Nginx3.3 配置新版本Nginx3.4 編譯新版本Nginx3.5 備份舊版本Nginx的二進制文件…

github 設置中文,親測有效

點進去 安裝 選上面第二個,不行再選第一個 GitHub - maboloshi/github-chinese: GitHub 漢化插件,GitHub 中文化界面。 (GitHub Translation To Chinese)

常見網絡攻擊方式及防御方法

1. DDOS攻擊(分布式拒絕服務攻擊) 概念:借助于C/S(客戶端/服務器)技術,將多個計算機聯合起來作為攻擊平臺,對一個或多個目標發動DDOS攻擊,從而成倍地提高拒絕服務攻擊的威力。防護方…

springboot 配置加密,jasypt加解密命令

位置:Maven倉庫中\org\jasypt\jasypt\1.9.3 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input123456 passwordmysalt algorithmPBEWithMD5andDES ----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot?…

sideloadly 蘋果自簽和sidestore手機續簽ipa記錄

sideloadly 地址:https://sideloadly.io/#download 直接安裝對應系統軟件,然后吧ipa 拖到里面續簽,缺點每7天需要電腦續簽 如果續簽保留數據需要對應的位置開啟 enable file sharing 勾選 和 bundle id 修改 注意的地方需要電腦和手機appi…

氣象觀測站:時刻注視著天空的變化

在廣袤無垠的地球上,氣象觀測站時刻注視著天空的變化,記錄著大自然的脈動。它們是我們理解和應對氣候變化、極端天氣事件的重要工具。 一、氣象觀測站的基本構成 氣象觀測站包括一系列的氣象儀器和設備,用于測量和記錄各種氣象參數。這些參數…

軟考《信息系統運行管理員》-2.5信息系統運維管理系統與專用工具

2.5信息系統運維管理系統與專用工具 信息系統運維管理系統功能框架 信息系統運維管理系統是站在運維管理的整體視角,基于運維流程,以服務為導向的業務 服務管理和運維管理支撐平臺,提供統一管理門戶,最終幫助運維對象實現信息系…

【AI原理解析】-AI native模型微調

目錄 一、模型微調的定義與重要性 二、模型微調的步驟 三、模型微調的優勢與挑戰 四、模型微調的應用場景 五、模型微調的未來發展方向 一、模型微調的定義與重要性 定義:模型微調是指在預訓練模型的基礎上,使用特定任務的數據對模型進行再訓練&am…

Zabbix 配置SNMP監控

Zabbix SNMP監控介紹 Zabbix提供了強大的SNMP監控功能,可以用于監控網絡設備、服務器和其他支持SNMP協議的設備。SNMP(Simple Network Management Protocol,簡單網絡管理協議)是一種廣泛用于網絡管理的協議。它用于監控網絡設備&…

CVPR 2024最佳論文分享:打破剛性的超分辨率圖像處理GNN

CVPR 2024最佳論文分享:打破剛性的超分辨率圖像處理GNN CVPR(Conference on Computer Vision and Pattern Recognition)是計算機視覺領域最有影響力的會議之一,主要方向包括圖像和視頻處理、目標檢測與識別、三維視覺等。近期&am…

分布式數據庫HBase:從零開始了解列式存儲

在接觸過大量的傳統關系型數據庫后你可能會有一些新的問題: 無法整理成表格的海量數據該如何儲存? 在數據非常稀疏的情況下也必須將數據存儲成關系型數據庫嗎? 除了關系型數據庫我們是否還有別的選擇以應對Web2.0時代的海量數據? 如果你也曾經想到過這些問題, 那么HBase將是…

C++: 左值引用和右值引用

目錄 概念: 理解: 左值引用,右值引用 左值引用能否給右值取別名? 右值引用能否給左值取別名? 引用的意義是什么? 左值和右值對自定義類型有什么區別嗎? move的妙用! 沒有優化…

LLMs之CriticGPT:CriticGPT的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之CriticGPT:CriticGPT的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 CriticGPT的簡介 1、簡介 2、CriticGPT的方法 2.1、CriticGPT的訓練方法 2.2、CriticGPT的批評生成方法 3、局限性 4、后續步驟 CriticGPT的安裝和使用方法 CriticGPT的案例應用…

“proxy_pass“ directive is duplicate

后面發現是nginx.conf里面proxy pass這里有兩個,注釋其中一個并重新運行即可!

AI并不是開發者的敵人,而是幫助他們實現更高效工作的得力助手。

AI是在幫助開發者還是取代他們? 在軟件開發領域,生成式人工智能(AIGC)正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是自動化測試,AI工具正在成為開發者的得力助手。然而,這也引發了對開發者職業前…

基于主流SpringBoot進行JavaWeb開發的學習路線

目錄 一、學習路線 (1)第一部分(Web前端開發的技術棧) (2)第二部分(Web后端開發) 二、學習之后必備的技能 三、學習Web開發的基礎與未來的收獲 學完這一類知識目標:…

Mybatis-01 原理

一. JDBC式編程 在 jdbc 編程中,我們最常用的是 PreparedStatement 式的編程,我們看下面這個例子; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注冊驅動Class.forName("com.mysql.jdbc.Drive…

Sping源碼總覽

源碼地址:https://github.com/spring-projects/spring-framework 倉庫地址:https://gitcode.net/qq_42665745/spring/-/tree/master 文章目錄如下: 實現一個簡單的Bean容器Bean 的定義、注冊、獲取Bean有參構造實例化Bean屬性注入資源加載器…

C++11使用std::future和std::promise實現線程同步和異步通信

std::future 和 std::promise 是 C11 引入的標準庫特性,用于實現線程間的異步通信和同步。它們提供了一種機制,使一個線程能夠生成一個值或異常,并讓另一個線程獲取這個值或異常。 (線程A中設置結果) std::promise 用于設置異步操作的結果(線…

【Jupyter Notebook與Git完美融合】在Notebook中駕馭版本控制的藝術

標題:【Jupyter Notebook與Git完美融合】在Notebook中駕馭版本控制的藝術 Jupyter Notebook是一個流行的開源Web應用程序,允許用戶創建和共享包含實時代碼、方程、可視化和解釋性文本的文檔。而Git是一個廣泛使用的分布式版本控制系統,用于跟…