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

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

Дополнительную информацию см. в эталонной реализации 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 мс.

Вррконфиг.аидл

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.

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

,

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

Дополнительную информацию см. в эталонной реализации 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 мс.

Вррконфиг.аидл

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.

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