RFC-0174:扁平大地擴充

RFC-0174:在平地內擴大規模
狀態已接受
領域
  • 圖形
說明

定義在 Flatland 如何處理圖形資源調度作業。

問題
毛皮變化
作者
審查人員
提交日期 (年-月-日)2022-06-02
審查日期 (年-月-日)2022-07-01

摘要

此 RFC 說明瞭 Flatland。像 Fuchsia 的系統合成器一樣, 透過 Flatland 的 SetScale() 方法。可以使用浮點比例因數, 產生的圖片就不會發生子像素轉譯的情形僅限 Flatland 執行個體 手錶的像素比例值。除了規模設計 這個 RFC 定義了幾個用來參照像素空間的常用術語。

提振精神

許多 UI 功能通常都需要圖形縮放作業, Flatland 是完整的系統合成器,應提供此項目。其中三個 。

上取樣

向上取樣會增加 Flatland 執行個體或 Image 的轉譯大小。 例如放大功能。可透過下達語音指令來完成放大 示範如何對 Flatland 用戶端應用程式輸出內容進行進階取樣。

縮小取樣

降低取樣功能會減少 Flatland 執行個體或 圖片。舉例來說 GNOME 的活動總覽。 圖形系統殼層可能需要讓 Flatland 用戶端應用程式繼續 以相同的解析度顯示,但將內容輸出縮小至 。

裝置像素比率

定義裝置像素比例,讓螢幕製造商可以提高 裝置解析度,同時仍能顯示內容。 專為較低解析度設計的,而且在新螢幕上以相同尺寸顯示。身為 以 4K 和 1080p 螢幕版本的筆記型電腦為例 距離,所有按鈕和版面配置的實際大小都相同。只有在您 就能知道 4K 的清晰度較高,因為 4K 包住了 4 次 乘以 1080p 位於相同實體空間的實體像素。

相關人員

講師:neelsa@google.com

審查者:

  • 輸入:neelsa@google.com, quiche@google.com
  • 無障礙工具:lucasradaelli@google.com
  • 風景:jaeheon@google.com、dworsham@google.com、jjosh@google.com

社交功能:

本設計的詳細版本已經過內部團隊審核,並使用風景、輸入技術進行審核 和無障礙團隊另外也探討了替代解決方案。

詞彙解釋

  • Flatland
    • 風景優美的全新 2D 組合 API。
  • Gfx
    • 淘汰了 View 的舊版 3D 組合 API。
  • 檢視
    • 圖像內容的視覺區域。
    • 這個模型包含座標系統、定界框和定義的空間 透過 View Tree 與該祖系的關係。
  • HiDPI
    • 每英寸像素數。
    • 用來顯示包裝更多像素 實體區域舉例來說,即視為 240 dpi 以上的螢幕。 HiDPI。
  • PP
    • 實際像素。
    • 螢幕的實際像素數量。例如 4K 和 FHD 螢幕 同一部筆電的 4K 畫質為 3840x2160 實體像素,FHD 則是 1920x1080 實體像素,因此兩者的圖示大小相同 呈現筆電變化版本,在 HiDPI 螢幕上更清晰
  • DIP
    • 裝置獨立像素,又稱為邏輯顯示像素,以及密度 的獨立像素
    • 螢幕的邏輯像素數量。也就是說,如果有 4K 和 FHD 螢幕變化版本 4K 和 FHD 幾乎都擁有 1920x1080 裝置 的獨立像素
  • DPR
    • 裝置像素比例。
    • 螢幕實體像素與螢幕裝置的比率 的獨立像素
  • LP
    • 邏輯 View 像素 (又稱為「觀看次數」的裝置獨立像素)
    • View 的邏輯像素數量。會影響內容版面配置。
  • 亞美
    • 分配像素。
    • 檢視畫面的繪製緩衝區分配像素數量。
  • 太平洋標準時間
    • 父項設定會縮放 (即累積量表),
    • 所有父項 SetScale() 值相乘。檢視畫面各 DIP 與 顯示 DIP

設計

為因應「動機」一節列出的所有用途,我們定義了 一組關係,可建立父項檢視畫面可以設定的值 子系只能由 Flatland 設定哪些值 (系統定義) 以及子項 (子項觀察) 可觀察的值。

裝置像素比例是系統定義的單一比對畫面 螢幕。DPR 受到兒童觀察。

