Benchmark hero

I benchmark principali sono un insieme di benchmark che coprono i percorsi dell'utente dell'app di alto livello, come l'avvio dell'app o lo scorrimento nell'app open source Pokedex.

  • Benchmark degli elementi principali di avvio: monitoraggio del tempo che intercorre tra l'apertura dell'app e la visualizzazione dei contenuti.
  • Benchmark di scorrimento principali: misurazione delle prestazioni di scorrimento di una griglia lazy con immagini.

Configurazione del test

  • Selezione dell'app: abbiamo condotto questi test utilizzando l'app Pokedex open source, confrontando le sue versioni basate su View e basate su Compose. L'app è stata selezionata per rappresentare scenari reali e non è stata sviluppata dal team di Compose.
  • Configurazione hardware: i benchmark sono stati eseguiti su un Pixel 6 con Android 17 (API 37) con CPU e GPU bloccate. Prima di Compose 1.12, i benchmark venivano eseguiti su un Pixel 3a. A partire da Compose 1.12, Pixel 6 viene utilizzato come baseline delle prestazioni standard per i benchmark principali.
  • Configurazione della build: i benchmark utilizzano l'app creata in modalità di rilascio con R8 attivato. L'app è completamente precompilata per ridurre l'instabilità dovuta alla compilazione JIT (just-in-time).
  • Selezione dei risultati: per garantire un'analisi dello scenario peggiore, i valori anomali estremi e il rumore non rappresentativo sono stati esclusi dai risultati del benchmark. È stata quindi stabilita una base di riferimento selezionando i valori mediani dei dati sul rendimento del limite superiore

Benchmark degli eroi delle startup

Per misurare l'avvio, abbiamo utilizzato PokedexStartupBenchmark. La metrica PokedexStartupBenchmark misura il tempo necessario affinché l'app Pokedex sia visibile all'utente.

L'avvio dell'app può avvenire in uno di tre stati: avvio a freddo, avvio tiepido o avvio a caldo. Ogni stato influisce sul tempo necessario affinché un'app diventi visibile all'utente. In un avvio a freddo, l'app viene avviata da zero. In questo benchmark, misuriamo le prestazioni di avvio dell'app in stato di avvio a freddo. Ti consigliamo di ottimizzare sempre l'app partendo dal presupposto di un avvio completo. In questo modo, puoi anche migliorare le prestazioni degli avvii parziali e rapidi.

Le metriche che utilizziamo per misurare il tempo di avvio dell'app sono il tempo di attesa per la prima schermata e il tempo di attesa per la schermata completa.

Tempo di attesa per la prima schermata

Il tempo di visualizzazione iniziale (TTID) misura il tempo necessario a un'app per produrre il primo frame, inclusa l'inizializzazione del processo durante un avvio a freddo, la creazione dell'attività durante un avvio a freddo o a caldo e la visualizzazione del primo frame.

In PokedexStartupBenchmark, Compose 1.12 è alla pari con Views per TTID con un cold start.

Compose 1.12 è alla pari con Views per TTID
Figura 1: Compose 1.12 rispetto alle visualizzazioni per TTID.

Tempo di visualizzazione completa

Il tempo di visualizzazione completa (TTFD) misura il tempo necessario affinché l'app diventi interattiva. Ciò significa che tutti i dati sono stati caricati e disegnati. Per saperne di più sul tempo di visualizzazione completa, consulta Tempo di avvio dell'app.

In PokedexStartupBenchmark, Compose 1.12 è circa il 2% più lento di Views per TTFD con un avvio a freddo.

Compose 1.12 è circa il 2% più lento di Views per TTFD
Figura 2: Compose 1.12 rispetto alle visualizzazioni per TTFD.

Benchmark degli eroi di scorrimento

Per misurare le prestazioni di scorrimento abbiamo utilizzato PokedexScrollBenchmark. Misura le prestazioni di scorrimento della schermata dell'app Pokedex per una griglia lazy con immagini. In questo benchmark, l'intero schermo viene fatto scorrere e lanciato più volte e vengono caricati nuovi elementi. Le prestazioni di scorrimento vengono misurate in base alla percentuale di jank.

Tasso di jank

I dispositivi Android eseguono il rendering fino a 60 o 120 frame al secondo (FPS). Ciò significa che il sistema ha una scadenza rigorosa (ad esempio, 16,6 ms per 60 f/s) per produrre un frame. Se l'app impiega troppo tempo per eseguire il suo lavoro, ciò può causare un tremolio visibile che chiamiamo jank.

In PokedexScrollBenchmark, Compose corrisponde alle prestazioni di Views con 0 punti percentuali di jank in eccesso da Compose 1.9.0. Su Pixel 6 (testato a partire da Compose 1.11), sia Compose che Views raggiungono un tasso di jank dello 0%.

A partire da Compose 1.9.0, Compose corrisponde ai jank di scorrimento delle visualizzazioni
A partire da Compose 1.9.0, Compose corrisponde ai jank di scorrimento delle visualizzazioni.

Esegui benchmark degli eroi

Per convalidare i risultati delle prestazioni ed eseguire i benchmark localmente:

  1. Segui la guida di AndroidX per controllare il codice sorgente.
  2. Segui le istruzioni riportate nel file README del codice sorgente di Hero Benchmarks per creare gli APK di benchmark e di destinazione (pokedex-macrobenchmark e pokedex-macrobenchmark-target), installali su un dispositivo di test ed esegui le suite PokedexStartupBenchmark e PokedexScrollBenchmark utilizzando adb o Android Studio.

Puoi eseguire questi benchmark su qualsiasi dispositivo supportato, ad esempio un dispositivo specifico per cui stai ottimizzando la tua app. Tuttavia, per convalidare i risultati ufficiali, utilizza la stessa configurazione hardware.