Uyarlanabilir yenileme oranı

Android 15, ekran yenileme hızının ayrı VSync adımları kullanarak içerik kare hızına uyum sağlamasına olanak tanıyan uyarlanabilir yenileme hızı (ARR) özelliğini sunar.

Yıllık yinelenen gelir özelliği aşağıdaki avantajları sunar:

  • Güç tüketimini azaltma: ARR, varsayılan olarak cihazların maksimum yenileme hızlarından daha düşük hızlarda çalışmasına olanak tanır. Yalnızca kullanıcı deneyimi için gerekli olduğunda daha yüksek hızlara geçerek gereksiz güç tüketimini en aza indirir.
  • Jank'ı azaltma: ARR, bilinen bir jank nedeni olan mod değiştirme ihtiyacını ortadan kaldırır.

Genel Bakış

ARR olmayan panellerde ekran, etkin ekran moduna göre belirlenen sabit bir sıklıkta yenilenir.

ARR panellerinde, ekran VSync hızı ve yenileme hızı birbirinden bağımsızdır. Bu sayede, içerik güncelleme sıklığına bağlı olarak yenileme hızları tek bir ekran modunda değiştirilebilir. Paneller, panelin yırtılma etkisinin (TE) bölenleri olan yenileme hızlarında çalışabilir. OEM'ler, tercih ettikleri güç değiş tokuşlarına göre ARR'yi uygulayabilir.

Aşağıdaki şekilde, 240 Hz vsyncPeriod ve 120 Hz minFrameIntervalNs (maksimum yenileme hızı) değerlerine sahip bir ekran gösterilmektedir. VSync her 4,16 ms'de bir gerçekleşir. Bir kare, son kareden itibaren minFrameIntervalNs'den sonra VSync'in herhangi bir katında sunulabilir.

arr-example

Şekil 1. Yıllık yinelenen gelir örneği.

Uygulama

Android 15, yeni Hardware Composer (HWC) HAL API'leri ve platform değişiklikleriyle ARR'yi destekler. ARR'yi etkinleştirmek için OEM'lerin Android 15 ve sonraki sürümleri çalıştıran cihazlarda çekirdek ve sistem değişikliklerini desteklemesi ve aşağıdaki bölümlerde listelendiği gibi android.hardware.graphics.composer3 API'lerinin 3. sürümünü uygulaması gerekir.

ARR'yi destekleyen API'lerin Pixel'in referans uygulamasını inceleyerek daha fazla bilgi edinin.

DisplayConfiguration.aidl

DisplayConfiguration.aidl API, ARR için aşağıdaki özelliklerle birlikte görüntüleme özelliklerini kullanarak görüntüleme yapılandırmasını belirtir:

  • İsteğe bağlı vrrConfig: Ayarlanırsa belirli yapılandırmalar için ARR etkinleştirilir. null olarak ayarlanırsa ekran modu, çoklu yenileme hızı (MRR) gibi ARR dışı modlara ayarlanır. Bu özellik sayesinde bir ekran, MRR veya ARR olarak yapılandırılabilir ancak ikisi birden yapılandırılamaz.
  • vsyncPeriod: Ekranın VSync oranı. ARR ekranlarında bu değer, desteklenen ayrı yenileme hızlarını elde etmek için kullanılır.

    Tedarikçiler, tüm cihazlar için DisplayConfiguration.vsyncPeriod değerini ayarlamalıdır. ARR olmayan ekranlarda DisplayConfiguration.vsyncPeriod, ekran yenileme hızıdır. Bir cihaz 120 Hz'i destekliyorsa bu değer 8, 3 ms olmalıdır.

    ARR ekranlarında DisplayConfiguration.vsyncPeriod, TE sinyalinin frekansıdır. Bir cihazın minFrameIntervalNs değeri 8,3 ms ancak TE değeri 240 Hz ise bu değer 4,16 ms olmalıdır.

VrrConfig.aidl

VrrConfig.aidl API'si aşağıdaki özellikleri içerir:

IComposerClient.notifyExpectedPresent görüntülemenin kendi kendini yenileme süresini buna göre ayarlayabilmesi için büyük olasılıkla sunulacak bir kare hakkında ipucu verir. frameIntervalNs, expectedPresentTime'den sonraki mevcut ritmi gösterir. Örneğin, notifyExpectedPresent, expectedPresentTime N ve 16,6 ms'lik frameIntervalNs ile çağrılırsa bir sonraki kare, mevcut zaman N'den N + 16,6 ms sonra olur. Şu anki zaman N'den sonra, başka değişiklikler yapılana kadar kare hızı 16,6 ms olur.

IComposerClient.notifyExpectedPresent yalnızca DisplayConfiguration.notifyExpectedPresentConfig ayarlandığında ve aşağıdaki zamanlama koşullarından biri gerçekleştiğinde çağrılır:

  • Out-of-cadence present time: Bir sonraki karenin beklenen sunu zamanı, frameIntervalNs ile tanımlanan ekranın normal yenileme hızından sapıyor.
  • Zaman aşımı aşıldı: Önceki kareler arasındaki zaman aralığı notifyExpectedPresentConfig.timeoutNs değerinden büyük veya bu değere eşit.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs Yaklaşan karelerin ritmi hakkında nanosaniye cinsinden ipucu verir.

Test

Hata ayıklama için onRefreshRateChangedDebug kullanın. Bu yöntem, istemciye ekranın yenileme hızının değiştiğini bildirir.

Şekil 2'de gösterildiği gibi manuel test için TouchLatency test uygulamasını kullanın:

touchlatency-app

Şekil 2. TouchLatency test uygulaması.

Test uygulamasında, kaydırma çubuğunu kullanarak oluşturma hızını ekranın yenileme hızının çeşitli bölme yenileme hızlarına göre ayarlayın. Kare hızının, istenen hıza göre nasıl değiştiğini gözlemleyin.