RFC-0094 - Carnelian Virtcon

RFC-0094:卡內利安維特康
狀態已接受
區域
  • 一般
說明

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

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

摘要

本文件提議將虛擬主控台 (Virtcon) 從含有自訂低階圖形程式庫 (請參閱 gfx) 的 C++ 程式轉換為以 Rust 為基礎的 Carnelian 應用程式。工作站和終端機產品所用的終端機應用程式程式碼會在過程中與 Virtcon 整合,而且 Virtcon 可以使用進階向量圖形和可擴充的文字,並搭配高品質的反鋸齒功能。

提振精神

減少複雜度和程式碼

Fuchsia 目前正在進行兩種終端機實作:

  1. Virtcon。
  2. Workstations 產品的終端機應用程式。

Virtcon 導入了自己的有限軟體算繪程式庫,而 Terminal 應用程式則採用 Carnelian 先進的向量圖形算繪後端。這些實作項目之間大量重複程式碼,而減少,為平台帶來淨正面效益。您現在可以刪除 Virtcon 使用的舊版圖形庫 (gfx),進而減少轉換完成後與顯示控制器 API 互動的方式。

新功能

Carnelian 的 Virtcon 會繼續支援不閃爍的單一緩衝區模式算繪功能,同時也支援具備足夠顯示驅動程式庫程式的裝置,以支援流暢的雙緩衝模式輸出內容。這可以改善視覺外觀,並能更好地整合某些硬體 (例如 FEMU),因為這類硬體 (例如 FEMU) 無法支援單一緩衝區模式。

可縮放文字

Carnelian 的支援可有效算繪可擴充的向量圖形 (包括文字),因此輕而易舉地調整主控台文字大小,以便配合螢幕密度。

啟動顯示畫面

轉換至 Carnelian 將翻新 Virtcon,並讓現有和日後的產品都能受益。舉例來說,動畫可在啟動期間顯示,且除非使用者按下特殊鍵或發生錯誤,否則可隱藏偵錯記錄。Carnelian 對 rive 動畫的支援可讓您順暢地設計及整合 UI 資產,同時維持低資源用量及有效率地轉譯。

設計

Virtcon 可用於啟動,而在這個用途中,其必須仍可持續運作。任何妨礙您提出的設計變更

Carnelian 允許應用程式在沒有 View 或 Root Presenter 的情況下執行,而在無法使用 Vulkan 的情況下更具備高效軟體轉譯器。復原 UI 已使用這個項目,而執行 Carnelian 應用程式取代 Virtcon 所需的其他步驟已完成。Carnelian 應用程式會在沒有 View 的情況下直接與螢幕和輸入驅動程式進行通訊,方法與舊版 Virtcon 類似。

我們將推出以 Carnelian 為基礎的 Virtcon,盡可能提高透過終端機應用程式重複使用程式碼的情況。

Fuchsia 開發人員應該不會注意到這項轉換的明顯差異。用於與 Virtcon 介面的硬體需求和 FIDL API 維持不變。

實作

Carnelian 型 Virtcon 與復原 UI 應用程式相似,但以 Virtcon 用戶端的形式連線至顯示控制器,而非 Primary 用戶端 (如要進一步瞭解差異,請參閱 Display-coordinator API)。

如要以終端機應用程式重複使用程式碼,請實作所有共用邏輯做為兩個元件都能使用的 Rust 程式庫。在某些情況下,這意味著將終端機程式碼擷取到程式庫中。

我們將開發以 Carnelian 為基礎的文字格線開發,以支援 Terminal 應用程式和 Virtcon。此文字格線將利用 Carnelian 對部分螢幕更新的支援,提供與舊版 Virtcon 相符的效能。

效能

效能和資源用量是這項專案的重要面向,在此轉換過程中,效能和記憶體用量必須不會大幅降低。雙重緩衝作業預計會增加記憶體用量,但該功能應為選用功能。

下列項目之間應沒有顯著差異:

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

Virtcon 的二進位檔大小預計將有所增加,但應維持在小於 1 MiB。

測試

Virtcon 的測試涵蓋範圍應維持不變或改善。所有新的 Rust 程式碼應該都會有單元測試,現有的整合測試也應轉換成新版 Virtcon。

說明文件

在這個階段,我們計劃透過這個 RFC 和這個 README.md 記錄卡內利亞的 Virtcon。