Interwencje w trybie gry to optymalizacje w konkretnej grze wprowadzane przez producentów oryginalnego sprzętu (OEM) mające na celu poprawę wydajności gier, których deweloperzy już nie aktualizują. Na przykład:
- Użycie funkcji WindowManager do zmiany rozmiaru bufora.
- Używanie ANGLE zamiast natywnych sterowników GLES.
Możesz uzyskać pomoc dotyczącą korzystania z interfejsu Game Mode API, aby zastąpić interwencje w trybie gry oferowane przez producenta OEM.
Interfejs Game Mode API i interwencje są dostępne w tych usługach:
- Wybierz urządzenia z Androidem 12.
- urządzeń z Androidem 13 lub nowszym,
Każda gra może:
- Zaimplementuj zachowanie interfejsu Game Mode API,
- zaproponować OEM-om ustawienia interwencji w trybie gry.
- Wyraźna rezygnacja z interwencji w trybie gry.
Tło
W tej sekcji opisujemy, jak działają interwencje w trybie gry, i jak zoptymalizować grę pod kątem każdego trybu.
Zmiana rozmiaru bufora podręcznego przez WindowManager
Interwencja polegająca na zmianie rozmiaru bufora wstecznego przez WindowManager może zmniejszyć obciążenie karty graficznej urządzenia. Może to też zmniejszyć zużycie baterii, gdy gra jest uruchamiana z doceloną liczbą klatek na sekundę.
Włączenie funkcji zmiany rozmiaru może spowodować zmniejszenie wykorzystania GPU nawet o 30% i ogólnego zużycia energii przez system o 10%. Wyniki mogą się różnić w zależności od używanego urządzenia, warunków środowiskowych i innych czynników, takich jak jednoczesne przetwarzanie.
W nieskończonej grze, która jest powiązana z GPU, prawdopodobnie będzie wyższa częstotliwość klatek przy zmniejszonym obciążeniu GPU.
Zdecydowanie zalecamy, aby wszystkie gry były dobrze zsynchronizowane, ponieważ nierówna częstotliwość wyświetlania klatek znacząco wpływa na to, jak użytkownicy postrzegają wydajność.
Ograniczanie liczby klatek na sekundę
Ograniczenie liczby klatek na sekundę w Androidzie to interwencja w trybie gry, która pomaga uruchamiać gry z bardziej stabilną liczbą klatek na sekundę, aby zmniejszyć zużycie baterii. Ta interwencja jest dostępna w Androidzie 13 lub nowszym. Więcej informacji znajdziesz w artykule Omówienie ograniczania liczby klatek na sekundę.
Ocena interwencji w trybie gry
W tej sekcji używamy polecenia adb.
Konfigurowanie trybów
Zanim przetestujesz interwencje w trybie gry, musisz wyłączyć tryby gry w pliku konfiguracyjnym trybu gry aplikacji. W przeciwnym razie platforma je pominie i będzie uwzględniać tylko optymalizacje w grze.
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsBatteryGameMode="false"
android:supportsPerformanceGameMode="false"
/>
(Opcjonalnie) Tworzenie kopii zapasowej istniejącej konfiguracji urządzenia
W przypadku urządzeń Pixel lub innych może istnieć wcześniej skonfigurowana interwencja dotycząca gier w konfiguracji urządzenia. Możesz wysłać zapytanie o konfigurację za pomocą tego polecenia:
adb shell device_config get game_overlay <PACKAGE_NAME>
Jeśli zapytanie zwróci wartość null
, zignoruj istniejącą konfigurację. W przeciwnym razie zapisz go i przywróć po zakończeniu oceny.
Ocena interwencji
Aby ocenić interwencję polegającą na zmianie rozmiaru bufora podręcznego WindowManager, użyj tego polecenia, aby ustawić różne wartości zmiany rozmiaru bufora WindowManager w różnych trybach gry.
adb shell device_config put game_overlay <PACKAGE_NAME>
mode=2,downscaleFactor=0.9:mode=3,downscaleFactor=0.5
W powyższym przykładzie mode=2
to „Wydajność”, a mode=3
to „Oszczędzanie baterii”. Wartość downscaleFactor
jest podawana jako wartość procentowa stosowana do ustawienia zmiany rozmiaru (np. 0,7 to 70%, a 0,8 to 80%). Zmiana rozmiaru o 90% (0,9) jest prawie niezauważalna, natomiast zmiana o 50% (0,5) jest znacząca.
Ostrzeżenie: w Androidzie 12 rozmiar procesów podrzędnych może nie być prawidłowo zmieniany. W szczególności sprawdź, czy toasty i wyskakujące okienka są renderowane prawidłowo. Zalecamy ograniczenie ustawienia zmiany rozmiaru do co najmniej 70%.
Po skonfigurowaniu nowych wartości rozmiaru przełącz się między trybami gry, aby sprawdzić, jak na grę wpływa interwencja WindowManagera w zakresie zmiany rozmiaru bufora podręcznego:
adb shell cmd game mode [standard|performance|battery] <PACKAGE_NAME>
Po każdym wybraniu trybu gry uruchom ponownie grę. Interwencja polegająca na zmniejszeniu rozdzielczości wymaga ponownego uruchomienia aplikacji.
Rezygnacja z interwencji
Możesz określić, czy interwencja ma być stosowana w Twojej grze, rezygnując z interwencji. Każda interwencja ma własne ustawienie rezygnacji.
- Ten sam plik XML konfiguracji, który służy do włączania i wyłączania udziału w Programie testów gry, jest też używany do konfigurowania interwencji:
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:allowGameDownscaling="false"
android:allowGameFpsOverride="false"
/>
- Aby zrezygnować z użycia reklam, musisz ponownie skompilować grę i przesłać ją ponownie.
Domyślnie będą używane interwencje ustawione przez producentów oryginalnego sprzętu (OEM), chyba że wyraźnie zrezygnujesz z ich używania w swojej grze.
Materiały
Więcej informacji o mierzeniu i optymalizowaniu wydajności gry:
Profilatory systemu – analizują wykorzystanie procesora i wywołania grafiki.
Android GPU Inspector – profilowanie grafiki na Androidzie.
Biblioteka Android Frame Pacing (Biblioteka Android Frame Pacing) – pomaga w grach OpenGL i Vulkan płynne renderowanie i prawidłowe tempo wyświetlania klatek.
Android Performance Tuner – pozwala mierzyć i optymalizować liczbę klatek i grafikę na urządzeniach z Androidem na dużą skalę.
Power Profiler – funkcja umożliwiająca sprawdzenie, w których miejscach aplikacja zużywa więcej energii niż to konieczne.