Polecenia debugowania do profilowania lokalnego

Podczas testowania integracji ProfilingManager lokalnie żądania mogą być ograniczane przez ograniczanie liczby żądań lub ślady w tle mogą nie być aktywne podczas testowania aktywatorów. Użyj poleceń adb na tej stronie, aby wyłączyć ograniczanie, pobrać profile, zachować nieocenzurowane logi, aktywować przechwytywanie i sprawdzić stan usługi na urządzeniu testowym.

Wyłączanie ogranicznika liczby żądań

Aby wyłączyć ograniczenia liczby żądań requestProfiling na poziomie procesu aplikacji i systemu podczas testów lokalnych, uruchom to polecenie device_config:

adb shell device_config put profiling_testing rate_limiter.disabled true

Po zakończeniu testowania zresetuj flagę:

adb shell device_config delete profiling_testing rate_limiter.disabled

Pobieranie profili za pomocą ADB

Aby sprawdzić lokalnie profil z usuniętymi danymi na urządzeniu z dostępem na poziomie roota, uruchom adb pull ze ścieżką zwróconą przez getResultFilePath:

# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>

Zachowywanie wyników tymczasowych i nieocenzurowanych

Podczas testowania profilowania lokalnie możesz zachować wyniki w katalogu tymczasowym /data/misc/perfetto-traces/profiling/. Porównanie nieprzetworzonego śledzenia systemu z jego przetworzonym odpowiednikiem pomoże Ci zrozumieć, jakie dane są usuwane podczas przetwarzania.

Sposób przechowywania wyników tymczasowych i nieocenzurowanych zależy od wersji Androida zainstalowanej na urządzeniu:

  • Android 16 (poziom API 36) i nowsze: w katalogu tymczasowym możesz zachować zarówno nieocenzurowane (w stosownych przypadkach), jak i ocenzurowane wyniki. W Androidzie 16 katalog ten został rozszerzony, aby można było uzyskać do niego dostęp za pomocą adb pull we wszystkich typach kompilacji bez dostępu do roota (podczas gdy Android 15 wymaga dostępu do roota, aby odczytać /data/misc/perfetto-traces/profiling/). Aby zapobiec usunięciu wyników tymczasowych przez system, uruchom to polecenie:

    adb shell device_config put profiling_testing delete_temporary_results.disabled true
    
  • Android 15 (poziom API 35): w katalogu tymczasowym możesz zachować tylko nieocenzurowany wynik, który jest dostępny przez adb tylko w kompilacjach z dostępem do roota. (Aplikacja nadal otrzymuje ocenzurowany profil we własnym katalogu /data/user/0/<app>/files/profiling/, który kod aplikacji może odczytać lub skopiować w dowolnej kompilacji, ale pobieranie bezpośrednio z /data/user/0/... za pomocą adb pull wymaga dostępu do roota lub adb shell run-as <app> w kompilacji z możliwością debugowania). Aby zapobiec usuwaniu przez system nieocenzurowanych logów, uruchom to polecenie:

    adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
    

Po przechwyceniu profilu pobierz zachowany plik z katalogu tymczasowego:

# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>

# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted

W tych poleceniach <trace-name> to podstawowa nazwa pliku (bez rozszerzenia) ze ścieżki zwróconej przez ProfilingResult.getResultFilePath, a nieocenzurowana kopia śledzenia systemu dodaje -unredacted do rozszerzenia .perfetto-trace. Szczegółowe informacje o strukturze nazwy pliku i wartościach <profile-type-ext> znajdziesz w artykule Lokalizacje plików i formaty nazw.

adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled

Wymuś włączenie śladów w tle na potrzeby testowania aktywatorów

Ślady systemowe w tle są uruchamiane w środowisku produkcyjnym w losowych odstępach czasu, dlatego testowanie profilowania opartego na aktywatorach lokalnie może być trudne. Aby wymusić na systemie ciągłe śledzenie w tle i pominąć ogranicznik liczby żądań na poziomie systemu w przypadku aktywatorów aplikacji, ustaw system_triggered_profiling.testing_package_name:

adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>

Nadal obowiązuje okres oczekiwania na aktywator skonfigurowany za pomocą setRateLimitingPeriodHours. Ten tryb działa nieprzerwanie, dopóki go nie wyłączysz, więc po zakończeniu testów usuń flagę:

adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name

Przydatne polecenia debugowania

Na Androidzie 16 (poziom interfejsu API 36) lub nowszym z najnowszą wersją modułu Profiling możesz używać narzędzia cmd profiling_service przez adb, aby włączyć szczegółowe logowanie, aktywować zbieranie profili na żądanie i testować aktywatory bezpośrednio z wiersza poleceń.

Włączanie szczegółowego rejestrowania debugowania

Aby włączyć szczegółowe logi ProfilingService w logcat i diagnozować obsługę oraz dostarczanie żądań, uruchom to polecenie:

adb shell cmd profiling_service enable-logs true

Wysyłanie prośby o zbieranie profili na żądanie

Aby natychmiast rozpocząć przechwytywanie profilu dla konkretnego pakietu z wiersza poleceń, uruchom to polecenie:

adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]

W tym poleceniu <profiling_type> to wartość stałej całkowitej z ProfilingManager (1 dla zrzutu sterty Javy, 2 dla profilu sterty, 3 dla próbkowania stosu lub 4 dla śledzenia systemu). Proces aplikacji docelowej musi być uruchomiony w przypadku profili pamięci i stosu, żądanie podlega ogranicznikowi liczby żądań, chyba że jest wyłączone, a ukończony ProfilingResult jest dostarczany tylko do globalnych detektorów zarejestrowanych w registerForAllProfilingResults.

Rejestrowanie i symulowanie reguł

Aby zarejestrować aktywator lub wywołać symulowane zdarzenie aktywatora dla pakietu i zweryfikować obsługę wywołania zwrotnego aktywatora, uruchom te polecenia:

adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]

W tych poleceniach <trigger_type> to stała wartość całkowita z ProfilingTrigger (np. 1 dla TRIGGER_TYPE_APP_FULLY_DRAWN, 2 dla TRIGGER_TYPE_ANR lub 7 dla TRIGGER_TYPE_OOM). Uruchomienie polecenia add-trigger rejestruje regułę z 0-godzinnym okresem oczekiwania, zastępując istniejącą rejestrację tego typu reguły. Symulowanie aktywatorów, które zapisują zrzut śladu w tle (np. 1 lub 2), wymaga aktywnego śladu w tle (patrz Wymuszanie włączenia śladów w tle na potrzeby testowania aktywatorów).

Zbieranie ogólnego stanu ProfilingManager

Na Androidzie 16 (API na poziomie 36) i nowszym z najnowszą wersją modułu Profiling możesz uruchomić dumpsys w profiling_service, aby zdiagnozować problemy i sprawdzić bieżący stan ProfilingManager:

adb shell dumpsys profiling_service

Dane wyjściowe dumpsys profiling_service są przeznaczone wyłącznie do celów informacyjnych i debugowania, a ich format może ulec zmianie. Zapewnia on podsumowanie stanu wewnętrznego usługi, w tym:

  • Aktywne ograniczenia i stan ogranicznika liczby żądań.
  • Aktywne konfiguracje urządzeń.
  • Zarejestrowane aktywatory aplikacji i ich okresy oczekiwania na ograniczenie liczby żądań.
  • Aktywne i umieszczone w kolejce sesje profilowania.
  • Ostatnie żądania profilowania, wystąpienia aktywatorów i zdarzenia dostarczania wyników.