Per impostazione predefinita, i microbenchmark forniscono informazioni sulla tempistica e sulle allocazioni del codice eseguito. Se vuoi capire perché il codice misurato viene eseguito lentamente, esamina la traccia del metodo, acquisita per impostazione predefinita nelle versioni del sistema operativo supportate, o seleziona altre configurazioni di profilazione.
Per selezionare la configurazione del profiler, aggiungi l'argomento del runner di strumentazione
androidx.benchmark.profiling.mode
con uno degli argomenti
MethodTracing
(predefinito),
StackSampling
o None
, come mostrato nello
snippet seguente.
Per saperne di più sulle opzioni, consulta Registrare metodi Java/Kotlin.
MethodTracing
è l'equivalente del tracciamento e StackSampling
è l'equivalente del campionamento come definito in questo documento.
Groovy
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Kotlin
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
Quando profili un benchmark, un file di output .trace
viene copiato sull'host nella directory insieme ai risultati JSON. Per esaminare i risultati della profilazione in
Android Studio, seleziona il link Traccia metodo o Traccia campionamento stack
nei risultati del microbenchmark.
MethodTracing
Il tracciamento dei metodi è utile quando cerchi di ottimizzare il codice perché può aiutarti a identificare i metodi che richiedono più tempo per l'esecuzione rispetto ad altri. Puoi quindi concentrarti sull'ottimizzazione dei metodi che hanno il maggiore impatto sul rendimento.
La profilazione avviene in sequenza dopo la misurazione del codice, quindi il test restituisce sia risultati di profilazione che di temporizzazione accurati.
Il tracciamento dei metodi è attivo per impostazione predefinita.
StackSampling
Il campionamento della traccia può anche aiutare a identificare i metodi costosi senza l'overhead delle prestazioni della traccia del metodo. Tuttavia, se la tua app entra in un metodo dopo l'acquisizione di uno stack di chiamate e il metodo esce prima dell'acquisizione successiva, la chiamata al metodo non viene registrata. Per monitorare correttamente i metodi con cicli di vita brevi, utilizza la tracciatura dei metodi anziché la tracciatura dei campioni.
Con il campionamento dello stack, i campioni di benchmark chiamano gli stack dopo il completamento del warm-up. Puoi controllare il comportamento di campionamento, ad esempio la frequenza di campionamento e la durata del campionamento utilizzando gli argomenti di strumentazione.
Su Android 10 (API 29) e versioni successive, il campionamento dello stack utilizza Simpleperf per campionare
gli stack di chiamate delle app, incluso il codice C++. Su Android 9 (API 28) e versioni precedenti, utilizza
Debug.startMethodTracingSampling
per acquisire campioni di stack.
Puoi configurare questa modalità di profilazione aggiungendo altri argomenti di strumentazione:
androidx.benchmark.profiling.sampleFrequency
- Numero di campioni dello stack da acquisire al secondo.
- Tipo di argomento: numero intero
- Il valore predefinito è 1000 campioni al secondo.
androidx.benchmark.profiling.sampleDurationSeconds
- Durata del benchmark da eseguire.
- Tipo di argomento: numero intero
- Il valore predefinito è 5 secondi.
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- Salta la traccia del metodo quando è probabile che causi un errore ANR. Ti consigliamo di mantenere questa opzione abilitata per le esecuzioni CI, poiché gli errori ANR possono causare problemi durante le esecuzioni CI lunghe.
- Tipo di argomento: booleano
- Il valore predefinito è
true
Nessuno
Questo argomento non acquisisce un file di profilazione. Le informazioni su tempistiche e allocazioni vengono ancora misurate.
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Argomenti di strumentazione di microbenchmark
- Eseguire benchmark nell'integrazione continua