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 komfortu użytkownika, co minimalizuje niepotrzebne zużycie energii.
- Ograniczenie zacinania się: ARR eliminuje konieczność przełączania trybów, co jest znaną przyczyną zacinania się.
Omówienie
Na panelach bez ARR odświeżanie wyświetlacza odbywa się ze stałą częstotliwością określoną przez aktywny tryb wyświetlania.
Na panelach ARR częstotliwość VSync 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 zasilania.
Na rysunku poniżej widać wyświetlacz z częstotliwością odświeżania vsyncPeriod wynoszącą 240 Hz i minFrameIntervalNs (maksymalną częstotliwością odświeżania) wynoszącą 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, jaką obsługuje wyświetlacz.NotifyExpectedPresentConfig: zależy od tego, kiedy wyświetlacz wymaga wcześniejszego powiadomienia o nadchodzącej klatce.
IComposerClient.notifyExpectedPresent
podaje wskazówkę dotyczącą klatki, która prawdopodobnie zostanie wyświetlona, 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 pojawi się w momencie N + 16,6 ms po bieżącym czasie N. Po czasie N liczba klatek wynosi 16,6 ms, dopóki nie nastąpią dalsze zmiany.
IComposerClient.notifyExpectedPresent jest wywoływana tylko wtedy, gdy ustawiona jest funkcja 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 określonej 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, jak pokazano na rysunku 2:TouchLatency
Rysunek 2. Aplikacja testowa TouchLatency.
W aplikacji testowej użyj suwaka, aby dostosować częstotliwość renderowania do różnych wartości częstotliwości odświeżania wyświetlacza. Obserwuj, jak zmienia się liczba klatek na sekundę w zależności od żądanej wartości.