Начиная с Android 15 функция адаптивной частоты обновления (ARR) позволяет частоте обновления дисплея адаптироваться к частоте кадров контента с помощью дискретных шагов VSync.
Функция ARR обеспечивает следующие преимущества:
Снижение энергопотребления: по умолчанию ARR позволяет устройствам работать на частотах ниже максимальной частоты обновления, переходя на более высокие частоты только тогда, когда это необходимо для удобства пользователя, что сводит к минимуму ненужное энергопотребление.
Уменьшение рывков: ARR устраняет необходимость переключения режимов, что является известной причиной рывков.
Обзор
На панелях без ARR дисплей обновляется с фиксированной частотой, определяемой активным режимом отображения.
На панелях ARR частота вертикальной синхронизации дисплея и частота обновления разделены, что позволяет изменять частоту обновления в одном режиме отображения на основе частоты обновления контента. Панели могут работать с частотой обновления, которая делит эффект разрыва панели (TE). OEM-производители имеют возможность гибко внедрять ARR на основе своих предпочтительных компромиссов по мощности.
На следующем рисунке показано отображение с vsyncPeriod
240 Гц и minFrameIntervalNs
(максимальная частота обновления) 120 Гц. VSync происходит каждые 4,16 мс. Кадр может быть представлен с любым кратным VSync после minFrameIntervalNs
от последнего кадра.
Рисунок 1. Пример ARR.
Выполнение
Android 15 поддерживает ARR с новыми API Hardware Composer (HWC) HAL и изменениями платформы. Чтобы включить ARR, OEM-производители должны поддерживать изменения ядра и системы на устройствах под управлением Android 15 и более поздних версий, а также реализовать версию 3 API android.hardware.graphics.composer3
, как указано в следующих разделах.
Более подробную информацию см. в эталонной реализации API Pixel , поддерживающих ARR.
DisplayConfiguration.aidl
API DisplayConfiguration.aidl
определяет конфигурацию дисплея с помощью атрибутов дисплея, а также следующих атрибутов для ARR:
- Необязательный
vrrConfig
: Если установлено, ARR включен для определенных конфигураций. Если установлено значениеnull
, режим отображения устанавливается в режимы, отличные от ARR, такие как множественная частота обновления (MRR) . С этим атрибутом дисплей может быть настроен как MRR или ARR, но не как оба. vsyncPeriod
: частота VSync дисплея. На дисплеях ARR это значение используется для получения поддерживаемых дискретных частот обновления.Поставщики должны задать значение
DisplayConfiguration.vsyncPeriod
для всех устройств. Для дисплеев без ARRDisplayConfiguration.vsyncPeriod
— это частота обновления дисплея. Если устройство поддерживает 120 Гц, то это значение должно быть 8,3 мс.Для дисплеев ARR
DisplayConfiguration.vsyncPeriod
— это частота сигнала TE. Если у устройстваminFrameIntervalNs
составляет 8,3 мс, а TE — 240 Гц, это значение должно быть 4,16 мс.
VrrConfig.aidl
API VrrConfig.aidl
включает следующие атрибуты:
-
minFrameIntervalNs
: максимальная частота обновления, которую может поддерживать дисплей. -
NotifyExpectedPresentConfig
: это определяется тем, когда дисплей требует предварительного уведомления о предстоящем кадре.
IComposerClient.notifyExpectedPresent
предоставляет подсказку для кадра, который, скорее всего, будет представлен, чтобы дисплей мог соответствующим образом адаптировать свой период самообновления. frameIntervalNs
представляет текущую каденцию, которая следует после expectedPresentTime
. Например, если notifyExpectedPresent
вызывается с expectedPresentTime
N и frameIntervalNs
16,6 мс, то следующий кадр находится через N + 16,6 мс после текущего времени N. После текущего времени N каденция кадра составляет 16,6 мс, пока не произойдут дальнейшие изменения.
IComposerClient.notifyExpectedPresent
вызывается только тогда, когда задан DisplayConfiguration.notifyExpectedPresentConfig
и если выполняется одно из следующих условий синхронизации:
- Текущее время вне каденции: ожидаемое время отображения следующего кадра отклоняется от обычной частоты обновления дисплея, определяемой параметром
frameIntervalNs
. - Превышено время ожидания: Интервал времени между предыдущими кадрами больше или равен
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
дает подсказку о частоте смены следующих кадров в наносекундах.
Тестирование
Используйте onRefreshRateChangedDebug
для отладки. Этот метод уведомляет клиента об изменении частоты обновления дисплея.
Используйте тестовое приложение TouchLatency
для ручного тестирования, как показано на рисунке 2:
Рисунок 2. Тестовое приложение TouchLatency.
В тестовом приложении используйте ползунок, чтобы настроить частоту рендеринга для различных значений делителей частоты обновления вашего дисплея. Наблюдайте, как частота кадров изменяется относительно запрошенной частоты.