В Android 15 реализована функция адаптивной частоты обновления (ARR), которая позволяет частоте обновления дисплея подстраиваться под частоту кадров контента с помощью дискретных шагов VSync.
Функция ARR обеспечивает следующие преимущества:
- Снижение энергопотребления: по умолчанию ARR позволяет устройствам работать на частотах ниже максимальной частоты обновления, переходя на более высокие частоты только тогда, когда это необходимо для удобства пользователя, что сводит к минимуму ненужное энергопотребление.
- Уменьшение рывков: ARR устраняет необходимость переключения режимов, что является известной причиной рывков.
Обзор
На панелях без ARR дисплей обновляется с фиксированной частотой, определяемой активным режимом отображения.
На панелях ARR частота вертикальной синхронизации (VSync) и частота обновления экрана не связаны, что позволяет изменять частоту обновления в пределах одного режима отображения в зависимости от частоты обновления контента. Панели могут работать с частотой обновления, делящейся на эффект разрыва изображения (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: частота вертикальной синхронизации дисплея. На дисплеях ARR это значение используется для определения поддерживаемых дискретных частот обновления.Поставщики должны задать значение
DisplayConfiguration.vsyncPeriodдля всех устройств. Для дисплеев без ARR значениеDisplayConfiguration.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.
В тестовом приложении используйте ползунок, чтобы настроить частоту рендеринга в соответствии с различными значениями делителя частоты обновления дисплея. Наблюдайте, как меняется частота кадров в зависимости от выбранной частоты.