RFC-0166:單一 UI 堆疊

RFC-0166:One UI Stack
狀態已接受
區域
  • 圖形
  • HCI
  • 查看系統
說明

清楚說明將所有 Fuchsia 產品移至單一圖形和輸入堆疊的計畫和政策。

問題
Gerrit 變更
作者
審查人員
提交日期 (年-月-日)2022-05-04
審查日期 (年-月-日)2022-06-03

摘要

本 RFC 說明 Fuchsia 平台中,與圖形、輸入和無障礙堆疊 (也稱為「UI 堆疊」) 所用舊版元件和 API 相關的記錄計畫。這份文件列出遷移的預定順序,讓所有 Fuchsia 產品設定都能使用相同的圖形、輸入和無障礙功能堆疊。此外,也說明這些轉換的測試標準。具體情形如下:

  • Root Presenter 元件已遭淘汰,請改用 Scene Manager。
  • 在搭載圖像的產品上,輸入管道程式庫會做為場景管理工具的一部分執行。
  • UI 元件之間的所有合約都應涵蓋在平台整合測試中,確保轉場期間行為一致。
  • Scenic 的 GFX API 已淘汰,並改用 Flatland。

提振精神

Fuchsia 平台目前提供多種

  • 處理使用者輸入內容
  • 建立圖形場景
  • 連結無障礙服務

目前,不同的 Fuchsia 產品設定會使用這項功能的不同子集。這會導致不同產品之間的偵錯作業混淆不清,難以進行。

本 RFC 旨在釐清哪些相關元件和 API 已淘汰、哪些是記錄計畫,並核准遷移作業的預定順序。可針對「RFC-0096:使用者輸入架構」和「RFC-0147:檢視系統」中討論的架構提供額外情境資訊。

利害關係人

誰會受到這項 RFC 是否通過的影響?(這個部分為選填,但建議填寫)。

協助人員:

cpu@google.com

審查者:

  • Scenic、執行階段整合:emircan@google.com、jjosh@google.com、 dworsham@google.com
  • 無障礙功能:lucasradaelli@google.com
  • 輸入:quiche@google.com、jaeheon@google.com

已諮詢:

yeg@google.com

社交:

我們已在內部與 Scenic、Input 和無障礙功能團隊,共同審查這項計畫的詳細版本。

詞彙解釋

  • Scenic - Fuchsia 平台元件,可處理圖像組合、焦點管理和圖像輸入的路由。fuchsia.ui.scenicfuchsia.ui.gfx
  • Flatland - 記錄計畫 Scenic API。在「fuchsia.ui.composition」fuchsia.ui.composition中找到。
  • 輸入管道 - Fuchsia 程式庫,可處理輸入事件的轉送和政策。可做為場景管理工具的一部分執行,或做為獨立元件執行。
  • 場景管理員:Fuchsia 平台元件,負責處理 Scenic 場景的設定和配置,以及啟動輸入管道。目前缺少部分功能,尤其是在無障礙方面。
  • 根層級的 Presenter:舊版 Fuchsia 平台元件,負責處理輸入路徑、設定,以及 Scenic 場景的設定。
  • 無障礙管理員 - 處理無障礙服務的 Fuchsia 平台元件。

設計

舊版與所需狀態

圖表:顯示舊版與所需 UI 堆疊,如下所述

在舊版 UI 堆疊中,Root Presenter 負責解讀驅動程式庫堆疊的輸入事件,並使用 GFX 例項化場景圖。Root Presenter 會將輸入事件分派至 Scenic,後者有時會將事件轉送至 Accessibility Manager。Root Presenter 會將指令傳送至 Accessibility Manager,以控制放大和色彩校正功能。Flutter 和 Chromium 會使用 GFX 建立檢視區塊。

在所需/未來的 UI 堆疊中,Scene Manager 負責解讀驅動程式庫堆疊的輸入事件,並使用 Flatland 例項化場景圖。輸入管道會例項化為 Scene Manager 元件的一部分,並將輸入事件分派至 Scenic。Scenic 有時會將輸入事件轉送至 Accessibility Manager。場景管理工具會將指令傳送至無障礙管理工具,以控制放大和色彩校正功能。Flutter 和 Chromium 會使用 Flatland 建立檢視區塊。虛擬鍵盤控制器是獨立元件,只負責傳遞螢幕小鍵盤狀態的相關訊息。

異動內容

淘汰根簡報者

場景管理和輸入功能將從 Root Presenter 移除,並重新命名為「虛擬鍵盤管理員」,以反映剩餘功能。這項作業會移除大量未經測試的舊版程式碼。

