RFC-0166:單一 UI 堆疊

RFC-0166:一個 UI 堆疊
狀態已接受
領域
  • 顯示卡
  • HCI
  • 查看系統
說明

釐清將所有 Fuchsia 產品遷移至單一圖像和輸入堆疊的計畫和政策。

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

摘要

這份 RFC 清楚說明瞭 Fuchsia 平台中圖形、輸入和無障礙堆疊 (也稱為「UI 堆疊」) 使用的舊版元件和 API 的記錄計畫。其中概略說明遷移的規劃順序,以便使用相同的堆疊、輸入和無障礙功能取得所有 Fuchsia 產品設定。並說明這些轉換的測試標準。具體違規事項如下:

  • 淘汰 Root Presenter 元件,改用 Scene Manager。
  • 輸入管道程式庫會在場景管理工具中,處理含有圖形的產品。
  • 平台整合測試應涵蓋 UI 元件之間的所有合約,以確保轉換時的行為一致。
  • 我們淘汰了 View 的 GFX API,並改用 Flatland。

提振精神

Fuchsia 平台目前有多種

  • 正在處理使用者輸入內容
  • 建立圖形場景
  • 接上無障礙服務

不同的 Fuchsia 產品設定目前使用不同的部分這項功能。這會導致混淆,令不同產品難以偵錯。

此 RFC 旨在釐清哪些涉及的元件和 API 已淘汰 (這些是目前記錄的計畫),並依據遷移的預計順序做出調整。這提供 RFC-0096:使用者輸入架構RFC-0147:檢視系統討論的架構,提供更多背景資訊。

相關人員

誰有權規範這份 RFC?(本節為選用,但建議提供)。

講師:

cpu@google.com

審查者:

  • 風景優美的執行階段整合:emircan@google.com、jjosh@google.com、dworsham@google.com
  • 無障礙工具:lucasradaelli@google.com
  • 輸入:quiche@google.com、jaeheon@google.com

諮詢時間:

yeg@google.com

社會化:

此計畫的詳細版本是由視圖、輸入和無障礙團隊進行內部審查。

詞彙解釋

  • Scenic - 這個 Fuchsia 平台元件會處理圖形組合、聚焦管理和圖形輸入轉送。fuchsia.ui.scenicfuchsia.ui.gfx
  • Flatland - 記錄取景 API 的計劃。在 fuchsia.ui.composition 中發現。
  • 輸入管道 - 處理輸入事件轉送和政策的 Fuuchsia 程式庫。可做為場景管理工具的一部分執行,或做為獨立元件執行。
  • 場景管理員 - 這個 Fuchsia 平台元件可處理場景的配置和設定,以及啟動輸入管道。目前缺少部分功能,尤其是在無障礙功能方面。
  • Root Presenter - 舊版 Fuchsia 平台元件,負責處理風景影像的輸入和設定和設定。
  • 無障礙管理員 - 負責處理無障礙服務的 Fauchsia 平台元件。

設計

舊版與所需狀態

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

在舊版 UI 堆疊中,Root Presenter 會負責解讀驅動程式庫堆疊中的輸入事件,並使用 GFX 將場景圖執行個體化。Root Presenter 會將輸入事件分派給 View,而 Root Presenter 有時會將其轉遞給無障礙功能管理工具。Root Presenter 傳送指令給無障礙管理員,藉此控制放大和色彩校正。Flutter 和 Chromium 會使用 GFX 建立檢視畫面。

在所需/日後的 UI 堆疊中,Scene Manager 會負責解讀驅動程式庫堆疊的輸入事件,並使用 Flatland 將場景圖執行個體化。輸入管道會作為場景管理工具元件的一部分進行例項化,並將輸入事件分派到 View。「段落」功能有時會將輸入事件轉送至無障礙功能管理工具。場景管理工具會傳送指令至無障礙管理工具,以控制放大和色彩校正。Flutter 和 Chromium 會使用 Flatland 建立檢視畫面。虛擬鍵盤控制器是獨立元件,只負責傳送螢幕鍵盤狀態的相關訊息。

