Od Androida 15 funkcja adaptacyjnej częstotliwości odświeżania (ARR) umożliwia dostosowywanie częstotliwości odświeżania wyświetlacza do liczby klatek treści za pomocą oddzielnych kroków synchronizacji pionowej.
Funkcja ARR zapewnia te korzyści:
Zmniejszenie zużycia energii: domyślnie ARR umożliwia urządzeniom działanie z niższymi częstotliwościami niż ich maksymalne częstotliwości odświeżania, przechodząc na wyższe częstotliwości tylko wtedy, gdy jest to konieczne dla wygody 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ż ARR wyświetlacz odświeża się w określonych odstępach czasu określonych przez aktywny tryb wyświetlania.
W panelach ARR częstotliwość synchronizacji pionowej i częstotliwość odświeżania są rozdzielone, co pozwala zmieniać częstotliwość 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. Ramka może być wyświetlana w dowolnym wielokrotnym od synchronizacji pionowej po minFrameIntervalNs
od ostatniej ramki.
Rysunek 1. Przykład 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 wdrożyć wersję 3 interfejsów API android.hardware.graphics.composer3
, jak opisano w następnych sekcjach.
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 ta opcja jest ustawiona, ARR jest włączone w przypadku określonych konfiguracji. Jeśli ustawisz wartośćnull
, tryb wyświetlania zostanie ustawiony na tryb inny niż ARR, np. wielokrotna częstotliwość odświeżania (MRR). Dzięki temu atrybucie wyświetlacz może być skonfigurowany jako MRR lub ARR, ale nie oba jednocześnie. vsyncPeriod
: synchronizacja pionowa wyświetlacza. W przypadku wyświetlaczy ARR ta wartość jest używana do wyprowadzenia obsługiwanych częstotliwości odświeżania.Dostawcy muszą ustawić wartość
DisplayConfiguration.vsyncPeriod
dla wszystkich urządzeń. 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 wartość
DisplayConfiguration.vsyncPeriod
to częstotliwość sygnału TE. Jeśli urządzenie ma wartośćminFrameIntervalNs
równą 8,3 ms, ale TE jest równe 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
: Zależne jest to od tego, kiedy wyświetlenie wymaga powiadomienia o nadchodzącym ujęciu.
IComposerClient.notifyExpectedPresent
pokazuje podpowiedź dotyczącą klatki, która prawdopodobnie zostanie wyświetlona, aby wyświetlacz mógł odpowiednio dostosować czas automatycznego odświeżania. frameIntervalNs
reprezentuje obecną częstotliwość, która następuje 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 wprowadzenia kolejnych zmian.
Funkcja IComposerClient.notifyExpectedPresent
jest wywoływana tylko wtedy, gdy parametr DisplayConfiguration.notifyExpectedPresentConfig
jest ustawiony, a występuje jeden z tych warunków dotyczących czasu:
- Niezsynchronizowany czas bieżący: oczekiwany czas prezentacji następnego obrazu różni się od zwykłej częstotliwości odświeżania wyświetlacza zdefiniowanej przez
frameIntervalNs
. - Czas oczekiwania przekroczony: odstęp czasowy między poprzednimi klatkami jest większy lub równy
notifyExpectedPresentConfig.timeoutNs
.
DisplayCommand.frameIntervalNs
DisplayCommand.frameIntervalNs
pokazuje wskazówkę dotyczącą tempa wyświetlania kolejnych klatek w nanosekundach.
Testowanie
Użyj onRefreshRateChangedDebug
do debugowania. Ta metoda informuje 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 liczba klatek na sekundę zmienia się w zależności od żądanej liczby.