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 目前維護兩種終端機實作方式:
- Virtcon。
- 工作站產品的終端機應用程式。
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。