異動內容

淘汰根層級簡報者

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

任何目前不支援場景管理工具中不支援的 Root Presenter 功能 (例如無障礙功能放大) 都會在場景管理工具中實作。

整合測試

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

GFX 至 Flatland

所有對 GFX API 的參照和實作都會從 fuchsia.git 中移除。GFX 是一種舊版 3D API,比 Fuchsia 現今的用途承諾更複雜。移除此元件可簡化系統,並移除難以理解的 API 介面區塊。

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

淘汰順序

如要將所有產品移至相同的所需設定,我們必須變更元件拓撲 (使用 Scene Manager 取代 Root Presenter) 和使用的 API (GFX 與 Flatland)。為了針對圖形 API 轉換提供可靠的測試涵蓋範圍,我們會先根據正確的元件拓撲讓所有產品保持一致。完成這些步驟後, GFX 中其餘的產品都會轉換至 Flatland

實作

在所有階段的遷移作業中,都應使用建構旗標來控管,以便手動測試和復原。

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

2022 年第 1 季,我們將工作站設定移至 Flatland。

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

截至 2022 年第 2 季,所有其他 Fuchsia 產品都改用輸入管道進行輸入事件轉送 (而非 Root Presenter)。在沒有 Scene Manager 的產品中,它會暫時以獨立元件的形式執行。

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

目前場景管理工具缺少根展示器中的一些功能。https://fxbug.dev/42181047 會追蹤將場景管理員導入功能與 Root Presenter 功能一致的工作。完成後,所有功能都會經過平台整合測試。我們會轉換其餘產品,以便使用 Scene Manager + GFX。

轉換完成後,系統會移除 Root Presenter 系列中的輸入和場景管理程式碼。Root Presenter 的虛擬鍵盤控制器功能仍會保留,且元件會重新命名,以反映縮減的責任組合。

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

在 Flatland 中還會執行額外的工作來涵蓋 GFX 支援的所有功能。系統會在 https://fxbug.dev/42175822 中追蹤這項工作。完成這項工作並充分進行平台整合測試後,我們會將其餘產品轉換至 Flatland。

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

效能

由於 Flatland 的效率,里程碑 3 可以提升部分產品設定的效能。當 Flatland 能夠將合成項目委派到螢幕控制器 (即不採用 GPU) 時,這是可預期的情況,但某些裝置類型會支援這項功能。每次轉換時都應監控效能,但應該不會造成任何惡化。

安全性和隱私權注意事項

此 RFC 不會導入 Flatland API 審查中尚未涵蓋的新安全性或隱私權疑慮。系統不會收集任何使用者資料。

測試

在遷移的每個階段,我們會針對受影響功能的完整整合測試涵蓋範圍進行轉換。由於 Root Presenter 向來缺少這類涵蓋範圍,因此應提高 UI 堆疊的整體涵蓋率。

說明文件

完成里程碑時,應從說明文件中移除 Root Presenter 和 GFX 的參照。

缺點、替代項目和未知

這是複雜的多季遷移作業,工程需要大量精力才能完成。

不執行任何動作

針對使用舊版功能的所有產品,我們可以繼續保留舊版功能。以往,這類維護工作一直都是因平台其他的持續變更和缺乏全面測試所致。此外,多個 UI 堆疊也會造成混淆,導致不確定特定產品實際執行的程式碼為何。雖然遷移的成本很高,但維護現況也需要投入更多心力,且結果較差,工程速度也相對低。

先轉換至 Flatland

這種做法需要耗費大量心力,才能將 Flatland 支援項目新增至 Root Presenter。由於這段程式碼缺少全方位測試涵蓋範圍,因此具有風險,且需要大量丟棄工作。

優先藝術與參考資料