子項檢視畫面的大小是以 LP 為單位)。這個大小是由父項定義 兒童觀察到的現象。如果檢視畫面的大小和對齊方式相符,檢視畫面具有最佳解析度 檢視畫面的 LP 與顯示用區域的 DIP 完全相符 並算繪檢視畫面檢視畫面應模擬最佳解析度,其中 LP=DIP 的大小和對齊方式。但是,最佳解析度並非 子項觀察,且可依上層檢視區塊刻意分割 (使用「Scale」或 請參閱下文),取得放大功能或 GNOME 活動等功能 總覽。

縮放比例是以浮點值的形式導入。可以用父項定義,但不能 注意孩子們!子項檢視畫面的父項設定比例會乘以 會由該子項的所有祖系視圖引入。PSS 說明瞭 從子項檢視畫面的 LP 到螢幕的 DIP 比例計算而得。只要隱藏 PSS Flatland 會保留子項檢視區塊的實體像素數量 會佔用螢幕上的空間,而不會強迫子項重新分配或代表他人 可能會產生錯誤

我們進一步區分配置像素 也就是 緩衝區來呈現要顯示的內容,這是用戶端實作 但為了避免混淆,我們會說明與其他像素的關係 聊天室:

  • 關注 HiDPI 的客戶希望看起來清晰無比,能夠自行控制圖像的 內容。其 Allocation 像素 是邏輯 View 像素乘以 DPR。
  • 受 DPR 的義務客戶希望只呈現單一大小的內容。他們忽略 DPR 和其配置像素等同其邏輯 View 像素。
  • 自訂分配用戶端的內容會強制套用分配像素 即影片播放器或網頁畫布。這些用戶端會自行定義 Allocation 像素和 Logical View 像素之間的關係。

平地映射:

  • PP多媒體 = DIP多媒體* DPR
  • PPView = LPView * PSS * DPR
  • APView - LPView 實際上是客戶的商家。
    • APView = LPView * 建議採用 HiDPI 感知的 DPR 用戶端。

圖 1 說明上述的像素空間關係。

圖 1 - 平地 這張圖呈現象素空間關係。

提議的變更如以下 FIDL 程式碼片段表示:

type LayoutInfo = table {
    /// The layout size of a View in logical pixels, defined by the parent's call to
    /// [`SetViewportProperties`]. Clients should re-layout their content when this value changes.
    1: logical_size fuchsia.math.SizeU;

    /// The ratio from physical display pixels to the display's device independent pixels.
    /// Clients should not necessarily re-layout their content when this value changes. Clients may
    /// accommodate by reallocating their Image buffers that are adjusted by [`device_pixel_ratio`].
    /// HiDPI-aware clients that want to avoid sampling artifacts should render onto a buffer with
    /// at least the size round([`logical_size`] * [`device_pixel_ratio`]).
    /// Note that rounding is not C-style float-to-int truncation. The floating-point product should
    /// be converted to the nearest integer.
    2: device_pixel_ratio fuchsia.math.VecF;
};

protocol Flatland {

/// Sets the scale on a Transform. The order of geometric attribute application is addressed
/// in the documentation for SetTranslation().
/// Note that if there is a Viewport set on this Transform, the child Flatland will not be notified
/// about the changes made here. This method should only be used if the intention is to upsample or
/// downsample the Viewport's output. Use [`SetViewportProperties`] if the intention is to resize or
/// relayout the Viewport.
SetScale(struct {
        transform_id TransformId;
        scale fuchsia.math.VecF;
    });
}

圖像會先以比例尺度套用至每張圖片,再以圖像方式算繪, 螢幕。如果客戶想要支援 HiDPI,則需適當調整版面配置 透過指定的 LP 來檢視相關內容 所回報的 DPR 來反轉風景縮放效果的影響。

不會向兒童傳達 PSS。也就是透過 Flatland 向上擴充 可能會導致模糊不清不過,建議您強制用戶端 舉例來說,緩衝區空間可能會 擴充性因數和風險 OOM

我們可能會以浮點數表示非整數像素。如果有 附加至鄰近整數像素值(圓形) 的方式 最終不應是構件

Flatland 客戶可能想從邏輯像素到實體像素 除了 DPR 外,也必須先瞭解 PSS。不過,只有在您使用 因此這項設計會將這項轉換資訊 fuchsia.ui.pointer API。

