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

Począwszy 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 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ż 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 przedstawiono wyświetlacz z vsyncPeriod 240 Hz i minFrameIntervalNs (maksymalna częstotliwość odświeżania) 120 Hz. VSync występuje co 4,16 ms. Po ostatnim minFrameIntervalNs od ostatniego obrazu można wyświetlić obraz z dowolną wielokrotnością VSync.

arr-example

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 umożliwić 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 jest ustawiona, ARR jest włączona w przypadku określonych konfiguracji. Jeśli ustawiona jest wartość null, tryb wyświetlania jest ustawiony na tryb inny niż ARR, na przykład wielokrotna częstotliwość odświeżania (MRR). Dzięki temu atrybucie wyświetlacz może być skonfigurowany jako MRR lub ARR, ale nie może być skonfigurowany jako oba te formaty.
  • vsyncPeriod: częstotliwość synchronizacji pionowej 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 na wszystkich urządzeniach. W przypadku wyświetlaczy innych niż ARR jest to DisplayConfiguration.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 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:

IComposerClient.notifyExpectedPresent podaje wskazówkę dotyczącą klatki, która prawdopodobnie zostanie wyświetlona, aby wyświetlacz mógł 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 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 czasu 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 bieżący: 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 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:

touchlatency-app

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. Zwróć uwagę, jak częstotliwość klatek zmienia się w zależności od żądanej częstotliwości.