Le metriche sono il tipo principale di informazioni estratte dai benchmark. Vengono
trasmesse alla funzione measureRepeated
come List
, che consente di specificare
più metriche misurate contemporaneamente. È necessario almeno un tipo di metrica per
l'esecuzione del benchmark.
Il seguente snippet di codice acquisisce le metriche relative alla tempistica dei frame e alla sezione di 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 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.
Per un elenco completo delle metriche, consulta le sottoclassi di Metric
.
I risultati del benchmark vengono inviati ad Android Studio, come mostrato nella Figura 1. Se vengono definite più metriche, tutte vengono combinate nell'output.

TraceSectionMetric
e
FrameTimingMetric
.StartupTimingMetric
StartupTimingMetric
acquisisce le metriche di temporizzazione dell'avvio dell'app con i seguenti valori:
timeToInitialDisplayMs
: il tempo che intercorre tra il momento in cui il sistema riceve un intent di avvio e il momento in cui viene visualizzato il primo frame della destinazioneActivity
.timeToFullDisplayMs
: il tempo che intercorre tra il momento in cui il sistema riceve un intent di avvio e il momento in cui l'app segnala di essere stata disegnata completamente utilizzando il metodoreportFullyDrawn()
. La misurazione si interrompe al completamento 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 dell'avvio, devi concentrarti sui valori mediani,
in quanto forniscono la migliore stima del tempo di avvio tipico. Per ulteriori informazioni su cosa contribuisce al tempo di avvio dell'app, consulta Tempo di avvio
dell'app.

StartupTimingMetric
risultati.FrameTimingMetric
FrameTimingMetric
acquisisce le informazioni sulla tempistica dei frame prodotti da un benchmark, ad esempio
uno scorrimento o un'animazione, e restituisce i seguenti valori:
frameOverrunMs
: il periodo di tempo in cui un determinato frame non rispetta la scadenza. I numeri positivi indicano un frame perso e un'interruzione o un'esitazione visibile. I numeri negativi indicano di 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 UI sia nelRenderThread
.
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.

FrameTimingMetric
risultati.TraceSectionMetric
TraceSectionMetric
acquisisce il numero di volte in cui si verifica una sezione di traccia corrispondente a sectionName
fornito e la quantità di tempo necessaria. Per il tempo, restituisce 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 loro 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 esterni al pacchetto, imposta targetPackageOnly = false
.
Per ulteriori informazioni sul tracciamento, vedi Panoramica del tracciamento del sistema e Definire eventi personalizzati.

TraceSectionMetric
risultati.PowerMetric
PowerMetric
acquisisce
la variazione di potenza o energia durante la durata del test per le
categorie di potenza fornite.
Ogni categoria selezionata è suddivisa nei suoi sottocomponenti misurabili e
le categorie non selezionate vengono aggiunte alla metrica "Non selezionate".
Queste metriche misurano il consumo a livello di sistema, non il consumo per app, e sono limitate a 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 separare il lavoro svolto da altri processi da quello svolto dalla tua app. Per ridurre al minimo le interferenze, rimuovi o limita app e account non necessari.

PowerMetric
risultati.Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Creare profili di base {:#creating-profile-rules}
- Scrivere un macrobenchmark
- Analisi e ottimizzazione dell'avvio dell'app {:#app-startup-analysis-optimization}