Począwszy od Androida 15, funkcja adaptacyjna częstotliwość odświeżania (ARR) umożliwia dostosowywanie częstotliwości odświeżania wyświetlacza do liczby klatek treści za pomocą odrębnych etapów VSync.
Funkcja ARR zapewnia te korzyści:
Zmniejszenie zużycia energii: domyślnie ARR umożliwia działanie urządzeń z niższymi niż maksymalne częstotliwościami odświeżania, przechodząc na wyższe częstotliwości tylko wtedy, gdy jest to niezbędne dla wrażeń użytkownika. Pozwala to zminimalizować niepotrzebne zużycie energii.
Zmniejszenie zacięcia: ARR eliminuje konieczność przełączania trybów, co jest znanym powodem zacięć.
Omówienie
W przypadku paneli innych niż AR ekran jest odświeżany ze stałą częstotliwością określoną przez aktywny tryb wyświetlania.
W panelach ARR częstotliwość VSync i częstotliwość odświeżania ekranu są rozdzielone, co umożliwia zmianę częstotliwości odświeżania w ramach jednego trybu wyświetlania w zależności od 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). Producenci OEM mają możliwość implementacji ARR na podstawie preferowanych kompromisów dotyczących mocy.
Na rysunku poniżej widać wyświetlacz z vsyncPeriod
240 Hz i minFrameIntervalNs
(maksymalna częstotliwość odświeżania) 120 Hz. Synchronizacja pionowa występuje co 4,16 ms. Po minFrameIntervalNs
od ostatniego obrazu obraz może być wyświetlany w dowolnym wielokrotnym od synchronizacji pionowej.
Rysunek 1. Przykład raportu ARR.
Implementacja
Android 15 obsługuje ARR dzięki nowym interfejsom HAL dla sprzętowego kompozytora (HWC) i zmianom na platformie. Aby włączyć ARR, producenci OEM muszą obsługiwać zmiany jądra i systemu na urządzeniach z Androidem 15 lub nowszym oraz zaimplementować wersję 3 interfejsów API android.hardware.graphics.composer3
zgodnie z poniższymi sekcjami.
Więcej informacji znajdziesz w implementacji referencyjnej Pixela interfejsów API obsługujących ARR.
DisplayConfiguration.aidl
Interfejs API DisplayConfiguration.aidl
określa konfigurację wyświetlania za pomocą atrybutów wyświetlania oraz tych atrybutów ARR:
- Opcjonalnie
vrrConfig
: jeśli jest ustawiona, ARR jest włączona w przypadku określonych konfiguracji. Jeśli ma wartośćnull
, tryb wyświetlania jest ustawiony na tryb inny niż ARR, np. na wielokrotne odświeżanie (MRR). Dzięki temu atrybutowi reklamę displayową można skonfigurować jako MRR lub ARR, ale nie na oba te sposoby. vsyncPeriod
: częstotliwość synchronizacji pionowej wyświetlacza. W przypadku wyświetlaczy ARR ta wartość jest używana do wyznaczenia obsługiwanych częstotliwości odświeżania.Dostawcy muszą ustawić wartość
DisplayConfiguration.vsyncPeriod
na wszystkich urządzeniach. W przypadku wyświetlaczy innych niż ARR jest toDisplayConfiguration.vsyncPeriod
, czyli częstotliwość odświeżania wyświetlacza. Jeśli urządzenie obsługuje częstotliwość 120 Hz, wartość ta musi wynosić 8,3 ms.W przypadku wyświetlaczy ARR
DisplayConfiguration.vsyncPeriod
to częstotliwość sygnału TE. Jeśli urządzenie ma wartośćminFrameIntervalNs
wynoszącą 8,3 ms, ale TE wynosi 240 Hz, ta wartość musi wynosić 4,16 ms.
VrrConfig.aidl
Interfejs API VrrConfig.aidl
zawiera te atrybuty:
minFrameIntervalNs
: maksymalna częstotliwość odświeżania obsługiwana przez wyświetlacz.NotifyExpectedPresentConfig
: ten stan określa się, gdy ekran wymaga wcześniejszego powiadomienia o nadchodzącej klatce.
IComposerClient.notifyExpectedPresent
podaje wskazówkę dotyczącą klatki, która może zostać wyświetlona, aby wyświetlacz mógł odpowiednio dostosować okres automatycznego odświeżania. frameIntervalNs
odpowiada aktualnemu rytmowi następującemu po expectedPresentTime
. Jeśli na przykład funkcja notifyExpectedPresent
jest wywoływana z wartością expectedPresentTime
N, a wartość frameIntervalNs
wynosi 16,6 ms, to następna klatka jest generowana po upływie N + 16,6 ms od bieżącego czasu N. Po bieżącym czasie N częstotliwość klatek wynosi 16, 6 ms do momentu wystąpienia kolejnych zmian.
Funkcja IComposerClient.notifyExpectedPresent
jest wywoływana tylko wtedy, gdy parametr DisplayConfiguration.notifyExpectedPresentConfig
jest ustawiony, a występuje jeden z tych warunków czasowych:
- Nieprawidłowy czas wyświetlania: oczekiwany czas wyświetlania następnego kadru odbiega od regularnej częstotliwości odświeżania wyświetlacza zdefiniowanej przez
frameIntervalNs
. - Czas oczekiwania przekroczony: odstęp czasowy między poprzednimi klatkami jest większy niż
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
podaje wskazówkę dotyczącą częstotliwości wyświetlania kolejnych klatek w nanosekundach.
Testowanie
Do debugowania używaj narzędzia onRefreshRateChangedDebug
. Ta metoda powiadamia klienta o zmianie częstotliwości odświeżania wyświetlacza.
Do ręcznego testowania użyj aplikacji testowej TouchLatency
, jak pokazano na rysunku 2:
Rysunek 2. Aplikacja do testowania opóźnień dotyku
W aplikacji testowej użyj suwaka, aby dostosować szybkość renderowania do różnych wartości częstotliwości odświeżania w podziale na częstotliwość odświeżania ekranu. Obserwuj, jak zmienia się liczba klatek w odniesieniu do żądanej wartości.