Concetti e implementazione di Jetpack Compose
Le metriche sono il tipo principale di informazioni estratte dai benchmark. Vengono passati alla funzione measureRepeated come List, il che ti consente di specificare più metriche misurate contemporaneamente. Per eseguire il benchmark è necessario almeno un tipo di metrica.
Il seguente snippet di codice acquisisce le metriche relative alla durata 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 visualizzati in Android Studio, come mostrato nella Figura 1. Se vengono definite più metriche, vengono tutte combinate nell'output.
TraceSectionMetric e
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric acquisisce le metriche relative ai tempi di avvio dell'app con i seguenti valori:
timeToInitialDisplayMs: il tempo che intercorre tra la ricezione di un intent di avvio da parte del sistema e il rendering del primo frame dellaActivitydi destinazione.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 il disegno completo utilizzando il metodoreportFullyDrawn(). La misurazione si interrompe al completamento del rendering del primo frame dopo la chiamatareportFullyDrawn()o contenente la chiamata. 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 stima migliore dei tempi di avvio tipici degli utenti. Per
maggiori informazioni sui fattori che contribuiscono al tempo di avvio dell'app, consulta Tempo di avvio
dell'app.
StartupTimingMetric risultati.FrameTimingMetric
FrameTimingMetric acquisisce le informazioni di temporizzazione dai 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 saltato accompagnato da jank o stuttering visibili. I numeri negativi indicano quanto più velocemente è stato completato un frame rispetto alla scadenza dell'hardware del sottosistema. Nota: questa metrica è disponibile solo su Android 12 (livello API 31) e versioni successive.frameDurationCpuMs: il tempo impiegato dalla CPU per produrre il frame sia sul thread dell'interfaccia utente sia sulRenderThread.
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 di traccia specifica e il tempo assoluto necessario per l'esecuzione. Per il monitoraggio del tempo,
restituisce i tempi minimo, mediano e massimo in millisecondi.
La sezione della traccia di destinazione è definita dalla chiamata di funzione trace(sectionName) o dai confini del blocco di livello inferiore 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 processi esterni al tuo pacchetto, imposta targetPackageOnly =
false.
Per saperne di più sul tracciamento, consulta Panoramica del tracciamento del sistema e Definisci eventi personalizzati.
TraceSectionMetric risultati.Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Crea profili di riferimento {:#creating-profile-rules}
- Scrittura di un macrobenchmark
- Analisi e ottimizzazione dell'avvio dell'app {:#app-startup-analysis-optimization}