Powolne sesje to nowe dane Android Vitals w Konsoli Google Play. Powolna sesja to sesja, w której ponad 25% klatek jest spowolnionych. Klatka jest spowolniona, jeśli zostanie wyświetlona w ciągu maksymalnie 50 ms od poprzedniej klatki (odpowiednik 20 kl./s). Android Vitals raportuje również drugą kategorię danych Powolne sesje, której wartość docelowa wynosi 34 ms (odpowiednik 30 kl./s). Za pomocą Powolnych sesji możesz poznać liczbę klatek w grze, która wpływa na płynność działania gry.
W przyszłości Google Play zacznie zachęcać użytkowników do odchodzenia od gier, które nie zapewniają szybkości 20 FPS na telefonach. Pamiętaj, że Android Vitals rozpoczyna monitorowanie liczby klatek tylko po minucie gry.
Więcej informacji o tych danych znajdziesz w Centrum pomocy.
![grafiki przypominające wykres kołowy, które pokazują liczbę spowolnionych i spowolnionych klatek;](https://developer.android.com/static/topic/performance/vitals/images/slow-session.png?hl=pl)
Jak mierzyć liczbę klatek na sekundę i wykrywać spowolnione klatki
Polecenie dumpsys surfaceflinger timestats
na Androidzie pozwala podać średnią liczbę klatek na sekundę i prezentować histogram czasu dla wszystkich renderowanych warstw. Czas prezentowania ramki to odstęp między bieżącą klatką a poprzednią klatką. Aby zbierać dane o liczbie klatek na sekundę w grze, wykonaj te czynności:
Uruchom polecenie z flagami
enable
iclear
, aby rozpocząć przechwytywanie informacji:adb shell dumpsys SurfaceFlinger --timestats -clear -enable
Gdy gra będzie wystarczająco długo, uruchom polecenie jeszcze raz z flagą
dump
, aby pobrać informacje:adb shell dumpsys SurfaceFlinger --timestats -dump
Zbierane informacje obejmują łączną liczbę klatek i historię currentToPresent dla wszystkich warstw renderowanych przez SurfaceFlinger. Musisz znaleźć sekcję swojej gry, filtrując ją na podstawie atrybutu
layerName
:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
Powolną liczbę klatek w sesji można obliczyć na podstawie informacji o każdej warstwie.
Na przykład odsetek spowolnionych klatek przy 20 FPS = (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 ...
Po zebraniu wszystkich informacji wyłącz statystyki czasowe 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 wyświetlać się na ekranie lub renderować się dłużej niż cel określony przez dewelopera. Gra może być powiązana z CPU/GPU. Możliwe też, że urządzenie przegrzewa się i aktywuje ograniczanie temperatury. lub niezgodność liczby klatek na sekundę w grze i częstotliwości odświeżania ekranu.
Aby rozwiązać te problemy i poprawić wydajność gry, użyj Android Frame Pacing, Vulkan i ADPF.
Co to jest Zamieńpy
Biblioteka Android Frame Pacing (znana również jako Zamieńpy) jest częścią bibliotek AGDK. Dzięki aplikacji otypy gry OpenGL i Vulkan na Androidzie są płynnie renderowane i mają odpowiednie tempo klatek.
Tempo renderowania klatki to synchronizacja pętli logicznej i renderowania gry z podsystemem wyświetlacza systemu operacyjnego i podsystemem sprzętowym wyświetlacza. Podsystem wyświetlaczy w Androidzie został zaprojektowany w taki sposób, aby uniknąć zakłóceń wizualnych (tzw. zrywania), które mogą wystąpić, gdy wyświetlacz przełączy się na nową ramkę w trakcie aktualizacji. Aby uniknąć tych artefaktów, podsystem wyświetlania:
- 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
Aby zintegrować bibliotekę Android Frame Pacing z grą, zapoznaj się z tymi przewodnikami:
- Zintegruj funkcję Android Frame Pacing z mechanizmem renderowania OpenGL
- Integrowanie Android Frame Pacing z mechanizmem renderowania Vulkan
Jak używać Zamieńpy w silniku gry Unity
Unity zintegrował z silnikiem Android Frame Pacing. Aby włączyć tę funkcję w wersji Unity 2019.2 lub nowszej, zaznacz pole wyboru Zoptymalizowane tempo wyświetlania klatek w sekcji Ustawienia projektu > Odtwarzacz > Ustawienia w sekcji Android > Rozdzielczość i prezentacja:
![Okno ustawień projektu.](https://developer.android.com/static/topic/performance/vitals/images/unity-frame-pacing.png?hl=pl)
Możesz też automatycznie włączyć w kodzie logicznym opcję Zoptymalizowane tempo renderowania klatek, aby umożliwić Unity równomierne rozdzielanie klatek w celu zmniejszenia liczby klatek i zapewnić płynną 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. Z artykułu Mobile Frame Pacing (Tempo wydawania klatek na komórki) dowiesz się, jak włączyć bibliotekę Androida Frame Pacing i jak sterować tempem klatek za pomocą kodu w języku C++.
Co to jest Vulkan
Vulkan to nowoczesny, wieloplatformowy interfejs API do grafiki 3D, który powstał z myślą o zminimalizowaniu abstrakcji pomiędzy sprzętem graficznym urządzenia a grą. Vulkan to podstawowy niskopoziomowy interfejs API do obsługi grafiki na Androidzie, który zastępuje OpenGL ES. OpenGL ES jest nadal obsługiwany na Androidzie, ale jego funkcje nie są już rozwijane.
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 niedostępne w interfejsie OpenGL ES, takie jak bezwiązkowe interfejsy API czy śledzenie promieni
Jak używać interfejsu Vulkan w natywnych projektach na Androida
W ramach ćwiczenia z programowania Pierwsze kroki z Vulkan na Androidzie dowiesz się, jak skonfigurować potok renderowania Vulkan, a następnie wygenerować na ekranie teksturowany i obracający się trójkąt. 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, skonfiguruj interfejs Auto Graphics API.
![Okno ustawień projektu.](https://developer.android.com/static/topic/performance/vitals/images/unity-vulkan.png?hl=pl)
Możesz też ręcznie włączyć interfejs Vulkan, wyłączając Auto Graphics API i ustawiając Vulkan na najwyższym priorytecie na liście Graphics API. To jedyny sposób korzystania z platformy Unity 2021.1 lub jej poprzedniej wersji
![Okno ustawień projektu.](https://developer.android.com/static/topic/performance/vitals/images/unity-vulkan-2.png?hl=pl)
Użyj wtyczki VkQuality Unity do silnika, aby udostępnić rekomendacje interfejsu Graphic API w czasie uruchomienia gry na konkretnych urządzeniach.
Jak używać Vulkan w Unreal Game Engine
Aby włączyć interfejs Vulkan Graphics API, otwórz Ustawienia projektu > Platformy > Android > Build i kliknij Support Vulkan (Pomoc techniczna Vulkan). Jeśli wybierzesz zarówno Obsługa Vulkana, jak i Obsługa OpenGL ES3.2, Unreal będzie domyślnie używać Vulkana. Jeśli urządzenie nie obsługuje interfejsu Vulkan, Unreal korzysta z OpenGL ES 3.2.
![Okno ustawień projektu.](https://developer.android.com/static/topic/performance/vitals/images/unreal-vulkan.png?hl=pl)
Jeśli używasz określonych funkcji interfejsu Vulkan, które działają nieprawidłowo na określonych urządzeniach, możesz dostosować plik BaseDeviceProfile.ini
, aby wykluczyć te urządzenia. Z artykułu Dostosowywanie profili urządzeń i skalowalności na Androidzie dowiesz się, jak dostosować BaseDeviceProfile.ini
. Nowe sterowniki urządzeń mogą naprawić znane wcześniej nieprawidłowe urządzenia, dlatego aktualizuj plik BaseDeviceProfile.ini, aby korzystać z wszystkich optymalizacji.
Co to jest ADPF
Android Dynamic Performance Framework (ADPF) optymalizuje gry na podstawie dynamicznych funkcji zarządzania termią, procesorem i GPU na Androidzie. Skupiamy się na grach, ale funkcje te mogą się też przydać w innych aplikacjach wymagających dużej wydajności.
ADPF to zestaw interfejsów API, które umożliwiają grom i aplikacjom zapewniającym wysoką wydajność w bardziej bezpośredniej interakcji z systemami zasilania i termostatu urządzeń z Androidem. Za pomocą tych interfejsów API możesz monitorować dynamiczne zachowanie gier w systemach Android i optymalizować wydajność gier na zrównoważonym poziomie, który nie spowoduje 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 grami za pomocą kroków, które możesz wykonywać w swoim własnym tempie. Na końcu tego ćwiczenia z programowania będziesz mieć dostęp do tych funkcji:
- Thermal API: nasłuchuj zdarzeń termicznych urządzenia i reaguj, zanim urządzenie przejdzie 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
Funkcja adaptacyjna Unity to narzędzie dla deweloperów gier, którzy chcą zoptymalizować swoje gry na urządzeniach mobilnych, zwłaszcza pod kątem różnorodnego ekosystemu Androida. Wydajność adaptacyjna umożliwia grze dostosowanie się do wydajności i parametrów cieplnych urządzenia w czasie rzeczywistym, co zapewnia płynną i wydajną rozgrywkę.
Dostawca systemu Android Performance Max przeprowadzi Cię przez proces wdrażania ADPF w Unity.
![Okno ustawień projektu.](https://developer.android.com/static/topic/performance/vitals/images/unity-adpf.png?hl=pl)
Jak używać ADPF w Unreal Game Engine
![Okno ustawień projektu.](https://developer.android.com/static/topic/performance/vitals/images/unreal-adpf.png?hl=pl)
- Pobierz wtyczkę
- Skopiuj wtyczkę do folderu wtyczki projektu
- Włącz wtyczkę ADPF Unreal Engine w edytorze Unreal
- Uruchom ponownie Nierealistyczny edytor
- Stwórz i ugotuj grę
Wtyczka Android Dynamic Performance Framework(ADPF) do Unreal Engine zapewnia stabilną wydajność i zapobiega ograniczaniu przepustowości. Pobierz wtyczkę z GitHuba. Ta wtyczka zmienia funkcje przez ustawienie Nierealistycznych wartości konsoli.