Tempo klatek

Biblioteka Android Frame Pacing (znana również jako Replacepy) jest częścią pakietu SDK gier na Androida. Pomaga on w grach OpenGL i Vulkan renderowanie płynnego renderowania i prawidłowe tempo wyświetlania klatek na urządzeniach z Androidem.

Tempo renderowania klatki to synchronizacja logiki gry i pętli renderowania za pomocą funkcji systemu operacyjnego do wyświetlania i związany z nim sprzęt do wyświetlania. Wyświetlacz Androida został zaprojektowany tak, aby unikać pewnych zakłóceń wzrokowych, takich jak rozdarcie. Dzięki temu:

  • Wewnętrznie buforuję wcześniejsze klatki
  • Wykrywanie przesłanych klatek z opóźnieniem
  • Kontynuowanie wyświetlania bieżącej klatki po wykryciu spóźnionej klatki

Niespójne czasy wyświetlania klatek są spowodowane pętlą renderowania w grze z inną częstotliwością niż domyślny sprzęt do wyświetlania reklam. Pojawiają się problemy gdy pętla renderowania w grze działa zbyt wolno dla podstawowego wyświetlacza. co prowadzi do niespójnych czasów wyświetlania. Na przykład, gdy gra podejmuje próby renderowania na urządzeniu, które natywnie obsługuje 60 kl./s, pętla renderowania w grze powoduje, że na ekranie wyświetla się powtarzana klatka przez dodatkowe 16 ms. Ten rodzaj rozłączania powoduje znaczne niespójności w czasie renderowania klatek. na przykład 33 ms, 16 ms, 49 ms i tak dalej. Zbyt złożone sceny w dalszym ciągu się składają , bo powodują one powstawanie brakujących klatek.

Biblioteka Frame Pacing wykonuje te zadania:

  • Kompensuje zacinania spowodowane krótkimi klatkami w grze.
  • Stosuje zabezpieczenia synchronizacji w przypadku długich klatek, co powoduje zacinanie się i opóźnienia.
    • Wstrzyknięcie czeka na aplikację. Dzięki nim potok wyświetlania może wychwytywać zamiast pozwolić na zwiększenie presji.
    • Używa zabezpieczeń synchronizacji (EGL_KHR_fence_sync i VkFence).
  • Wybiera częstotliwość odświeżania, zapewniając elastyczność i płynną prezentację, jeśli Twoje urządzenie obsługuje kilka częstotliwości odświeżania.
  • Udostępnia statystyki debugowania i profilowania za pomocą klasy frame .

Aby dowiedzieć się, jak skonfigurować bibliotekę do działania w różnych trybach w zależności od Więcej informacji znajdziesz w artykule Obsługiwane tryby operacyjne.

Aby wdrożyć mechanizm renderowania OpenGL lub Vulkan, zapoznaj się z artykułem

Więcej informacji znajdziesz w artykule Prawidłowe tempo klatek.

Interwencja ograniczania liczby klatek na sekundę

Interwencja ograniczania liczby klatek na sekundę (FPS) umożliwia grą tempo z odpowiednią liczbą klatek na sekundę. przy użyciu tylko strony platformy bez konieczności podejmowania działań wobec programistów,

Wdrożenie interwencji ograniczania liczby klatek na sekundę obejmuje te komponenty:

Usługa GameManager

Komponent GameManagerService obsługuje wszystkie związane z użytkownikiem informacje o trybie gry i interwencjach w grze. Informacje o FPS są przechowywane w GameManagerService z innymi informacjami interwencyjnymi, takimi jak współczynnik zmniejszania rozdzielczości, w mapowaniu <PACKAGE_NAME, Interventions> każdego profilu użytkownika. Informacje o FPS są udostępniane po zmianie trybu gry lub aktualizacji interwencji. O Język UID jest unikalny dla każdego użytkownika PACKAGE_NAME i użytkownika i można go przetłumaczyć w parę <UID, Frame Rate>, aby wysłać ją do usługi SurfaceFlinger.

SurfaceFlinger

Komponent SurfaceFlinger już obsługuje ograniczanie liczby klatek na sekundę aplikacji, o ile liczba klatek jest dzielnikiem częstotliwości odświeżania ekranu. W przypadku vsync, SurfaceFlinger sprawdza poprawność vsync dla zmniejszonego limitu przez sprawdzenie, czy sygnatura czasowa vsync jest w fazie z liczbą klatek aplikacji. Jeśli liczba klatek nie działa zgodnie z vsync, SurfaceFlinger przechowuje do momentu przejścia do etapu liczby klatek i serwera vsync.

Poniższy rysunek opisuje interakcję między GameManagerService i SurfaceFlinger:

Interakcja między usługą GameManagerService a usługą SurfaceFlinger

Rysunek 1. Interakcja między GameServiceManager a SurfaceFlinger

SurfaceFinger zachowuje mapowanie pary <UID, Frame Rate>, aby ustawić nowy priorytet ograniczania liczby klatek. Parametr UID jest unikalny dla użytkowników i gier, więc każdy z nich użytkownik na jednym urządzeniu może mieć różne ustawienia liczby klatek w tej samej grze. Aby ograniczyć ruch liczby klatek w grze, GameServiceManager wywołuje metodę SurfaceFlinger, aby zastąpić liczbę klatek dla identyfikator UID. Dzięki temu mechanizmowi SurfaceFlinger aktualizuje mapowanie za każdym razem, zmienił się tryb gry lub zaktualizowano interwencję. SurfaceFlinger obsługuje zmianę liczby klatek na sekundę dzięki zatrzasku buforów.

Więcej informacji o ograniczaniu liczby klatek na sekundę znajdziesz w artykule Wprowadzenie do ograniczania FPS.