RFC-0094 - Carnelian Virtcon

RFC-0094:Carnelian Virtcon
狀態已接受
區域
  • 一般
說明

將 Virtcon 從 C++ 程式轉換為以 Rust 為基礎的 Carnelian 應用程式。

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

摘要

本文提出了一個計畫,將虛擬主控台 (Virtcon) 從使用自訂低階圖形程式庫 (請參閱 gfx) 的 C++ 程式轉換為以 Rust 為基礎的 Carnelian 應用程式。在這個過程中,用於 Workstation 和 Terminal 產品的終端機應用程式程式碼將與 Virtcon 整合,而 Virtcon 將可使用先進的向量圖形和可調整大小的文字,並提供高品質的反鋸齒效果。

提振精神

降低複雜度和程式碼

Fuchsia 目前維護兩種終端機實作方式:

  1. Virtcon。
  2. 工作站產品的終端機應用程式。

Virtcon 會實作自己的有限軟體算繪程式庫,而終端機應用程式則由 Carnelian 的進階向量圖形算繪後端提供支援。這些實作之間有大量程式碼重複,減少重複程式碼對平台而言是淨正面。Virtcon 目前使用的舊版圖形程式庫 (gfx) 可以刪除,而且在完成這項轉換後,我們可以減少與顯示器控制器 API 互動的方式。

新功能

以 Carnelian 為基礎的 Virtcon 將繼續支援無閃爍的單緩衝區模式算繪,同時在支援充足的顯示驅動程式庫裝置上,引進無撕裂的雙緩衝區輸出功能。這可改善視覺外觀,並與某些硬體 (例如 FEMU) 整合得更好,因為這些硬體不太支援單一緩衝區模式。

可調整大小的文字

由於 Carnelian 支援高效算繪可縮放向量圖形 (包括文字),因此調整控制台文字大小以符合顯示密度,就變得輕而易舉。

啟動顯示畫面

轉換至 Carnelian 後,Virtcon 將會變得更先進,並啟用啟動畫面功能,讓現有和未來的產品都能從中受益。舉例來說,您可以在啟動期間顯示動畫,並且在使用者按下特殊鍵或發生錯誤時隱藏 debuglog。Carnelian 支援 rive 動畫,可讓您以無縫的方式設計及整合 UI 素材資源,同時維持低資源使用量和高效轉譯。

設計

Virtcon 用於啟動,因此必須繼續為此用途提供功能。我們不會接受任何會妨礙這項功能的設計變更。

Carnelian 可讓應用程式在沒有 Scenic 或 Root Presenter 的情況下執行,並在無法使用 Vulkan 的情況下提供高效的軟體轉譯器。復原 UI 已開始使用此功能,而且已完成讓以 Carnelian 為基礎的應用程式取代 Virtcon 所需的額外步驟。在沒有 Scenic 的情況下執行的 Carnelian 應用程式,會以類似於舊版 Virtcon 的方式,直接與顯示和輸入驅動程式通訊。

以 Carnelian 為基礎的 Virtcon 將設計成可盡可能重複使用終端機應用程式的程式碼。

Fuchsia 開發人員應該不會發現這項轉換作業有何顯著差異。硬體需求和用於與 Virtcon 介接的 FIDL API 不會變更。

實作

以 Carnelian 為基礎的 Virtcon 會類似於復原 UI 應用程式,但會以 Virtcon 用戶端而非 Primary 用戶端連線至顯示器控制器 (請參閱 display-coordinator API 瞭解差異)。

只要將所有共用邏輯實作為兩個元件都能使用的 Rust 程式庫,就能盡可能地重複使用 Terminal 應用程式的程式碼。在某些情況下,這表示將終端機程式碼擷取至程式庫。

我們將開發以 Carnelian 為基礎的文字格線,為終端機應用程式和 Virtcon 提供動力。這個文字格線會利用 Carnelian 支援部分螢幕更新的功能,提供與舊版 Virtcon 相符的效能。

成效

效能和資源使用量是這個專案的關鍵要素。在這個轉換過程中,效能和記憶體用量不得大幅下降。雙緩衝功能預計會增加記憶體用量,但這項功能應為選用功能。

以下項目的差異不應太大:

  • CPU 用量。
  • 記憶體用量。
  • 建構時間。

Virtcon 的二進位檔大小預計會增加,但應保持在 1 MiB 以下。

測試

Virtcon 的測試涵蓋率應維持不變或改善。所有新的 Rust 程式碼都應有單元測試,而現有的整合測試應轉換為新版 Virtcon。

說明文件

在這個階段,我們打算透過這個 RFC 和 README.md 說明以 Carnelian 為基礎的 Virtcon。