自動調整刷新率

自 Android 15 起,可用於讓螢幕刷新率配合內容影格速率的自動調整刷新率 (ARR) 功能,會使用獨立的 VSync 步驟。

ARR 功能具備下列優點:

  • 降低耗電量:根據預設,ARR 可讓裝置以低於最大刷新率的速率運作,只有在使用者體驗需要時才會改為更高的速率,藉此盡量減少不必要的耗電量。

  • 減少卡頓:ARR 可避免切換模式,而這正是卡頓的已知原因。

總覽

在非 ARR 面板上,螢幕會以活動顯示模式決定的固定節奏進行重新整理。

在 ARR 面板上,顯示器 VSync 速率和刷新率已解耦,可根據內容更新節奏,在單一顯示模式中變更刷新率。面板可以面板撕裂效果 (TE) 的除數為刷新率執行。原始設備製造商 (OEM) 可以根據偏好的效能取捨,靈活導入 ARR。

下圖顯示 vsyncPeriod 為 240 Hz,minFrameIntervalNs (最高刷新率) 為 120 Hz。VSync 會每隔 4.16 毫秒發生一次。在上一影格 minFrameIntervalNs 後,影格可以任何 VSync 倍數呈現。

arr-example

圖 1. ARR 範例。

實作

Android 15 支援 ARR,並提供新的硬體編譯器 (HWC) HAL API 和平台變更。如要啟用 ARR,原始設備製造商必須在執行 Android 15 以上版本的裝置上支援核心和系統變更,並導入 android.hardware.graphics.composer3 API 的第 3 版,如以下各節所列。

詳情請參閱 Pixel 的參考實作項目,瞭解支援 ARR 的 API。

DisplayConfiguration.aidl

DisplayConfiguration.aidl API 會使用顯示屬性指定顯示設定,並搭配下列 ARR 屬性:

  • 選用 vrrConfig:如果已設定,系統會為特定設定啟用 ARR。如果設為 null,顯示模式會設為非 ARR 模式,例如多重刷新率 (MRR)。使用這項屬性時,您可以將顯示器設為 MRR 或 ARR,但不能同時設為兩者。
  • vsyncPeriod:螢幕的 VSync 速率。在 ARR 螢幕上,這個值可用於擷取支援的離散刷新率。

    供應商必須為所有裝置設定 DisplayConfiguration.vsyncPeriod 值。對於非 ARR 顯示器,DisplayConfiguration.vsyncPeriod 是螢幕刷新率。如果裝置支援 120 Hz,則這個值必須為 8.3 毫秒。

    對於 ARR 螢幕,DisplayConfiguration.vsyncPeriod 是 TE 信號頻率。如果裝置的 minFrameIntervalNs 為 8.3 毫秒,但 TE 為 240 Hz,則這個值必須為 4.16 毫秒。

VrrConfig.aidl

VrrConfig.aidl API 包含下列屬性:

IComposerClient.notifyExpectedPresent 會針對可能會顯示的影格提供提示,讓螢幕能據此調整其自動重新整理週期。frameIntervalNs 代表 expectedPresentTime 後的現行節奏。舉例來說,如果 notifyExpectedPresent 是使用 expectedPresentTime N 呼叫,且 frameIntervalNs 為 16.6 毫秒,則下一個影格會出現在目前時間 N 後的 N + 16.6 毫秒。在目前時間 N 之後,影格播放速度為 16.6 毫秒,直到有進一步變更為止。

只有在設定 DisplayConfiguration.notifyExpectedPresentConfig 且發生下列其中一個時間條件時,才會呼叫 IComposerClient.notifyExpectedPresent

  • 不規律的呈現時間:下一個影格預期的呈現時間,與 frameIntervalNs 定義的螢幕一般更新率有所偏差。
  • 逾時:前一個影格之間的時間間隔大於或等於 notifyExpectedPresentConfig.timeoutNs

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs 會提供提示,說明接下來畫格的節奏,以奈秒為單位。

測試

請使用 onRefreshRateChangedDebug 進行偵錯。這個方法會通知用戶端,顯示器的更新率已變更。

使用 TouchLatency 測試應用程式進行手動測試,如圖 2 所示:

touchlatency-app

圖 2. TouchLatency 測試應用程式。

在測試應用程式中,使用滑桿將轉譯率調整為螢幕更新率的除數更新率的各種值。觀察影格速率如何隨著要求的速率而變動。