Адаптивная частота обновления

В Android 15 реализована функция адаптивной частоты обновления (ARR), которая позволяет частоте обновления дисплея подстраиваться под частоту кадров контента с помощью дискретных шагов VSync.

Функция ARR обеспечивает следующие преимущества:

  • Снижение энергопотребления: по умолчанию ARR позволяет устройствам работать на частотах ниже максимальной частоты обновления, переходя на более высокие частоты только тогда, когда это необходимо для удобства пользователя, что сводит к минимуму ненужное энергопотребление.
  • Уменьшение рывков: ARR устраняет необходимость переключения режимов, что является известной причиной рывков.

Обзор

На панелях без ARR дисплей обновляется с фиксированной частотой, определяемой активным режимом отображения.

На панелях ARR частота вертикальной синхронизации (VSync) и частота обновления экрана не связаны, что позволяет изменять частоту обновления в пределах одного режима отображения в зависимости от частоты обновления контента. Панели могут работать с частотой обновления, делящейся на эффект разрыва изображения (TE). OEM-производители могут реализовать ARR, исходя из своих предпочтений в отношении энергосбережения.

На следующем рисунке показан дисплей с vsyncPeriod 240 Гц и minFrameIntervalNs (максимальной частотой обновления) 120 Гц. VSync происходит каждые 4,16 мс. Кадр может быть представлен с любой частотой, кратной VSync, после minFrameIntervalNs от предыдущего кадра.

arr-example

Рисунок 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:

touchlatency-app

Рисунок 2. Тестовое приложение TouchLatency.

В тестовом приложении используйте ползунок, чтобы настроить частоту рендеринга в соответствии с различными значениями делителя частоты обновления дисплея. Наблюдайте, как меняется частота кадров в зависимости от выбранной частоты.