Le metriche sono il tipo principale di informazioni estratte dai benchmark. vengono passati alla funzione measureRepeated
come List
, che consente di specificare più metriche misurate contemporaneamente. È necessario almeno un tipo di metrica per eseguire il benchmark.
Il seguente snippet di codice acquisisce le metriche relative alla temporizzazione dei frame e alle sezioni di traccia personalizzate:
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 del metodo createViewHolder()
è un esempio di come puoi definire blocchi tracciabili all'interno del tuo
codice.
StartupTimingMetric
,
TraceSectionMetric
,
FrameTimingMetric
e PowerMetric
, sono trattati
in dettaglio più avanti in questo documento.
I risultati del benchmark vengono visualizzati in Android Studio, come mostrato nella figura 1. Se sono definite più metriche, tutte vengono combinate nell'output.
StartupTimingMetric
StartupTimingMetric
cattura le metriche relative ai tempi di avvio dell'app con i seguenti valori:
timeToInitialDisplayMs
: il tempo che intercorre tra il momento in cui il sistema riceve un intento di lancio e quello in cui viene visualizzato il primo frame della destinazioneActivity
.timeToFullDisplayMs
: il tempo che intercorre tra il momento in cui il sistema riceve un intento di lancio e quello in cui l'app segnala di essere stata completamente disegnata utilizzando il metodoreportFullyDrawn()
. La misurazione si interrompe al termine del rendering del primo frame dopo o contenente la chiamatareportFullyDrawn()
. Questa misurazione potrebbe non essere disponibile su Android 10 (livello API 29) e versioni precedenti.
StartupTimingMetric
restituisce i valori minimo, mediano e massimo delle iterazioni di avvio. Per valutare il miglioramento del tempo di avvio, concentrati sui valori mediani, poiché forniscono la stima migliore del tempo di avvio tipico. Per ulteriori informazioni su cosa contribuisce al tempo di avvio dell'app, consulta Tempo di avvio dell'app.
FrameTimingMetric
FrameTimingMetric
cattura le informazioni sui tempi dai frame prodotti da un benchmark, ad esempio scorrimento o animazione, e restituisce i seguenti valori:
frameOverrunMs
: il tempo di ritardo di un determinato frame rispetto alla scadenza. I numeri positivi indicano un frame perso e un tremolio o uno scatto visibili. I numeri negativi indicano quanto un frame è più veloce della scadenza. Nota: questa funzionalità è disponibile solo su Android 12 (livello API 31) e versioni successive.frameDurationCpuMs
: il tempo necessario per produrre il frame sulla CPU sia nel thread dell'interfaccia utente sia inRenderThread
.
Queste misurazioni vengono raccolte in una distribuzione del 50°, 90°, 95° e 99° percentile.
Per ulteriori informazioni su come identificare e migliorare i frame lenti, consulta Rendering lento.
TraceSectionMetric
TraceSectionMetric
registra il numero di volte in cui si verifica una sezione di traccia corrispondente al sectionName
fornito
e la durata del processo. Per il tempo, vengono visualizzati i tempi minimi, mediani e massimi 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 relative varianti asincrone. Seleziona sempre la prima istanza di una sezione della traccia acquisita durante una misurazione. Per impostazione predefinita, vengono visualizzate solo le sezioni di traccia del pacchetto. Per includere i processi esterni al pacchetto, imposta targetPackageOnly = false
.
Per ulteriori informazioni sul monitoraggio, consulta la Panoramica del monitoraggio del sistema e Definire eventi personalizzati.
PowerMetric
PowerMetric
acquisisce
la variazione di potenza o energia durante la durata del test per le
categorie di potenza fornite.
Ogni categoria selezionata viene suddivisa nei relativi componenti misurabili e le categorie non selezionate vengono aggiunte alla metrica "Non selezionata".
Queste metriche misurano il consumo a livello di sistema, non il consumo su base per app, e sono limitate ai dispositivi Pixel 6, Pixel 6 Pro e modelli successivi:
power<category>Uw
: la quantità di energia consumata durante 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 distinguere il lavoro svolto da altre procedure da quello svolto dalla tua app. Per ridurre al minimo le interferenze,rimuovi o limita app e account non necessari.
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Creare profili di baseline {:#creating-profile-rules}
- Scrivere un macrobenchmark
- Analisi e ottimizzazione dell'avvio dell'app {:#app-startup-analysis-optimization}