Android 15부터 적응형 재생 빈도 (ARR) 기능을 사용하면 디스플레이 재생 빈도가 개별 VSync 단계를 사용하여 콘텐츠 프레임 속도에 맞게 조정될 수 있습니다.
ARR 기능은 다음과 같은 이점을 제공합니다.
전원 소모량 감소: 기본적으로 ARR을 사용하면 기기가 최대 재생 빈도보다 낮은 빈도로 작동하도록 설정되며, 사용자 환경에 필수적인 경우에만 더 높은 빈도로 전환되므로 불필요한 전원 소모를 최소화할 수 있습니다.
버벅거림 감소: ARR을 사용하면 버벅거림의 원인으로 알려진 모드 전환이 필요하지 않습니다.
개요
ARR이 아닌 패널에서는 활성 디스플레이 모드에 따라 결정된 고정 주기로 디스플레이가 새로고침됩니다.
ARR 패널에서는 디스플레이 VSync 속도와 새로고침 빈도가 분리되어 콘텐츠 업데이트 주기에 따라 하나의 디스플레이 모드 내에서 새로고침 빈도가 변경될 수 있습니다. 패널은 패널의 테어링 효과 (TE)의 제수인 화면 재생 빈도로 실행할 수 있습니다. OEM은 선호하는 전원 절충점을 기반으로 ARR을 유연하게 구현할 수 있습니다.
다음 그림은 vsyncPeriod
가 240 Hz이고 minFrameIntervalNs
(최대 새로고침 빈도)가 120 Hz인 디스플레이입니다. VSync는 4.16 밀리초마다 발생합니다. 프레임은 마지막 프레임의 minFrameIntervalNs
후 VSync의 배수로 표시될 수 있습니다.
그림 1. ARR의 예
구현
Android 15는 새로운 Hardware Composer (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
는 표시될 가능성이 있는 프레임에 대한 힌트를 제공하므로 디스플레이가 자체 새로고침 기간을 적절하게 조정할 수 있습니다. frameIntervalNs
는 expectedPresentTime
뒤에 오는 현재 케이던스를 나타냅니다. 예를 들어 notifyExpectedPresent
가 expectedPresentTime
N 및 frameIntervalNs
16.6ms로 호출되면 다음 프레임은 현재 시간 N 후 N + 16.6ms에 있습니다. 현재 시간 N 이후에는 추가 변경사항이 있을 때까지 프레임 주기가 16.6밀리초입니다.
IComposerClient.notifyExpectedPresent
는 DisplayConfiguration.notifyExpectedPresentConfig
가 설정된 경우에만 호출되며 다음 타이밍 조건 중 하나가 발생하는 경우에만 호출됩니다.
- 케이던스를 벗어난 현재 시간: 다음 프레임의 예상 표시 시간이
frameIntervalNs
로 정의된 디스플레이의 일반 화면 재생 빈도에서 벗어납니다. - 제한 시간 초과: 이전 프레임 간의 시간 간격이
notifyExpectedPresentConfig.timeoutNs
이상입니다.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
는 예정된 프레임의 주기(나노초)에 관한 힌트를 제공합니다.
테스트
디버깅에는 onRefreshRateChangedDebug
를 사용하세요. 이 메서드는 디스플레이의 새로고침 빈도가 변경되었음을 클라이언트에 알립니다.
그림 2와 같이 수동 테스트에 TouchLatency
테스트 앱을 사용합니다.
그림 2. TouchLatency 테스트 앱
테스트 앱에서 슬라이더를 사용하여 디스플레이 새로고침 빈도의 다양한 제수 새로고침 빈도 값으로 렌더링 속도를 조정합니다. 요청된 속도에 따라 프레임 속도가 어떻게 달라지는지 관찰합니다.