風景優美的 Fuchsia 系統合成器

簡介

View 是一項系統服務,主要負責管理全球場景圖,由平台中的所有應用程式與 SysUI 共用。此場景圖可以協調應用程式在畫面上顯示內容的方式、如何接收使用者的輸入事件,並支援其他 Fuchsia 系統元件的功能。這是用戶端之間幾何/拓撲關係的「可靠資料來源」。

風景優美的責任

構圖

View 提供 API 讓用戶端 (應用程式、SysUI) 操控全球場景圖的子圖表,該圖表位於 View 根層級。在這個子圖表中,可以附加圖像內容,以及嵌入其他元件提供的「Views」。這種嵌入是遞迴性:元件連結至其父項的方式,與連結至其子項元件的方式相同。

轉譯/顯示

為達到最佳效率,Sight 可直接將用戶端映像檔直接顯示在顯示控制器,而不必啟動 GPU!不過,基於多種原因 並非每次都會發生風景會動態決定每個影格,決定是否直接顯示用戶端提供的圖片,或是否必須與 GPU 合併顯示。

視覺效果

View 負責的是視覺效果,而這些視覺效果無法融入用戶端提供的內容。例如,Sview (已淘汰) 的 GFX API 可讓用戶端在 3D 場景中插入內容,讓不同應用程式中的物件可以投射陰影並反射光線。同樣地,Flatland 旨在支援「群組不透明度」等效果。

目前這類效果的清單有限,不過日後會增加。

顯示管理

Fuchsia 的顯示控制器 API 只能使用一個連線用戶端。由於 Scnic 需要以低延遲的方式在每個影格顯示內容,所以要與螢幕控制器的唯一連線就適合使用 Scenic。但是,這表示對於需要與顯示控制器互動的任何其他方,Sight 必須充當 Proxy。舉例來說,SysUI 必須讓使用者能夠: - 查看已連線的畫面 - 選擇每個螢幕的解析度和刷新率 - 在虛擬桌面中排列螢幕的相對位置

影格排程

可視性、用戶端和顯示控制器必須全都配合排程影格,以將延遲時間、記憶體用量等降到最低。觀察結果如下: - 在共用資源可供重複使用時通知 (例如,當用戶端可以安全轉譯至先前使用的緩衝區時,通知他們) - 向用戶端傳遞必要期限,讓內容顯示在下一個 Vsync 緩衝區中,以便提前顯示需要的內容,包括 Vulkan - 透過 Vulkan 退出,

影格排程會進一步探討這個主題。

輸入

應用程式在場景圖表中的位置,會影響輸入事件 (例如滑鼠觸控事件) 轉送至該事件的方式。例如: - 用戶端會在其檢視畫面的座標系統中傳遞輸入事件;Sight 會將輸入管道的傳入事件轉換為適當的座標系統。 - 場景圖拓撲中的位置非常重要:另一個「位於上方」的檢視畫面會偏好接收該事件。也就是說,「輕觸並拖曳」這類持續性手勢會將所有手勢事件傳送至相同的目標檢視畫面,即使使用者的手指移動到目標檢視畫面的邊界外亦然。

無障礙功能

風景提供功能,可供無障礙功能管理員用來實作各項功能。舉例來說,Sky 會顯示場景圖的全球檢視畫面,而該圖表支援「螢幕閱讀器」功能。也支援放大視覺障礙使用者

診斷

瀏覽介面提供診斷介面,協助開發人員對模型進行偵錯及測量效能。

擷取螢幕畫面

此模式支援個別螢幕截圖,以及持續擷取螢幕畫面。

場景圖 API

風景會導入各種 FIDL 通訊協定,藉此執行上述責任。由於場景圖表是主要作用,用於操控場景圖表的 API 是最重要的之一。

要看兩個場景圖 API 嗎?為什麼?

目前的情況十分複雜,因為基於歷史因素,Sight 支援兩種「種類」的場景圖、已淘汰的 Gfx API,以及更「具前瞻性」的 Flatland API。

風景活動支援一次將一張場景圖執行個體化:Gfx 場景圖或扁平區場景圖可以同時出現,但兩者只能擇一。

未來場景圖 API

未來可能會使用其他 API 操控場景圖表。差別在於,不會每個 API 都參照不同類型的場景圖,但這些 Future API 與其他 UI 不相容,而是在設計上能與 Flatland API 完美搭配組合。舉例來說,視覺特效 API 可用來為 Flatland 場景圖中的子樹套用模糊效果。

風景優美及富赫西亞

Fuchsia 內部的景觀圖表

Views 的 API 可讓所有用戶端將 UI 插入全域場景圖。使用 Flutter UI 架構的程序是一個範例;較低層的 Flutter 稱為 Flutter Engine,包含負責與 View 通訊的程式碼。

風景包含數個內部子系統。FlatlandGfx 之一擁有場景圖表,並負責轉譯。輸入負責將輸入事件轉送給用戶端,這還涉及協調跨用戶端的手勢辨識,以及管理焦點。

Scene Manager 是負責呈現系統 UI 的獨立服務,使用 Views API 可以建立景觀場景圖表的根目錄、嵌入視窗管理員的 UI,以及使用其輸入管道程式庫讀取輸入事件,並持續將其轉送至 View。

景像是 Vulkan 圖形驅動程式和系統顯示驅動程式的用戶端。

工作階段

View 的兩種組合通訊協定 (Flatland 和 Gfx 有共通性);請參閱連結頁面,瞭解彼此相關的詳細資料。

在這兩種情況下,「工作階段」都是指用戶端用來達成下列目標的 FIDL 管道: - 透過相互協議建立與其他工作階段的連結,以參與「View Tree」計畫。- 提供可由父項元件嵌入的檢視畫面 - 反之,透過其專屬工作階段嵌入其他元件提供的子項檢視畫面 - 指定視覺內容並連結至全域場景圖 - 指定視覺內容,包括: - 圖片 - 空間轉換 - 視覺效果 (例如模糊或「將畫面不透明度」群組) - 將影格信號與其他顯示畫面的 Vulkan 簡報同步處理到其他顯示影格速率,

時段提供與全域場景圖表之間的「保留模式」連結。例如,如果元件具有等距,View 會繼續顯示最近提供的影格。

當工作階段遭到刪除時,其在其他工作階段中的子項和父項檢視畫面的連結會中斷,而且「Sview」會釋出與該時段相關聯的所有記憶體和其他資源。