Powolne sesje (tylko gry)

Powolne sesje to nowe dane Android Vitals w Konsoli Google Play. Powoli to sesja, w której ponad 25% klatek jest spowolnionych. Ramka jest spowolniony, jeśli nie pojawi się w ciągu 50 ms od ostatniej klatki. (odpowiednik 20 FPS). Android Vitals zgłasza też drugą powolną sesję z celem 34 ms (odpowiednik 30 kl./s). Korzystając z powolnych sesji, poznasz liczbę klatek na sekundę w grze, co wpływa płynne działanie gry.

W przyszłości Google Play zacznie zachęcać użytkowników do odchodzenia od gier, które nie mogą i osiągają na telefonach 20 FPS. Pamiętaj, że Android Vitals rozpoczyna tylko monitorowanie liczby klatek po minucie gry.

Więcej informacji znajdziesz w Centrum pomocy. na temat danych.

grafiki przypominające wykres kołowy, które pokazują liczbę spowolnionych i spowolnionych klatek;
Rysunek 1. Powolna sesja w Android Vitals.
. .

Jak mierzyć liczbę klatek na sekundę i wykrywać spowolnione klatki

Polecenie dumpsys surfaceflinger timestats na Androidzie pokazuje średnią liczbę klatek na sekundę i Histogram czasu prezentowania dla wszystkich warstw, które są wyrenderowano. Czas prezentowania w klatce to odstęp między zarówno bieżąca, jak i poprzednia ramka. Oto krok po kroku, aby użyć tego polecenia do zbierania liczby klatek na sekundę w grze:

  1. Uruchom polecenie z flagami enable i clear, aby rozpocząć przechwytywanie informacje:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Gdy gra będzie wystarczająco długo, uruchom polecenie ponownie, tym razem flaga dump, aby zrzucić informacje:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Zrzutowe informacje obejmują łączną liczbę klatek i historię „PresentToPresent” dla argumentu wszystkich warstw wyrenderowanych przez SurfaceFlinger. Musisz znaleźć sekcji gry, filtrując dane według elementu layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    Powolną liczbę klatek w sesji można obliczyć na podstawie informacji każdą warstwę.

    Na przykład: odsetek spowolnionych klatek przy 20 kl./s = (suma wartości od 54 do 1000 ms) / łączna liczba klatek x 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0
    13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0
    24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0
    36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0
    66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0
    110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0
    150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0
    650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
    

    W zrzucie wyświetla się też średnia liczba klatek na sekundę każdej warstwy:

    ...
    averageFPS = 30.179
    ...
    
  3. Po zebraniu wszystkich informacji należy wyłączyć statystyki czasu za pomocą flagi disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Przyczyny wolnego renderowania klatki i rozwiązania

Istnieje wiele powodów, dla których ramka może się wyświetlać na ekranie lub renderować się przez dłuższy czas niż ustalana przez dewelopera. Gra może być powiązana z CPU/GPU. lub urządzenie przegrzewa się i aktywuje ograniczanie temperatury. lub liczba klatek na sekundę w grze jest niezgodna z wyświetlaczem urządzenia częstotliwość odświeżania danych.

Użyj funkcji Android Frame Pacing (Replacepy). Vulkan i ADPF w rozwiąż je i popraw wydajność gry.

Co to jest Zamieńpy

Biblioteka Android Frame Pacing (znana również jako Zamieńpy) jest częścią Biblioteki AGDK. Zamieńpy pomaga w grach OpenGL i Vulkan aby uzyskać płynne renderowanie 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 i podsystem do wyświetlania reklam w systemie operacyjnym. Android podsystem do wyświetlania reklam został zaprojektowany tak, aby uniknąć zakłóceń wizualnych (tzw. rozdarcia) który może wystąpić, gdy wyświetlacz przełączy się w niewielkim stopniu na nową ramkę. w ramach aktualizacji. Aby uniknąć tych artefaktów, podsystem wyświetlania następujące:

  • Wewnętrznie buforuje wcześniejsze klatki
  • Wykrywa przesłane klatki po terminie
  • Powtarza wyświetlanie poprzednich klatek po wykryciu spóźnionych klatek

Jak używać narzędzia Zamieńpy w projektach natywnych

Przeczytaj te przewodniki, by zintegrować bibliotekę Android Frame Pacing. w grę:

Jak używać Zamieńpy w silniku gry Unity

