Le metriche sono il tipo principale di informazioni estratte dai tuoi benchmark. Vengono trasferiti alla funzione measureRepeated
come List
, che ti consente di specificare più metriche misurate contemporaneamente. Per eseguire il benchmark,
è richiesto almeno un tipo di metrica.
Il seguente snippet di codice acquisisce le metriche di temporizzazione dei frame e della sezione della traccia personalizzata:
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
In questo esempio, RV CreateView
e RV OnBindView
sono gli ID dei blocchi tracciabili definiti in
RecyclerView
. Il codice sorgente per il metodo createViewHolder()
è un esempio di come è possibile definire blocchi tracciabili all'interno del tuo codice.
Le sezioni StartupTimingMetric
, TraceSectionMetric
, FrameTimingMetric
e PowerMetric
vengono trattate in dettaglio più avanti in questo documento.
I risultati dei benchmark vengono inviati ad Android Studio, come mostrato nella Figura 1. Se vengono definite più metriche, vengono combinate tutte nell'output.
Metrica dei tempi di avvio
StartupTimingMetric
acquisisce le metriche dei tempi di avvio dell'app con i seguenti valori:
timeToInitialDisplayMs
: il tempo che intercorre tra il momento in cui il sistema riceve un intent di lancio e il momento in cui esegue il rendering del primo frame della destinazioneActivity
.timeToFullDisplayMs
: il periodo di tempo che intercorre tra il momento in cui il sistema riceve un intento di lancio e il momento in cui l'app segnala un'elaborazione completa utilizzando il metodoreportFullyDrawn()
. La misurazione si interrompe al termine del rendering del primo frame dopo o contenente la chiamata areportFullyDrawn()
. Questa misurazione potrebbe non essere disponibile su Android 10 (livello API 29) e versioni precedenti.
StartupTimingMetric
restituisce i valori min, mediana e max dalle iterazioni di avvio. Per valutare il miglioramento delle startup dovresti concentrarti sui valori mediani, poiché forniscono la migliore stima dei tempi di avvio tipici. Per ulteriori informazioni su cosa contribuisce al tempo di avvio dell'app, consulta la sezione Tempi di avvio dell'app.
Metrica del tempo frame
FrameTimingMetric
acquisisce informazioni di tempo dai frame prodotti da un benchmark, come uno scorrimento o un'animazione, e restituisce i seguenti valori:
frameOverrunMs
: la quantità di tempo entro il quale un determinato frame non rispetta la scadenza. I numeri positivi indicano un frame ignorato e un jank o una stutter visibili. I numeri negativi indicano quanto un frame è più veloce rispetto alla scadenza. Nota: questa funzionalità è disponibile solo su Android 12 (livello API 31) e versioni successive.frameDurationCpuMs
: il tempo necessario per la produzione del frame sulla CPU sia nel thread dell'interfaccia utente che inRenderThread
.
Queste misurazioni vengono raccolte in una distribuzione del 50°, 90°, 95° e 99° percentile.
Per maggiori informazioni su come identificare e migliorare i frame lenti, consulta Rendering lento.
Metrica TraceSezione
TraceSectionMetric
acquisisce il numero di volte in cui si verifica una sezione di traccia corrispondente al sectionName
specificato
e il tempo necessario. Per il tempo, restituisce i tempi minimo, mediano e massimo in millisecondi. La sezione della traccia è definita dalla chiamata di funzione trace(sectionName)
o dal codice tra Trace.beginSection(sectionName)
e Trace.endSection()
o le rispettive varianti asincrone. Seleziona sempre la prima istanza di una sezione di traccia acquisita durante una misurazione. Per impostazione predefinita, restituisce solo le sezioni di traccia del pacchetto;
per includere i processi al di fuori del pacchetto, imposta
targetPackageOnly = false
.
Per ulteriori informazioni sul tracciamento, consulta Panoramica del tracciamento del sistema e Definizione di eventi personalizzati.
Metrica Power
PowerMetric
acquisisce
la variazione di potenza o energia nella durata del test per le
categorie di potenza fornite.
Ogni categoria selezionata viene suddivisa nei relativi sottocomponenti misurabili e
le categorie non selezionate vengono aggiunte alla metrica "non selezionata".
Queste metriche misurano il consumo a livello di sistema, non in base a ogni app, e sono limitate ai dispositivi Pixel 6, Pixel 6 Pro e versioni successive:
power<category>Uw
: la quantità di energia consumata per la durata del test in questa categoria.energy<category>Uws
: la quantità di energia trasferita per unità di tempo per la durata del test in questa categoria.
Le categorie includono:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
Con alcune categorie, come CPU
, potrebbe essere difficile separare il lavoro svolto da altri processi dal lavoro svolto dalla tua app. Per ridurre al minimo l'interferenza, rimuovi o limita le app e gli account non necessari.
Consigliato per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Crea profili di riferimento {:#Creating-profile-rules}
- Scrivere un Macrobenchmark
- Analisi e ottimizzazione dell'avvio dell'app {:#app-startup-analysis- responsabile}