В Android 15 представлена функция адаптивной частоты обновления (ARR), которая позволяет частоте обновления дисплея адаптироваться к частоте кадров контента с помощью дискретных шагов VSync.
Функция ARR предоставляет следующие преимущества:
- Снижение энергопотребления: по умолчанию ARR позволяет устройствам работать на частотах ниже максимальной частоты обновления, переключаясь на более высокие частоты только тогда, когда это необходимо для удобства пользователя, что сводит к минимуму ненужное энергопотребление.
- Снижение рывков: ARR устраняет необходимость переключения режимов, что является известной причиной рывков.
Обзор
На панелях без технологии ARR обновление изображения происходит с фиксированной частотой, определяемой активным режимом отображения.
На панелях с ARR частота вертикальной синхронизации (VSync) и частота обновления экрана разделены, что позволяет изменять частоту обновления в рамках одного режима отображения в зависимости от частоты обновления контента. Панели могут работать с частотой обновления, которая является делителем эффекта разрыва изображения (TE). Производители оборудования могут внедрять ARR, исходя из предпочтительных для них компромиссов в отношении энергопотребления.
На следующем рисунке показан дисплей с vsyncPeriod 240 Гц и минимальной частотой обновления кадра ( minFrameIntervalNs ) 120 Гц. Вертикальная синхронизация происходит каждые 4,16 мс. Кадр может быть представлен с любой частотой, кратной VSync, после истечения minFrameIntervalNs с момента последнего кадра.

Рисунок 1. Пример ARR.
Выполнение
Android 15 поддерживает ARR с помощью новых API HAL Hardware Composer (HWC) и изменений платформы. Для включения ARR производители оборудования должны поддерживать изменения ядра и системы на устройствах под управлением Android 15 и выше, а также реализовать версию 3 API android.hardware.graphics.composer3 , как указано в следующих разделах.
Для получения более подробной информации см. эталонную реализацию API, поддерживающих ARR, от компании Pixel .
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. Приложение для тестирования задержки сенсорного управления.
В тестовом приложении используйте ползунок для регулировки частоты рендеринга в соответствии с различными значениями, делящими частоту обновления дисплея. Наблюдайте, как изменяется частота кадров в зависимости от запрошенной частоты.