Le metriche sono il tipo principale di informazioni estratte dai benchmark. Vengono
passate alla measureRepeated
funzione come List, che ti consente di specificare
più metriche misurate contemporaneamente. Per l'esecuzione del benchmark è necessario almeno un tipo di metrica.
Il seguente snippet di codice acquisisce le metriche relative ai tempi 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 per il createViewHolder()
metodo è 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 visualizzati in Android Studio, come mostrato nella Figura 1. Se vengono definite più metriche, vengono combinate tutte nell'output.
TraceSectionMetric e
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric
acquisisce le metriche relative ai tempi di avvio dell'app con i seguenti valori:
timeToInitialDisplayMs: il tempo trascorso da quando il sistema riceve un intent di avvio a quando esegue il rendering del primo frame della destinazioneActivity.timeToFullDisplayMs: il tempo trascorso da quando il sistema riceve un intent di avvio a quando l'app segnala il rendering completo utilizzando ilreportFullyDrawn()metodo. 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 minimi, mediani e massimi 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 saperne di più su cosa contribuisce al tempo di avvio dell'app, consulta Tempo di avvio
dell'app.
StartupTimingMetric.FrameTimingMetric
FrameTimingMetric
acquisisce le informazioni sui tempi dei frame prodotti da un benchmark, ad esempio uno scorrimento o un'animazione, e restituisce i seguenti valori:
frameOverrunMs: il tempo di cui un determinato frame supera la scadenza. I numeri positivi indicano un frame eliminato e un'interruzione o un'esitazione visibile. I numeri negativi indicano la velocità di un frame rispetto alla scadenza. Nota: questa funzionalità è disponibile solo su Android 12 (livello API 31) e versioni successive.frameDurationCpuMs: il tempo impiegato dal frame per essere prodotto 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 saperne di più su come identificare e migliorare i frame lenti, consulta Rendering lento.
FrameTimingMetric.TraceSectionMetric
TraceSectionMetric
acquisisce il numero di volte in cui si verifica una sezione di traccia corrispondente a sectionName fornito e il tempo impiegato. Per il tempo, restituisce i tempi minimi, mediani e massimi in millisecondi. La sezione di traccia è definita either
dalla chiamata di funzione
trace(sectionName)
o dal codice tra
Trace.beginSection(sectionName)
e
Trace.endSection() o
dalle relative 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 tuo pacchetto; per includere i processi esterni al pacchetto, imposta targetPackageOnly = false.
Per saperne di più sulla traccia, consulta Panoramica della traccia di sistema e Definire eventi personalizzati.
TraceSectionMetric.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 sottocomponenti misurabili e le categorie non selezionate vengono aggiunte alla metrica "non selezionata".
Queste metriche misurano il consumo a livello di sistema, non il consumo per app, e sono limitate a Pixel 6, Pixel 6 Pro e dispositivi successivi:
power<category>Uw: la quantità di energia consumata durante la durata del tuo test in questa categoria.energy<category>Uws: la quantità di energia trasferita per unità di tempo durante la durata del test in questa categoria.
Le categorie includono quanto segue:
CPUDISPLAYGPUGPSMEMORYMACHINE_LEARNINGNETWORKUNCATEGORIZED
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 le interferenze, rimuovi o limita le app e gli account non necessari.
PowerMetric
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}