adaptacyjna częstotliwość odświeżania,

Android 15 wprowadza funkcję adaptacyjnej częstotliwości odświeżania (ARR), która umożliwia dostosowywanie częstotliwości odświeżania wyświetlacza do liczby klatek treści za pomocą dyskretnych kroków VSync.

Funkcja ARR zapewnia te korzyści:

  • Zmniejszenie zużycia energii: domyślnie ARR umożliwia urządzeniom działanie z częstotliwością odświeżania niższą niż maksymalna, a przełączanie się na wyższą częstotliwość następuje tylko wtedy, gdy jest to niezbędne dla wygody użytkownika. Minimalizuje to niepotrzebne zużycie energii.
  • Ograniczanie zacinania się: ARR eliminuje konieczność przełączania trybów, co jest znaną przyczyną zacinania się.

Przegląd

Na panelach bez ARR wyświetlacz odświeża się ze stałą częstotliwością określoną przez aktywny tryb wyświetlania.

Na panelach ARR szybkość synchronizacji pionowej i częstotliwość odświeżania są od siebie niezależne, co pozwala zmieniać częstotliwość odświeżania w ramach jednego trybu wyświetlania na podstawie częstotliwości aktualizacji treści. Panele mogą działać z częstotliwością odświeżania, która jest dzielnikiem efektu rozrywania obrazu (TE) panelu. Producenci OEM mogą wdrażać ARR na podstawie preferowanych kompromisów dotyczących zużycia energii.

Na ilustracji poniżej widać wyświetlacz o częstotliwości odświeżania vsyncPeriod 240 Hz i minFrameIntervalNs (maksymalnej częstotliwości odświeżania) 120 Hz. Synchronizacja pionowa występuje co 4,16 ms. Klatkę można wyświetlić w dowolnej wielokrotności synchronizacji pionowej po minFrameIntervalNs od ostatniej klatki.

arr-example

Rysunek 1. Przykład ARR.

Implementacja

Android 15 obsługuje ARR dzięki nowym interfejsom API HAL kompozytora sprzętowego (HWC) i zmianom na platformie. Aby włączyć ARR, producenci OEM muszą obsługiwać zmiany w jądrze i systemie na urządzeniach z Androidem 15 lub nowszym oraz wdrożyć interfejsy API android.hardware.graphics.composer3 w wersji 3, jak opisano w kolejnych sekcjach.

Więcej informacji znajdziesz w implementacji referencyjnej interfejsów API Pixela, które obsługują ARR.

DisplayConfiguration.aidl

Interfejs API DisplayConfiguration.aidl określa konfigurację wyświetlania za pomocą atrybutów wyświetlania oraz tych atrybutów ARR:

  • Opcjonalne vrrConfig: Jeśli jest ustawiona, funkcja ARR jest włączona w przypadku określonych konfiguracji. Jeśli ustawisz wartość null, tryb wyświetlania zostanie ustawiony na tryby inne niż ARR, takie jak wiele częstotliwości odświeżania (MRR). Za pomocą tego atrybutu wyświetlacz można skonfigurować jako MRR lub ARR, ale nie oba jednocześnie.
  • vsyncPeriod: częstotliwość synchronizacji pionowej wyświetlacza. W przypadku wyświetlaczy ARR ta wartość jest używana do określania obsługiwanych dyskretnych częstotliwości odświeżania.

    Dostawcy muszą ustawić wartość DisplayConfiguration.vsyncPeriod dla wszystkich urządzeń. W przypadku wyświetlaczy bez ARR DisplayConfiguration.vsyncPeriod to częstotliwość odświeżania wyświetlacza. Jeśli urządzenie obsługuje 120 Hz, ta wartość musi wynosić 8,3 ms.

    W przypadku wyświetlaczy ARR DisplayConfiguration.vsyncPeriod to częstotliwość sygnału TE. Jeśli urządzenie ma minFrameIntervalNs o wartości 8,3 ms, ale TE wynosi 240 Hz, ta wartość musi wynosić 4,16 ms.

VrrConfig.aidl

Interfejs VrrConfig.aidl API zawiera te atrybuty:

IComposerClient.notifyExpectedPresent podaje wskazówkę dotyczącą klatki, która prawdopodobnie będzie wyświetlana, dzięki czemu wyświetlacz może odpowiednio dostosować okres odświeżania. frameIntervalNs reprezentuje bieżącą częstotliwość, która następuje po expectedPresentTime. Jeśli na przykład funkcja notifyExpectedPresent zostanie wywołana z wartościami expectedPresentTime N i  frameIntervalNs 16,6 ms, następna klatka będzie w momencie N + 16,6 ms po obecnym czasie N. Po czasie N kadencja klatek wynosi 16,6 ms, dopóki nie nastąpią dalsze zmiany.

IComposerClient.notifyExpectedPresent jest wywoływana tylko wtedy, gdy ustawiona jest wartość DisplayConfiguration.notifyExpectedPresentConfig, i gdy wystąpi jeden z tych warunków czasowych:

  • Czas prezentacji poza rytmem: oczekiwany czas prezentacji następnej klatki odbiega od regularnej częstotliwości odświeżania wyświetlacza zdefiniowanej przez frameIntervalNs.
  • Przekroczono czas oczekiwania: odstęp czasu między poprzednimi klatkami jest większy lub równy notifyExpectedPresentConfig.timeoutNs.

DisplayCommand.frameIntervalNs

DisplayCommand.frameIntervalNs zawiera wskazówkę dotyczącą tempa wyświetlania kolejnych klatek w nanosekundach.

Testowanie

Użyj onRefreshRateChangedDebug do debugowania. Ta metoda powiadamia klienta o zmianie częstotliwości odświeżania wyświetlacza.

Do ręcznego testowania użyj aplikacji testowej TouchLatency zgodnie z rysunkiem 2:

touchlatency-app

Rysunek 2. aplikację testową TouchLatency;

W aplikacji testowej użyj suwaka, aby dostosować współczynnik renderowania do różnych wartości częstotliwości odświeżania dzielnika częstotliwości odświeżania wyświetlacza. Obserwuj, jak liczba klatek na sekundę zmienia się w zależności od żądanej wartości.