Per impostazione predefinita, i microbenchmark forniscono informazioni sui tempi e sulle allocazioni del codice eseguito. Se vuoi capire perché il codice misurato funziona lentamente, puoi eseguire i benchmark con il profiler della CPU collegato.
Per selezionare la configurazione del profiler, aggiungi l'argomento androidx.benchmark.profiling.mode
del programma di analisi instrumentation con uno degli argomenti MethodTracing
, StackSampling
o None
, come mostrato nello snippet seguente.
Per ulteriori informazioni sulle opzioni, consulta Scegliere una configurazione di registrazione.
MethodTracing
è l'equivalente di "Traccia metodi Java" e StackSampling
è l'equivalente di "Metodo Java di esempio" come definito in quel 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 esegui il profiling di un benchmark, un file .trace
di output viene copiato sull'host nella directory insieme ai risultati JSON. Per esaminare i risultati della profilazione nel Profiler della CPU di Android Studio, seleziona File > Apri. Per saperne di più su come leggere e comprendere le tracce, consulta Esaminare le tracce.
MethodTracing
Il monitoraggio dei metodi è utile quando stai cercando di ottimizzare il codice perché può aiutarti a identificare i metodi che richiedono più tempo di esecuzione rispetto ad altri. Puoi quindi concentrarti sull'ottimizzazione dei metodi che hanno l'impatto maggiore sul rendimento.
Il profiling viene eseguito in sequenza dopo la misurazione del codice, pertanto il test genera risultati accurati sia per i tempi che per il profiling.
StackSampling
Il monitoraggio dei sample può anche aiutarti a identificare i metodi costosi senza l'overhead delle prestazioni del monitoraggio dei metodi. Tuttavia, se l'app entra in un metodo dopo che è stato acquisito uno stack di chiamate e il metodo esce prima della successiva acquisita, la chiamata al metodo non viene registrata. Per monitorare correttamente i metodi con ciclo di vita breve, utilizza il monitoraggio dei metodi anziché il monitoraggio dei sample.
Con il campionamento dello stack, il benchmark campiona gli stack di chiamate al termine del riscaldamento. Puoi controllare la frequenza dei campioni e la durata del campionamento utilizzando gli argomenti di instrumentation.
Su Android 10 (API 29) e versioni successive, il campionamento dello stack utilizza Simpleperf per campionare le callstack dell'app, incluso il codice C++. Su Android 9 (API 28) e versioni precedenti, utilizza
Debug.startMethodTracingSampling
per acquisire i campioni dello stack.
Puoi configurare questa modalità di profilazione aggiungendo un altro argomento di instrumentation:
androidx.benchmark.profiling.sampleFrequency
- Numero di campioni di 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.
Nessuno
Questo argomento non acquisisce un file di profilazione. Le informazioni su tempistiche e allocazioni vengono comunque misurate.
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Argomenti di instrumentazione dei microbenchmark
- Eseguire benchmark nell'integrazione continua