Rozwiązywanie problemów z AGI

W tym artykule opisujemy, jak rozwiązać typowe problemy z inspektorem GPU na Androidzie (AGI)

Resetuję ustawienia AGI

AGI przechowuje swoje ustawienia w pliku ~/.agic. Usunięcie tego pliku spowoduje usunięcie wszystkich ustawień AGI, w tym listy Ostatnio otwarte logi czasu i wyniki weryfikacji urządzenia.

AGI przestaje działać na niektórych urządzeniach

Sprawdź, czy Twoja konfiguracja spełnia wszystkie wymagania.

Pomocne mogą też być następujące czynności:

  • Zatrzymaj wszystkie programy, które mogą wchodzić w interakcje z urządzeniem przez ADB (np. Android). Studio.

  • Włącz opcję Stay awake (w sekcji „Opcje programisty na urządzeniu z Androidem”), aby: zapobiega problemom pojawiającym się po wyłączeniu ekranu urządzenia w trybie uśpienia.

Systemowy program profilujący nie zgłasza aktywności GPU w grach OpenGL ES

Obecnie podczas śledzenia OpenGL ES obsługiwane są tylko liczniki GPU aplikacji. Informacje o aktywności GPU dla aplikacji OpenGL ES są aktywne w Google Cloud.

Awaria narzędzia do profilowania ramek w niektórych grach z obsługą interfejsu Vulkan

Najpierw musisz sprawdzić, czy Twoja gra poprawnie korzysta z interfejsu Vulkan. Użyj Warstwa walidacji Vulkan i upewnij się, że gra nie zgłasza żadnych błędów ani ostrzeżeń.

W przypadku błędu weryfikacji interfejsu Vulkan program profilujący ramki AGI nie jest oczekiwany do pracy.

Błąd gry podczas tworzenia logu czasu profilowania ramek

jeśli gra działa bez AGI, ale nie uruchamia się podczas tworzenia klatki; ślad profilu, może to powodować rozwidlenie innego procesu podczas uruchamiania gry kolejne wartości. W takim przypadku musisz podać nazwę procesu śledzenia. „Nazwa procesu”, w opcjach śledzenia.

Aby zidentyfikować ten problem, możesz sprawdzić dane wyjściowe logcat podczas tworzenia logu czasu i sprawdź, czy uruchamia się inny proces:

# Clear the logcat output
adb logcat -c

## Use AGI to attempt to create a frame profile trace

Look at the logcat output to identify the processes that are running AGI. 

adb logcat | grep "this process name"
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame:GameProcess

W większości gier jest tylko jeden proces. Powyższy przykład pokazuje, czego można się spodziewać która ma więcej niż 1 proces.

Gra rozpoczyna się od głównego procesu o nazwie com.example.mygame, a następnie tworzy rozwidlenie nowy proces o nazwie com.example.mygame:GameProcess. Jeśli podczas drugiego procesu renderowanie gry ma miejsce, musisz poinformować AGI, że jest to proces, który chcesz śledzić. Aby to zrobić, wpisz nazwę procesu w polu Process name atrybutu okno z opcjami śledzenia.

Awaria gry po użyciu AGI

Jeśli śledzenie nie zakończy się poprawnie, AGI może pozostawić niektóre ustawienia Androida w stanu, który może zakłócać kolejne uruchomienia aplikacji. Są to:

  • Ustawienia związane z warstwami interfejsu Vulkan:

    • enable_gpu_debug_layers

    • gpu_debug_app

    • gpu_debug_layers

    • gpu_debug_layer_app

  • Ustawienia związane z ANGLE:

    • angle_debug_package

    • angle_gl_driver_selection_values

    • angle_gl_driver_selection_pkgs

Jeśli po użyciu AGI występują problemy z aplikacją, możesz je usunąć za pomocą tych poleceń adb:

# Vulkan layers
adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layers
adb shell settings delete global gpu_debug_layer_app
# ANGLE
adb shell settings delete global angle_debug_package
adb shell settings delete global angle_gl_driver_selection_values
adb shell settings delete global angle_gl_driver_selection_pkgs

Twoja gra wygląda inaczej, gdy uruchamiasz ją przez AGI podczas tworzenia śledzenia profilu ramki

Aby utworzyć ślad profilu ramki, AGI przechwytuje wywołania interfejsu API grafiki wysyłane przez gry, co może mieć wpływ na renderowanie gry.

AGI rejestruje wywołania interfejsu Vulkan. W grach OpenGL ES AGI polega na ANGLE do tłumaczenia OpenGL ES na Vulkan. Jeśli gra wygląda inaczej (np. niektóre kolory nie są zgodne z Twoimi oczekiwaniami), gdy: jeśli uruchamiasz ją przez AGI, jest to prawdopodobnie błąd w AGI lub ANGLE. Możesz pomóc nam lepiej poznać główną przyczynę problemu przez wykonując poniższe czynności.

Gry związane z interfejsem Vulkan: śledzenie ze wszystkimi obsługiwanymi rozszerzeniami Vulkan

Opcja śledzenia Uwzględnij nieznane rozszerzenia określa, czy AGI ma zawiera rozszerzenia Vulkan, których nie obsługuje. (Przeglądaj listę obsługiwanych rozszerzeń).

Jeśli Twoja aplikacja korzysta z rozszerzenia, które nie jest obsługiwane przez AGI, możesz napotkać niepożądane zachowanie, w tym drobne błędy lub awarie, podczas ponownego odtwarzania śledzić.

Spróbuj włączyć tę opcję, a następnie uruchom inny śledzenie narzędzia do profilowania ramek. Jeśli mecz wyświetla się zgodnie z oczekiwaniami przy włączonej opcji, gra może korzystać z interfejsu Vulkan które nie jest obsługiwane przez AGI.

Gry OpenGL ES: uruchamianie tylko z użyciem ANGLE

Możesz uruchomić grę OpenGL ES z użyciem ANGLE, ale bez AGI, aby sprawdzić, czy błąd ponieważ chodzi o problem w ANGLE.

Jeśli próbowano już utworzyć śledzenie profilu ramki na platformie OpenGL ES to AGI zainstalował już na Twoim urządzeniu ANGLE. Pakiet ANGLE używany przez AGI nazywa się org.chromium.angle.agi.

Aby wymusić uruchomienie gry w ANGLE, użyj tych poleceń:

# Make sure that the AGI capture layer will be ignored
adb shell settings delete global enable_gpu_debug_layers
# Force the package com.example.mygame to use ANGLE
adb shell settings put global angle_debug_package org.chromium.angle.agi
adb shell settings put global angle_gl_driver_selection_values angle
adb shell settings put global angle_gl_driver_selection_pkgs com.example.mygame

Jeśli przy tych ustawieniach gra wygląda inaczej, prawdopodobnie jest to błąd ANGLE, a nie AGI. Jeśli gra wygląda prawidłowo przy tych ustawieniach, ale wygląda podczas tworzenia logu czasu AGI, prawdopodobnie jest to błąd w AGI.

Możesz zgłaszać błędy AGI, tworząc Problem z GitHubem.