Quando testi l'integrazione di ProfilingManager localmente, le richieste potrebbero essere limitate dalla limitazione di frequenza o le tracce in background potrebbero non essere attive durante il test dei trigger. Utilizza i comandi adb in questa pagina per disattivare la limitazione, estrarre i profili, conservare le tracce non oscurate, attivare le acquisizioni e ispezionare lo stato del servizio su un dispositivo di test.
Disattiva il limitatore di frequenza
Per disattivare i limitatori di frequenza del processo dell'app e del sistema per le richieste requestProfiling durante i test locali, esegui il seguente comando device_config:
adb shell device_config put profiling_testing rate_limiter.disabled true
Al termine del test, reimposta il flag:
adb shell device_config delete profiling_testing rate_limiter.disabled
Estrai i profili utilizzando ADB
Per ispezionare un profilo oscurato localmente su un dispositivo con accesso root, esegui adb
pull con il percorso restituito da getResultFilePath:
# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>
Conserva i risultati temporanei e non oscurati
Quando testi la profilazione localmente, puoi conservare i risultati nella directory temporanea in /data/misc/perfetto-traces/profiling/. Il confronto di una traccia di sistema non oscurata con la sua controparte oscurata ti aiuta a capire quali dati vengono eliminati durante l'oscuramento.
La modalità di conservazione dei risultati temporanei e non oscurati dipende dalla versione di Android installata sul dispositivo:
Android 16 (livello API 36) e versioni successive: puoi conservare i risultati non oscurati (se applicabile) e oscurati nella directory temporanea, che è stata ampliata in Android 16 per essere accessibile utilizzando
adb pullsu tutti i tipi di build senza accesso root (mentre Android 15 richiede l'accesso root per leggere/data/misc/perfetto-traces/profiling/). Per impedire al sistema di eliminare i risultati temporanei, esegui questo comando:adb shell device_config put profiling_testing delete_temporary_results.disabled trueAndroid 15 (livello API 35): nella directory temporanea, puoi conservare solo il risultato non oscurato, accessibile tramite
adbsolo nelle build con accesso root. (La tua app riceve comunque il profilo oscurato nella propria directory/data/user/0/<app>/files/profiling/, che il codice dell'app può leggere o copiare su qualsiasi build, anche se l'estrazione diretta da/data/user/0/...conadb pullrichiede l'accesso root oadb shell run-as <app>su una build abilitata al debug.) Per impedire al sistema di eliminare le tracce non oscurate, esegui questo comando:adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
Dopo aver acquisito un profilo, estrai il file conservato dalla directory temporanea:
# 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
In questi comandi, <trace-name> è il nome file di base (senza estensione) dal percorso restituito da ProfilingResult.getResultFilePath e la copia del tracciamento del sistema non oscurata aggiunge -unredacted all'estensione .perfetto-trace. Per
maggiori dettagli sulla struttura del nome file e sui valori <profile-type-ext>, consulta Posizioni
dei file e formati di denominazione.
adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled
Forza l'attivazione delle tracce in background per i test dei trigger
Poiché le tracce in background del sistema vengono eseguite a intervalli casuali in produzione, testare la profilazione basata su trigger localmente può essere difficile. Per forzare il sistema a eseguire una traccia in background continua e bypassare il limitatore di frequenza a livello di sistema per gli attivatori della tua app, imposta system_triggered_profiling.testing_package_name:
adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>
Qualsiasi periodo di attesa per trigger configurato con setRateLimitingPeriodHours è ancora valido. Poiché questa modalità viene eseguita continuamente finché non la disattivi, rimuovi il flag al termine del test:
adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name
Comandi di debug utili
Su Android 16 (livello API 36) e versioni successive con una versione recente del modulo Profiling, puoi utilizzare lo strumento cmd profiling_service su adb per attivare il logging dettagliato, attivare le raccolte di profili on demand e testare gli attivatori direttamente dalla riga di comando.
Attiva il logging di debug dettagliato
Per abilitare i log dettagliati di ProfilingService in logcat e diagnosticare la gestione e la distribuzione delle richieste, esegui questo comando:
adb shell cmd profiling_service enable-logs true
Richiedi una raccolta di profili on demand
Per avviare un'acquisizione immediata del profilo per un pacchetto specifico dalla riga di comando, esegui questo comando:
adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]
In questo comando, <profiling_type> è il valore della costante intera di
ProfilingManager (1 per un dump dell'heap Java, 2 per un profilo heap, 3 per
il campionamento dello stack o 4 per un tracciamento del sistema). Il processo dell'app di destinazione deve essere in esecuzione per i profili di memoria e stack, la richiesta è soggetta al limitatore di frequenza, a meno che non sia disattivato, e il ProfilingResult completato viene inviato solo ai listener globali registrati con registerForAllProfilingResults.
Registra e simula i trigger
Per registrare un trigger o attivare un evento di trigger simulato per un pacchetto e verificare la gestione del callback del trigger, esegui i seguenti comandi:
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>]
In questi comandi, <trigger_type> è il valore della costante intera di
ProfilingTrigger (ad esempio, 1 per TRIGGER_TYPE_APP_FULLY_DRAWN,
2 per TRIGGER_TYPE_ANR o 7 per TRIGGER_TYPE_OOM). L'esecuzione di
add-trigger registra l'attivatore con un periodo di attesa di 0 ore, sostituendo qualsiasi
registrazione esistente per quel tipo di attivatore. La simulazione di trigger che salvano uno snapshot della traccia in background (come 1 o 2) richiede una traccia in background attiva (consulta Forza l'attivazione delle tracce in background per i test dei trigger).
Raccogli lo stato complessivo di ProfilingManager
Su Android 16 (livello API 36) e versioni successive con una versione recente del modulo Profiling, puoi eseguire dumpsys su profiling_service per diagnosticare i problemi e ispezionare lo stato attuale di ProfilingManager:
adb shell dumpsys profiling_service
L'output dumpsys profiling_service è destinato solo a scopi informativi e di debug e il suo formato è soggetto a modifiche. Fornisce un'istantanea dello stato interno del servizio, tra cui:
- Limitazioni attive e stato del limitatore di frequenza.
- Configurazioni dispositivo attive.
- Trigger di app registrate e relativi cooldown di limitazione di frequenza.
- Sessioni di profilazione attive e in coda.
- Richieste di profilazione, occorrenze di trigger ed eventi di invio dei risultati recenti.