Concetti e implementazione di Jetpack Compose
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 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 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, concentrati sempre sui valori mediani, in quanto forniscono la migliore stima dei tempi di avvio tipici degli utenti. 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 lo scorrimento o l'animazione, e restituisce i seguenti valori:
frameOverrunMs: il tempo di cui un determinato frame supera la scadenza. I numeri positivi indicano un frame eliminato accompagnato da jank o stuttering visibili. I numeri negativi indicano la velocità con cui un frame è stato completato rispetto alla scadenza hardware del sottosistema. Nota: questa metrica è 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 specifica e il tempo assoluto necessario per l'esecuzione. Per il monitoraggio del tempo, restituisce i tempi minimi, mediani e massimi in millisecondi.
La sezione di traccia di destinazione viene definita dalla chiamata di funzione
trace(sectionName) o dai limiti dei blocchi di livello inferiore tra
Trace.beginSection(sectionName) e Trace.endSection() o le 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.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}