用戶端可以透過這個 API,依自己的步調回應 DPR 變更。他們 我們都會同時收到這些變更的信號 串聯延遲卡頓模式

用戶端應一律使用單一 DPR 值。我們 日後支援多個螢幕時,我們可以回報單一 DPR 值 螢幕,或顯示所開啟螢幕的 DPR 值。

與舊版的對比

請注意,在 Gfx(舊版 3D API) 中,DPR 和 PSS 已乘以單一值 並回報給孩子因此,因資源調度需求而造成分配 造成用戶端程式碼的副作用,造成 OOM 和其他非預期的副作用 包括大規模的架構解決方法,以達成如 DPR 的相關放大和混淆。這次 Flatland 採用的 表明孩子只需要瞭解 DPR 進行圖像用途。

Gfx 對應:

  • PPView = LPView * pixel_scale
    • pixel_scale = PSS * DPR
    • 像素_scale 是 Gfx 唯一傳回的指標。

實作

這項設計涉及 fuchsia.ui.composition/Flatland敬上 也能使用 Google Cloud CLI 或 Compute Engine API導入作業分為三個主要步驟:

  • 移除將樹狀結構內淘汰的 pixel_scale 欄位 和樹狀結構外
  • 完成樹狀結構內變更。根據回報內容傳送 DPR 資訊 螢幕。
  • 變更樹狀結構內和樹狀結構外用戶端程式碼,以使用 DPR 資訊: 調整 AP。

成效

相較於 DPI 感知的用戶端,本提案可以減少 Gfx API。在 Gfx 中,DPR 和 PSS 會乘以單一值,並回報為 。可感知 DPI 的客戶會回應所有規模的累積。 舉例來說,如果上層發布商把 5 和 DPR 調整為 2, 他們原本就收到 pixel_scale 為 10,分配到 10 倍的 緩衝區。本提案區分 DPR 和 PSS,因此不必要的分配 都消失了

本提案減少了從 用戶端。我們可以實作更流暢的向上取樣和縮減作業,因為 我們將不再使用 Flatland 用戶端來回應規模變更。

安全性考量

本提案不會影響 Flatland API 的安全性模型。API 適用於其他圖形作業的保證,例如剪輯限制 即使縮放範圍大小仍會套用至縮放後的內容,

本提案會減少傳遞至 Flatland 檢視畫面的資訊範圍。於 Gfx、DPR 和 PSS 會乘以單一值,並回報給子項。 此提案只會回報 DPR 資訊。子項 Flatland 執行個體沒有 可表示其父項 Flatland 執行個體如何決定 或對內容進行縮放,也無法對縮放變更做出回應。

隱私權注意事項

本提案建議將 DPR 資訊傳送給 Flatland 客戶。裝置 像素比率是根據 多媒體廣告單元雖然這是非常具體的資訊,但這個屬性和比例 重複,而且在多種硬體中可能十分常見,因此不太實用 用於數位指紋採集此外,DPR 絕對是準備工作時 圖像品質

測試

Flatland API 已通過分層式做法測試 追蹤:

  • View 程式碼集中的單元測試。
  • /src/ui/tests 中測試 UI 整合測試 與 Flatland API 相關的合約
  • 針對具有 DPR 值的裝置擷取輸出像素的系統測試 也不同。
  • 要進行測試的 Chromium 和 Flutter 等執行階段寫入整合測試 使用 SetScale() 以及不同的 DPR 值。

說明文件

此後,部分 Flatland 說明文件將會更新 RFC 會說明 HiDPI 感知用戶端行為以及資源調度的運作方式。

缺點、替代方案和未知

執行這項提案的費用不太高。這項提案 所提出的建議 DPR 解決方案適用於 也可以延伸用於多螢幕用途。

這項設計目前有幾種替代方案。

  • 在某些 Chromium 設定中,DPR 已新增為可設定的靜態值。 因為各應用程式的擴充都顯得顯而易見。
  • 為避免發生四捨五入的問題,我們認為僅允許使用整數縮放比例係數。 不過,部分 DPR 設定仍會有例外狀況。
  • 如果我們的資料 浮點值但並沒有理由明確 因為不允許效能傳遞緩衝區,進而導致效能下降 在螢幕上直接顯示

既有藝術品和參考資料