Unity zintegrował z silnikiem Android Frame Pacing. Aby włączyć tę funkcję funkcja w Unity 2019.2 lub nowszego, zaznacz pole wyboru Zoptymalizowane tempo wyświetlania klatek w sekcji Ustawienia projektu > Odtwarzacz > Ustawienia dla Androida > Rozwiązanie i prezentacja:

Okno ustawień projektu.
Rysunek 2. Włącz tempo klatek w Unity Engine.

Możesz też automatycznie włączyć w kodzie logicznym opcję Zoptymalizowane tempo wyświetlania klatek, aby umożliwić równomierne rozprowadzają klatki, aby zmniejszyć różnice w liczbie klatek i zapewnić płynniejszą rozgrywkę.

Jak używać Zamieńpy w Unreal Game Engine

Unreal w wersji 4.25 lub nowszej integruje się z biblioteką Android Frame Pacing, która jest częścią Android Game Development Kit. Artykuł Mobile Frame Pacing (Szybkość klatek mobilnych) wyjaśnia, jak włączyć Androida. Biblioteka Frame Pacing i zarządzanie tempem klatek w kodzie C++.

Co to jest Vulkan

Vulkan to nowoczesne rozwiązanie 3D działające na wielu platformach interfejs Graphics API z myślą o minimalizowaniu abstrakcji pomiędzy urządzeniami graficznymi i Twoją grę. Vulkan to główny niskopoziomowy interfejs API graficzny na Androida, zastępując OpenGL ES. OpenGL ES Usługa jest nadal obsługiwana na Androidzie, ale nie jest już objęta aktywną funkcją w Google Cloud.

Vulkan ma następujące zalety w porównaniu ze standardem OpenGL ES:

  • Bardziej wydajna architektura z niższym obciążeniem procesora w sterowniku karty graficznej
  • Nowe strategie optymalizacji mające na celu poprawę wydajności procesora
  • Nowe funkcje graficzne, które nie są dostępne w OpenGL ES, takie jak interfejsy API bez powiązań czy śledzenie promieni

Jak używać interfejsu Vulkan w natywnych projektach na Androida

Ćwiczenie z programowania Pierwsze kroki z Vulkan na Androidzie przeprowadzi Cię przez proces konfiguracji. z procesem renderowania interfejsu Vulkan, a następnie renderowanie teksturowanego, obracającego się trójkąta. na ekranie. Skorzystaj z ćwiczeń w Codelabs, aby dowiedzieć się, jak renderować grafikę w grze.

Jak używać interfejsu Vulkan w silniku gry Unity

Aby włączyć automatyczny wybór urządzeń w Unity, postępuj zgodnie z instrukcjami Auto Graphics API

Okno ustawień projektu.
Rysunek 3. Włącz interfejs Unity Auto Graphics API.

Możesz też ręcznie włączyć interfejs Vulkan, wyłączając Auto Graphics API. i ustaw Vulkan jako najwyższy priorytet na liście Graphics API. Jeśli jeśli korzystasz z Unity 2021.1 lub poprzedniej wersji, to jedyny sposób korzystania z Vulkana.

Okno ustawień projektu.
Rysunek 4. Ręcznie wybierz Vulkan jako główny interfejs Graphics API w Unity.

Użyj wtyczki VkQuality Unity do silnika aby w momencie wprowadzenia na rynek uzyskać zalecenia dotyczące interfejsu API do obsługi grafiki, który ma być używany w grze na konkretnych urządzeniach.

Jak używać Vulkan w Unreal Game Engine

Aby włączyć interfejs VulkanGraphic API, przejdź do Ustawień projektu > Platformy > Android > Utwórz i wybierz Support Vulkan (Pomoc dla Vulkana). Jeśli wybierzesz zarówno opcję Pomoc, Vulkan i obsługa OpenGL ES3.2, Unreal domyślnie używa Vulkana. Jeśli urządzenie nie obsługuje Vulkana i korzysta z OpenGL ES 3.2.

Okno ustawień projektu.
Rysunek 5. Włącz interfejs Vulkan w Unreal Engine.

Jeśli używasz określonych funkcji interfejsu Vulkan, o których wiadomo, że działają nieprawidłowo Na niektórych urządzeniach możesz dostosować plik BaseDeviceProfile.ini tak, aby wykluczyć tych urządzeniach. Zapoznaj się z artykułem Dostosowywanie profili urządzeń i skalowalności na Androida, aby dowiedzieć się, Dostosuj ustawienia BaseDeviceProfile.ini. Ponieważ nowe sterowniki urządzeń mogą naprawić błędy wcześniej znanych nieprawidłowych urządzeń, zaktualizuj plik BaseDeviceProfile.ini, aby pobrać wszystkie optymalizacje.

