자동 조절 새로고침 빈도

Android 15에서는 디스플레이 새로고침 빈도가 개별 VSync 단계를 사용하여 콘텐츠 프레임 속도에 적응할 수 있는 적응형 새로고침 빈도 (ARR) 기능이 도입되었습니다.

ARR 기능은 다음과 같은 이점을 제공합니다.

  • 전력 소비량 감소: 기본적으로 ARR을 사용하면 기기가 최대 새로고침 빈도보다 낮은 빈도로 작동하며 사용자 환경에 필수적인 경우에만 더 높은 빈도로 전환되므로 불필요한 전력 소비량이 최소화됩니다.
  • 끊김 현상 감소: ARR은 모드 전환의 필요성을 없애므로 끊김 현상의 알려진 원인이 제거됩니다.

개요

ARR이 아닌 패널에서는 활성 디스플레이 모드에 따라 결정된 고정된 케이던스로 디스플레이가 새로고침됩니다.

ARR 패널에서 디스플레이 VSync 속도와 새로고침 빈도가 분리되어 콘텐츠 업데이트 빈도에 따라 하나의 디스플레이 모드 내에서 새로고침 빈도를 변경할 수 있습니다. 패널은 패널의 화면 찢김 효과(TE)의 제수로 된 화면 재생 빈도로 실행할 수 있습니다. OEM은 원하는 전력 절충에 따라 ARR을 구현할 수 있습니다.

다음 그림은 vsyncPeriod가 240Hz이고 minFrameIntervalNs (최대 새로고침 빈도)가 120Hz인 디스플레이를 보여줍니다. VSync는 4.16ms마다 발생합니다. 프레임은 마지막 프레임의 minFrameIntervalNs 이후 VSync의 배수로 표시될 수 있습니다.

arr-example

그림 1. ARR의 예

구현

Android 15는 새로운 하드웨어 컴포저 (HWC) HAL API와 플랫폼 변경사항을 통해 ARR을 지원합니다. ARR을 사용 설정하려면 OEM이 Android 15 이상을 실행하는 기기에서 커널 및 시스템 변경사항을 지원하고 다음 섹션에 나열된 대로 android.hardware.graphics.composer3 API 버전 3을 구현해야 합니다.

ARR을 지원하는 API의 Pixel 참조 구현을 참고하세요.

DisplayConfiguration.aidl

DisplayConfiguration.aidl API는 디스플레이 속성을 사용하여 디스플레이 구성을 지정하며 ARR의 다음 속성도 지정합니다.

  • 선택사항 vrrConfig: 설정된 경우 특정 구성에 ARR이 사용 설정됩니다. null로 설정하면 디스플레이 모드가 다중 새로고침 빈도(MRR)와 같은 ARR이 아닌 모드로 설정됩니다. 이 속성을 사용하면 디스플레이를 MRR 또는 ARR로 구성할 수 있지만 둘 다로는 구성할 수 없습니다.
  • vsyncPeriod: 디스플레이의 VSync 비율입니다. ARR 디스플레이에서 이 값은 지원되는 개별 화면 재생 빈도를 파생하는 데 사용됩니다.

    공급업체는 모든 기기의 DisplayConfiguration.vsyncPeriod 값을 설정해야 합니다. ARR이 아닌 디스플레이의 경우 DisplayConfiguration.vsyncPeriod는 디스플레이 새로고침 빈도입니다. 기기가 120Hz를 지원하는 경우 이 값은 8.3ms여야 합니다.

    ARR 디스플레이의 경우 DisplayConfiguration.vsyncPeriod은 TE 신호 빈도입니다. 기기의 minFrameIntervalNs이 8.3ms인데 TE가 240Hz인 경우 이 값은 4.16ms여야 합니다.

VrrConfig.aidl

VrrConfig.aidl API에는 다음 속성이 포함됩니다.

  • minFrameIntervalNs: 디스플레이에서 지원할 수 있는 최대 새로고침 빈도입니다.
  • NotifyExpectedPresentConfig: 이는 디스플레이에서 예정된 프레임에 대한 사전 알림이 필요한 시점에 따라 결정됩니다.

IComposerClient.notifyExpectedPresent는 표시될 가능성이 있는 프레임에 관한 힌트를 제공하므로 디스플레이가 자체 새로고침 기간을 적절하게 조정할 수 있습니다. frameIntervalNsexpectedPresentTime 다음에 오는 현재 케이던스를 나타냅니다. 예를 들어 notifyExpectedPresentexpectedPresentTime N 및 frameIntervalNs 16.6ms로 호출되면 다음 프레임은 현재 시간 N에서 N + 16.6ms에 있습니다. 현재 시간 N 이후에는 추가 변경사항이 있을 때까지 프레임 케이던스가 16.6ms입니다.

IComposerClient.notifyExpectedPresentDisplayConfiguration.notifyExpectedPresentConfig이 설정된 경우에만 호출되며 다음 타이밍 조건 중 하나가 발생하는 경우에만 호출됩니다.

  • 리듬에서 벗어난 현재 시간: 다음 프레임의 예상 프레젠테이션 시간이 frameIntervalNs로 정의된 디스플레이의 일반 새로고침 빈도에서 벗어납니다.
  • 시간 초과: 이전 프레임 간 시간 간격이 notifyExpectedPresentConfig.timeoutNs 이상입니다.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs은 예정된 프레임의 케이던스에 관한 힌트를 나노초 단위로 제공합니다.

테스트

디버깅에는 onRefreshRateChangedDebug을 사용합니다. 이 메서드는 디스플레이의 새로고침 빈도가 변경되었음을 클라이언트에 알립니다.

그림 2와 같이 수동 테스트에 TouchLatency 테스트 앱을 사용합니다.

touchlatency-app

그림 2. TouchLatency 테스트 앱

테스트 앱에서 슬라이더를 사용하여 렌더링 비율을 디스플레이 재생 빈도의 제수 재생 빈도의 다양한 값으로 조정합니다. 요청된 속도에 따라 프레임 속도가 어떻게 변하는지 관찰합니다.