Scene Manager 會實作目前 Scene Manager 不支援的任何 Root Presenter 功能 (例如無障礙放大)。

整合測試

現在,UI 堆疊的所有功能 (包括圖像、不同形式的使用者輸入和無障礙功能),都必須通過密封整合測試,確保平台元件之間的合約維持穩定。

GFX 至 Flatland

所有對 GFX API 的參照和實作項目都會從 fuchsia.git 中移除。GFX 是舊版 3D API,比 Fuchsia 目前支援的用途複雜許多。移除這項功能可簡化系統,並移除一大部分難以理解的 API 介面。

這也讓執行階段實作項目 (Flutter、Chromium) 能從程式碼集移除 GFX 支援。

廢止順序

如要將所有產品移至相同的所需設定,我們必須變更元件拓撲 (將 Root Presenter 替換為 Scene Manager),以及使用的 API (GFX 與 Flatland)。為確保圖形 API 轉換的測試涵蓋範圍完善,我們將先讓所有產品採用正確的元件拓撲。完成後,我們會將 GFX 上的所有剩餘產品轉移至 Flatland。

實作

在所有階段,遷移作業都應由建構標記控管,方便進行手動測試和復原。

里程碑 0 (已完成):僅限工作站的 Flatland

工作站設定已於 2022 年第 1 季改用 Flatland 進行圖像處理。

里程碑 1 (已完成):其他產品移至輸入管道

自 2022 年第 2 季起,所有其他 Fuchsia 產品都改用 Input Pipeline 進行輸入事件路徑設定 (而非 Root Presenter)。在沒有 SceneManager 的產品中,它會暫時以獨立元件的形式執行。

里程碑 2:將所有產品轉移至場景管理工具

目前 Scene Manager 缺少 Root Presenter 的許多功能。我們正在努力讓 Scene Manager 的功能與 Root Presenter 相同,進度請見 https://fxbug.dev/42181047。完成這項作業,且所有功能都通過平台整合測試後,我們就會將其餘產品改用 Scene Manager + GFX。

轉移完成後,Root Presenter 中的輸入和場景管理程式碼就會移除。Root Presenter 的虛擬鍵盤控制器功能將維持不變,但元件會重新命名,以反映其減少的責任集。

里程碑 3:將其餘產品轉移至 Flatland

Flatland 還有其他工作,涵蓋 GFX 支援的所有功能。這項工作會追蹤 https://fxbug.dev/42175822。這項作業完成後,且平台整合測試完全涵蓋所有項目,我們就會將其餘產品轉移至 Flatland。

這項功能穩定推出後,GFX 的 API 和實作項目可能會移除。請注意,這包括 Scenic 元件中的程式碼,以及多個 UI 架構中的整合程式碼。

效能

由於 Flatland 的效率提升,里程碑 3 可能會改善部分產品設定的效能。如果 Flatland 可以將合成作業委派給螢幕控制器 (也就是不涉及 GPU),就會發生這種情況,這適用於某些裝置類型。您應在每次轉換期間監控成效,但成效預期不會變差。

安全性和隱私權注意事項

本 RFC 不會帶來任何新的安全性或隱私權疑慮,這些疑慮都已在Flatland API 審查中涵蓋。 系統不會收集任何使用者資料。

測試

在遷移作業的每個階段,我們都會針對受影響的功能進行完整整合測試,確保涵蓋所有情況,再進行轉換。由於 Root Presenter 過去缺乏這類涵蓋範圍,因此這項功能應能全面提升 UI 堆疊的涵蓋範圍。

說明文件

里程碑完成後,請從文件中移除對 Root Presenter 和 GFX 的參照。

缺點、替代方案和未知事項

這項遷移作業十分複雜,需要耗費多個季度的時間,且工程團隊必須投入大量心力才能完成。

不執行任何動作

我們可能會在所有使用舊版功能的產品生命週期內,繼續維護這些功能。由於平台其他部分持續變更,加上缺乏全面測試,因此這項維護作業歷來相當龐大。多個 UI 堆疊也會造成混淆,導致不確定特定產品實際執行的程式碼。雖然遷移作業成本高昂,但隨著時間推移,維持現狀需要更多心力,且成效不彰,工程速度也會受到影響。

優先轉換至 Flatland

如要將 Flatland 支援功能新增至 Root Presenter,需要大量作業。由於這段程式碼缺乏完整的測試涵蓋範圍,因此風險很高,而且需要大量拋棄式工作。

既有技術和參考資料