自 Android 15 起,可使用自動調整的螢幕更新率 (ARR) 功能,透過獨立的 VSync 步驟,讓螢幕更新率配合內容影格速率。
ARR 功能提供以下好處:
降低耗電量:根據預設,ARR 可讓裝置以低於最大刷新率的速率運作,並只在使用者體驗需要時才轉換為更高的速率,藉此盡量減少不必要的耗電量。
減少卡頓:ARR 不需要切換模式,這是卡頓的已知原因。
總覽
在非 ARR 面板上,螢幕會以固定頻率重新整理 (取決於主動顯示模式)。
在 ARR 面板中,畫面的 VSync 頻率和刷新率會分離,允許在一個顯示模式中根據內容更新頻率變更刷新率。這些面板能以面板的撕裂效果 (TE) 除數做為刷新率執行。原始設備製造商 (OEM) 可根據偏好的效能取捨,靈活導入 ARR。
下圖顯示 vsyncPeriod
為 240 Hz,而 minFrameIntervalNs
(最高刷新率) 為 120 Hz。VSync 會每隔 4.16 毫秒發生一次。在上一影格 minFrameIntervalNs
後,影格可以任何 VSync 倍數呈現。
圖 1. ARR 範例。
實作
Android 15 支援 ARR,以及新的 Hardware Composer (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 包含下列屬性:
minFrameIntervalNs
:螢幕支援的刷新率上限。NotifyExpectedPresentConfig
:這項屬性取決於螢幕需要何時提前通知即將顯示的框架。
IComposerClient.notifyExpectedPresent
會針對可能會顯示的影格提供提示,讓螢幕能據此調整其自動重新整理週期。frameIntervalNs
代表 expectedPresentTime
後的現行節奏。舉例來說,如果使用 expectedPresentTime
N 且 frameIntervalNs
16.6 毫秒呼叫 notifyExpectedPresent
,下一個影格會是現在時間 N 之後的 N + 16.6 毫秒。在目前時間 N 之後,影格播放速度為 16.6 毫秒,直到有進一步變更為止。
只有在設定 DisplayConfiguration.notifyExpectedPresentConfig
且發生下列其中一種時間條件時,系統才會呼叫 IComposerClient.notifyExpectedPresent
:
- 不規律的顯示時間:下一個影格預期的顯示時間,與
frameIntervalNs
定義的螢幕一般更新率有所偏差。 - 逾時時間:前一個影格的時間間隔大於或等於
notifyExpectedPresentConfig.timeoutNs
。
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
可為即將推出的影格提供以奈秒為單位的提示。
測試
請使用 onRefreshRateChangedDebug
進行偵錯。這個方法會通知用戶端螢幕的刷新率已變更。
使用 TouchLatency
測試應用程式進行手動測試,如圖 2 所示:
圖 2. 觸控延遲測試應用程式。
在測試應用程式中,使用滑桿將轉譯率調整為螢幕更新率的除數更新率的各種值。觀察畫面更新率與要求速率的差異。