Co to jest ADPF

Platforma Android Dynamic Performance Framework (ADPF) optymalizuje gry na podstawie dynamicznych funkcji zarządzania termią, procesorem i GPU na Androidzie. Skupimy się głównie na grach, ale funkcje te można też wykorzystać w innych i aplikacjami bardziej wydajnymi.

ADPF to zestaw interfejsów API, które umożliwiają grom i aplikacjom wymagającym dużej wydajności współdziałają z systemami zasilania i termostatu urządzeń z Androidem. Na tych interfejsów API, możesz monitorować dynamiczne zachowanie systemów Android optymalizuj wydajność gry na zrównoważonym poziomie, który nie powoduje przegrzania urządzeń.

Oto główne funkcje ADPF:

  • Thermal API: monitoruj stan termiczny urządzenia, aby aplikacja mogła aktywnie dostosować zbiór zadań, zanim stanie się niezrównoważony.
  • CPU Performance Hint API: podaj wskazówki dotyczące wydajności, które pozwalają Androidowi wybrać odpowiednie ustawienia wydajności (np. punkt operacyjny procesora lub rdzeń) do danego zadania.
  • Interfejs Game Mode API i Game State API: włącz optymalizację rozgrywek, nadając priorytet wydajności lub żywotności baterii na podstawie ustawień użytkownika i konfiguracji gry.
  • Stała wydajność: podczas testów porównawczych włącz tryb stałej wydajności na urządzeniu, aby uzyskać wyniki, które nie zmieniają się przez dynamiczne taktowanie procesora.
  • Tryb oszczędzania energii: informuje sesję, że wątki w sesji ze wskazówkami dotyczącymi wydajności można bezpiecznie zaplanować, aby preferować oszczędność energii zamiast wydajności. Dostępne w Androidzie 15 (API leve 35).

Jak używać ADPF w natywnych projektach Androida

Ćwiczenie z programowania dotyczące integrowania funkcji adaptacyjnych z grą natywną pomoże Ci zintegrować funkcje ADPF z krokami, które możesz robić we własnym tempie. Na koniec w Codelabs, połączysz te funkcje:

  • Thermal API: słuchaj reakcji urządzenia na temperaturę i reaguj, zanim zostanie przełączone w tryb ograniczania temperatury.
  • Game Mode API: pozwala poznać ustawienia optymalizacji odtwarzacza (zmaksymalizować wydajność lub oszczędzać baterię) i odpowiednio je dostosować.
  • Game State API: daj systemowi znać o stanie gry (wczytywanie, granie, UI itp.), a system może odpowiednio dostosowywać zasoby (wzmacniacz wejścia-wyjścia czy CPU, GPU itd.).
  • Performance Hint API: przekaż systemowi informacje o modelu wątków i zadaniu, aby mógł odpowiednio przydzielić zasoby.

Jak używać ADPF w silniku gier Unity

Działanie adaptacyjne Unity to narzędzie dla deweloperów gier, którzy chcą zoptymalizować swoje gry na urządzeniach mobilnych, zwłaszcza w zróżnicowanym ekosystemie Androida. Wydajność adaptacyjna umożliwia dostosować grę do wydajności urządzenia i właściwościach termicznych urządzenia w czasie rzeczywistym, co zapewnia płynną i wydajną rozgrywkę.

Dostawca Androida o dostosowanej wydajności przeprowadzi Cię przez proces implementacji ADPF w Unity.

Okno ustawień projektu.
Rysunek 6. Zintegruj ADPF z Unity Engine.

Jak używać ADPF w Unreal Game Engine

Okno ustawień projektu.
Rysunek 7. Zintegruj ADPF z unreal Engine.
  1. Pobierz wtyczkę
  2. Skopiuj wtyczkę do folderu wtyczki projektu
  3. Włącz wtyczkę ADPF Unreal Engine w edytorze Unreal
  4. Uruchom ponownie Nierealistyczny edytor
  5. Stwórz i ugotuj grę

Wtyczka Android Dynamic Performance Framework(ADPF) w przypadku Unreal Engine zapewnia stabilną wydajność i zapobiega ograniczaniu temperatury. Pobierz wtyczkę z GitHuba. Ta wtyczka zmienia funkcje przez ustawienie Nierealistyczne wartości z konsoli.