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

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.

arr-example

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.vsyncPeriod dla wszystkich urządzeń. W przypadku wyświetlaczy bez ARR DisplayConfiguration.vsyncPeriod to 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.vsyncPeriod to częstotliwość sygnału TE. Jeśli urządzenie ma minFrameIntervalNs o 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:

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

touchlatency-app

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.