Microbenchmark

La libreria Jetpack Microbenchmark consente di eseguire il benchmark del tuo codice nativo Android, Kotlin o Java, da Android Studio. La libreria gestisce il warmup, misura le prestazioni del codice e il numero di allocazione e restituisce i risultati di benchmarking sia nella console di Android Studio sia in un file JSON con maggiori dettagli.

Ti consigliamo di profilare il codice prima di scrivere un benchmark. In questo modo puoi trovare operazioni costose che vale la pena ottimizzare. Può anche mostrare perché le operazioni sono lente, mostrando cosa succede mentre sono in esecuzione, ad esempio l'esecuzione su un thread a bassa priorità, la sospensione per accesso al disco o la chiamata inaspettata a una funzione costosa, come la decodifica bitmap.

I microbenchmark sono utili soprattutto per le attività della CPU eseguite molte volte nella tua app, noti anche come percorsi di hot code. Esempi validi sono RecyclerView lo scorrimento con un elemento mostrato alla volta, le conversioni o l'elaborazione dei dati e altre parti di codice che vengono utilizzate ripetutamente.

Altri tipi di codice sono più difficili da misurare con la libreria Microbenchmark. Poiché i benchmark vengono eseguiti in un loop, qualsiasi codice che non viene eseguito di frequente o che esegue diversamente quando viene chiamato più volte potrebbe non essere adatto per il benchmarking.

Per scoprire come utilizzare la libreria in un ambiente di integrazione continua (CI), consulta Eseguire benchmark nell'integrazione continua.

Evitare di misurare la cache

Cerca di evitare di misurare solo la cache. Ad esempio, un benchmark di layout di una visualizzazione personalizzata potrebbe misurare solo le prestazioni della cache di layout. Per evitare che ciò accada, puoi passare parametri di layout diversi in ogni loop. In altri casi, ad esempio durante la misurazione delle prestazioni del file system, ciò potrebbe risultare difficile perché il sistema operativo memorizza il file system nella cache mentre è in un loop.

Ottenere benchmark coerenti

Gli orologi dei dispositivi mobili passano in modo dinamico dallo stato alto, per le prestazioni a quello basso, per risparmiare energia o quando il dispositivo si surriscalda. La varietà di orologi può far variare notevolmente i valori dei benchmark, pertanto la libreria offre soluzioni per risolvere questo problema.

Blocca orologi (richiede un dispositivo rooted)

Il blocco degli orologi è il modo migliore per ottenere prestazioni stabili. Contribuisce a garantire che i cassetti non siano mai abbastanza alti da riscaldare il dispositivo o bassi se un benchmark non utilizza appieno la CPU. Può essere applicata con un'attività Gradle (gradlew lockClocks) o manualmente in CI. Sebbene questo sia il modo migliore per garantire prestazioni stabili, non è supportato sulla maggior parte dei dispositivi, poiché richiede un dispositivo Android rooted.

Modalità prestazioni sostenute

Window.setSustainedPerformanceMode() è una funzionalità supportata dai dispositivi che consentono a un'app di scegliere una frequenza CPU massima più bassa. Quando viene eseguita su dispositivi supportati, la libreria Microbenchmark utilizza una combinazione di questa API e avvia la propria attività per evitare la limitazione termica e stabilizzare i risultati.

Questa funzionalità è attivata per impostazione predefinita dal testInstrumentationRunner impostato dal plug-in Android per Gradle. Se vuoi utilizzare un runner personalizzato, puoi sottoclassare AndroidBenchmarkRunner e usarlo come testInstrumentationRunner.

Il runner avvia un'attività a schermo intero opaca per garantire che il benchmark venga eseguito in primo piano e senza altri disegni dell'app.

Messa in pausa dell'esecuzione automatica

Se non utilizzi il blocco dell'orologio o prestazioni sostenute, la libreria esegue il rilevamento automatico della limitazione termica. Se abilitato, il benchmark interno viene eseguito periodicamente per determinare quando la temperatura del dispositivo diventa abbastanza alta da ridurre le prestazioni della CPU. Quando rileva prestazioni della CPU ridotte, la libreria mette in pausa l'esecuzione per lasciare raffreddare il dispositivo, quindi riprova il benchmark attuale.

Samples

Guarda i seguenti esempi nel repository GitHub:

Risorse aggiuntive

Fornisci feedback

Per segnalare problemi o inviare richieste di funzionalità quando utilizzi il benchmarking, consulta lo strumento pubblico di monitoraggio dei problemi.