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.
- Dodaje sygnatury czasowe prezentacji, aby klatki były wyświetlane w odpowiednim czasie, a nie z wyprzedzeniem.
- Wykorzystuje rozszerzenia sygnatury czasowej prezentacji
EGL_ANDROID_presentation_time
iVK_GOOGLE_display_timing
.
- 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
iVkFence
).
- 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
- Zintegruj funkcję Android Frame Pacing z mechanizmem renderowania OpenGL
- Integrowanie Android Frame Pacing z mechanizmem renderowania Vulkan
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:
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.