由淺入深學習新模塊之Window_manager(一)
前言:
作為一個開發(fā)人員,隨著時代和行業(yè)的發(fā)展,總會不斷的接觸不同的新任務,新模塊,這就需要不斷的學習與沉淀。因為工作的需求,筆者需要對一些自己負責模塊之外的模塊進行學習和熟悉,對此筆者把這個學習過程以該系列文章做一個記錄分享給大家。
學習新模塊的總體思路:
學習的最好的方式就輸出,這個是我寫這篇文章的原因。
次好的方式是帶著疑問,通過學習與思考,在解決自己疑問的過程中獲得知識與認知,最后恍然大悟的時候獲得學習的滿足感。
本篇作為學習一個新模塊的第一篇,主要是對window_manager模塊建立一個初步的,總體的認知。具體需要解決的疑問如下:
1. window_manager是什么?
2. window_manager模塊在整個系統(tǒng)中做什么?
3. window_manager自己的總體的框架是什么?
帶著這幾個疑問,我們進入正題:
window_manager是什么?
我們可以在openHarmony,IOS,Android,windows等圖形界面系統(tǒng)中都可以看到一個名為窗口管理的框架模塊,至于為什么叫window_manager,而不是什么door_manager,desktop_manager,原因就是長期占據圖形界面系統(tǒng)霸主地位的就是微軟的windows,受眾最廣,使用的開發(fā)者最多,導致后續(xù)的系統(tǒng)的設計者和開發(fā)者重復造輪子的時候總會借鑒這個成熟的框架。
我們可以參考下微軟在前幾代圖形操作系統(tǒng)中的主要特點來理解下window_manager這個模塊的地位:
1983年,微軟為IBM涉及的首款windows程序:
特點:多窗口,可改變大小窗口
1985年,微軟發(fā)布windows首個版本windows1.0:
特點:窗口不可重疊,但是可以平鋪,窗口不可以覆蓋下方圖標區(qū)域。
1987年,微軟發(fā)布windows2.03:
特點:窗口可以改變大小,可以重疊,添加部分窗口控制功能。
到了windows3.0和windows3.1時代,加入了大量的圖形界面,單純的從界面上看已經和現代的windows操作系統(tǒng)非常接近,并成為當時兼容機的標配,代表圖形操作系統(tǒng)進入成熟發(fā)展期。而從發(fā)展的歷程上看,DOS這類非圖形界面向圖形界面的變遷過程中,window視窗的概念被孕育和發(fā)展,窗口的管理系統(tǒng)或者說框架,即window_manager框架,也成為了現代圖形操作系統(tǒng)中核心模塊。
本章小結:
- window_manager是現代圖形操作系統(tǒng)的核心模塊。
- window_manager模塊迄今已有40年左右的發(fā)展史,雖然隨著技術的進步,但是窗口管理的核心概念如最初的窗口大小控制,布局控制,窗口屬性等一直沿用至今,了解下歷史可以讓我們學習該模塊更好的舉一反三。
window_manager模塊在整個系統(tǒng)中做什么
(我們現在學習的模塊都率屬于OpenHarmony開源操作系統(tǒng),系統(tǒng)及框架均以OpenHarmony為準)
我們想去了解一個模塊,需要了解這個模塊在整個系統(tǒng)的位置,這個模塊的功能有哪些,緊密關聯的模塊有哪些,給其他模塊提供什么樣的支撐,以及自身的功能集的實現需要其他模塊為自己提供怎樣的支持等等等等。
針對以上的問題,我們一個個來探究:
- window_manager模塊在整個系統(tǒng)中的位置:
?
window_manager模塊又稱為窗口管理子系統(tǒng),它與graphic子系統(tǒng)共同組成了OpenHarmony三大核心子系統(tǒng)中的圖形子系統(tǒng)。
圖形子系統(tǒng):
graphic子系統(tǒng):
提供了圖形接口能力,提供圖形的 NDK(native development kit,原生開發(fā)包)能力,包括:WebGL、Native Drawing的繪制能力、OpenGL 指令級的繪制能力支撐等。
窗口管理子系統(tǒng):
提供窗口管理和Display管理的基礎能力,是系統(tǒng)圖形界面顯示所需的基礎子系統(tǒng)。
- 窗口管理子系統(tǒng)的具體功能:
按照官網的描述,窗口管理子系統(tǒng)
窗口管理:窗口提供管理窗口的一些基礎能力,包括對當前窗口的創(chuàng)建、銷毀、各屬性設置,以及對各窗口間的管理調度。
DisPlay:屏幕屬性提供管理顯示設備的一些基礎能力,包括獲取默認顯示設備的信息,獲取所有顯示設備的信息以及監(jiān)聽顯示設備的插拔行為。
- 與其他模塊的關系
窗口管理子系統(tǒng)接口對開發(fā)者不可見,主要是給其他幾個模塊調用,如AAFWK(原能力子系統(tǒng))、多媒體、相機等。
對于應用開發(fā)者來說,接觸最多的是ability,而ability頁面內容由窗口進行展示,也就是ability必然會使用該模塊的接口去創(chuàng)建window對象。
對于上層UI框架,其向圖形子系統(tǒng)申請窗口,并使用2D圖像繪制引擎skia向窗口中繪入畫面;而窗口附著在ability上,ability由元能力子系統(tǒng)AAFWK進行管理;
window_manager框架本身則提供創(chuàng)建、銷毀窗口的接口,以及窗口的顯示、隱藏、切換、縮放等動作等。
對于下層驅動程序,圖形子系統(tǒng)圖像的最終顯示由驅動決定。
window_manager自身的結構:
從window_manager結構可以很清晰的看出window_manager模塊分成窗口管理和Display兩塊,均使用Client/Server模式,各自細分模塊的功能如下:
- Window Manager Client
應用進程窗口管理接口層,提供窗口對對象抽象和窗口管理接口,對接原能力和UI框架。
- Display Manager Client
應用進程Display管理接口層,提供Display信息抽象和Display管理接口。
- Window Manager Server
窗口管理服務,提供窗口布局、Z序控制、窗口樹結構、窗口拖拽、窗口快照等能力,并提供窗口布局和焦點窗口給多模輸入
窗口布局:重疊,平鋪等
Z序控制:窗口可以重疊的前提就要求有Z序控制,Z序可以理解為在傳統(tǒng)的以X,Y為坐標的屏幕中的Z軸的序列,來表示窗口在屏幕這個平面堆疊的順序。
窗口樹結構:WindowRoot,WindowNode就是管理窗口樹結構的模塊。
窗口拖拽:窗口拖拽事件處理。
窗口快照:這個是智能手機興起之后流行的功能,用于多開應用窗口的時候便捷查看和切換應用或者窗口。
我們對比下window發(fā)布的前幾個版本窗口的功能,可以看到窗口管理的主要功能這幾十年來并沒有多少變化,包括筆者查看的一篇寫于2008年的windows系統(tǒng)的窗口管理的技術文章,于今也是大同小異。
- Display Manager Server
Display管理服務,提供Display信息、屏幕截圖、屏幕亮滅和亮度處理控制,并處理Display與Screen映射關系
對其他一些概念的解釋:
Display,Screen,Window:
這三個概念很容易混淆,我們可以參考下Linux下圖形管理中的定義:
Display :
若干個屏幕(screen)以及一套輸入設備(鍵盤和鼠標)構成一個display,display概念的關鍵就是有一套完整的輸入輸出。屏幕不一定必須是一個,可以有多個,各個屏幕可以用來顯示相同的內容,也可以用來構成矩陣顯示一個大屏幕的內容。
Screen :
Screen的層次在display之下,是一個實際的Monitor或是Device。一個screen對應一個根窗口(root window),根窗口的大小與screen相同。
Window :
Window是比screen還要小一級的概念了。Window是有樹形繼承關系的,每一個屏幕上都對應有一個“窗口樹”,樹的根就是root window,即根窗口,它沒有父窗口;除此之外,所有window都有父窗口。一個窗口還可能有子窗口,但并不是必須的。
參考文獻:
- ??https://gitee.com/openharmony/window_window_manager?? 《window_manger倉介紹》
- ??https://www.open-open.com/news/view/185d270?? 《圖說Windows演變史:1985-2012》
總結
本文介紹了地址翻譯模式以及相關的配置。下一篇文章將繼續(xù)對loongarch虛擬內存系統(tǒng)中的其他部分。