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

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

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

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

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

Обзор

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

На панелях ARR частота вертикальной синхронизации дисплея и частота обновления разделены, что позволяет изменять частоту обновления в одном режиме отображения на основе частоты обновления контента. Панели могут работать с частотой обновления, которая делит эффект разрыва панели (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 : частота VSync дисплея. На дисплеях 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.

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