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 pullwe 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 trueAndroid 15 (poziom API 35): w katalogu tymczasowym możesz zachować tylko nieocenzurowany wynik, który jest dostępny przez
adbtylko 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 pullwymaga dostępu do roota lubadb 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.