Concetti e implementazione di Jetpack Compose
Le metriche sono il tipo principale di informazioni estratte dai benchmark. Vengono
trasmesse alla funzione measureRepeated come List, che ti consente di
specificare più metriche misurate contemporaneamente. Per l'esecuzione del benchmark è richiesto
almeno un tipo di metrica.
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 e
FrameTimingMetric 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 periodo di 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 la chiamatareportFullyDrawn()o che la contiene. 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, concentrati sempre sui valori mediani, poiché forniscono la migliore stima dei tempi di avvio tipici degli utenti. Per
maggiori 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 lo scorrimento o l'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 accompagnato da scatti o interruzioni visibili. I numeri negativi indicano di quanto un frame è stato completato più velocemente rispetto alla scadenza dell'hardware del sottosistema. Nota: questa metrica è 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 saperne di più 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 specifica della traccia e il tempo assoluto necessario per l'esecuzione. Per il monitoraggio del tempo,
vengono restituiti i tempi minimo, mediano e massimo in millisecondi.
La sezione della traccia di destinazione è definita dalla chiamata di funzione
trace(sectionName) o dai limiti dei blocchi di livello inferiore tra
Trace.beginSection(sectionName) e Trace.endSection() o dalle 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 sulla tracciabilità, vedi Panoramica della tracciabilità del sistema e Definire eventi personalizzati.
TraceSectionMetric 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}