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.
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.vsyncPerioddla wszystkich urządzeń. W przypadku wyświetlaczy bez ARRDisplayConfiguration.vsyncPeriodto 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.vsyncPeriodto częstotliwość sygnału TE. Jeśli urządzenie maminFrameIntervalNso 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:
minFrameIntervalNs: maksymalna częstotliwość odświeżania obsługiwana przez wyświetlacz.NotifyExpectedPresentConfig: zależy od tego, kiedy wyświetlacz wymaga wcześniejszego powiadomienia o nadchodzącej ramce.
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:
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.