Esegui il benchmark della tua app (visualizzazioni)

Concetti e implementazione di Jetpack Compose

Il benchmarking è un modo per ispezionare e monitorare le prestazioni della tua app. Puoi eseguire regolarmente i benchmark per analizzare ed eseguire il debug dei problemi di prestazioni e assicurarti di non introdurre regressioni nelle modifiche recenti.

Android offre due librerie e approcci di benchmarking per analizzare e testare diversi tipi di situazioni nella tua app: Macrobenchmark e Microbenchmark.

Macrobenchmark

La libreria Macrobenchmark misura le interazioni più ampie degli utenti finali, come l'avvio, l'interazione con la UI e le animazioni. La libreria fornisce il controllo diretto sull'ambiente di prestazioni che stai testando. Ti consente di controllare la compilazione e di avviare e arrestare l'app per misurare direttamente l'avvio o lo scorrimento effettivo dell'app.

La libreria Macrobenchmark inserisce eventi e monitora i risultati esternamente da un'app di test creata con i tuoi test. Pertanto, quando scrivi i benchmark, non chiami direttamente il codice dell'app, ma navighi all'interno dell'app come utente.

Microbenchmark

La libreria Microbenchmark ti consente di eseguire il benchmark del codice dell'app direttamente in un loop. È progettato per misurare il lavoro della CPU che valuta le prestazioni nel caso migliore, ad esempio l'accesso al disco memorizzato nella cache e Just in Time (JIT) riscaldato, che potresti vedere con un loop interno o una funzione hot specifica. La libreria può misurare solo il codice che puoi chiamare direttamente in isolamento.

Questi sono buoni casi per il benchmarking:

  • Quando l'app deve elaborare una struttura di dati complessa.
  • Quando la tua app ha un algoritmo specifico con un'elevata intensità di calcolo che chiama più volte durante l'esecuzione.

Puoi anche misurare parti della tua UI. Ad esempio, puoi misurare il costo del binding degli elementi RecyclerView, il tempo necessario per l'inflating di un layout o le prestazioni del passaggio di layout e misurazione della classe View.

Tuttavia, non puoi misurare il contributo dei casi sottoposti a benchmark all'esperienza utente complessiva. In alcuni scenari, il benchmarking non ti dice se stai migliorando un collo di bottiglia come i frame persi o il tempo di avvio dell'app. Per questo motivo, è fondamentale identificare prima questi colli di bottiglia con Android Profiler. Dopo aver trovato il codice che vuoi esaminare e ottimizzare, il loop di benchmark può essere eseguito ripetutamente per creare risultati meno rumorosi. In questo modo puoi concentrarti su un'area di miglioramento.

La libreria Microbenchmark fornisce informazioni solo sulla tua app, non sul sistema nel suo complesso. Pertanto, è più adatto ad analizzare le prestazioni di situazioni specifiche dell'app, non quelle che potrebbero riguardare problemi generali del sistema.

Confronto con la libreria di benchmark

Macrobenchmark Microbenchmark
Funzione Misura i punti di accesso o le interazioni di alto livello, come l'avvio di un'attività o lo scorrimento di un elenco. Misurare le singole funzioni.
Ambito Test out-of-process dell'app completa. Test in-process del lavoro della CPU.
Velocità Velocità di iterazione media. Può superare un minuto. Velocità di iterazione elevata. Spesso meno di 10 secondi.
Tracciamento I risultati vengono forniti con tracce di sistema. I risultati includono un tracciamento del sistema minimo e una traccia metodo per impostazione predefinita.