Conceptos y la implementación de Jetpack Compose
Las métricas son el tipo principal de información que se extrae de tus comparativas. Se
pasan a la measureRepeated función como List, que te permite
especificar varias métricas medidas a la vez. Se requiere al menos un tipo de métrica para que se ejecute la comparativa.
En el siguiente fragmento de código, se capturan las latencias de fotogramas y las métricas personalizadas de la sección de registro:
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
// ...
);
En este ejemplo, RV CreateView y RV OnBindView son los IDs de
bloques rastreables que se definen en RecyclerView. El código fuente de
l createViewHolder() método es un ejemplo de cómo puedes definir
bloques rastreables dentro de tu propio código.
StartupTimingMetric, TraceSectionMetric y
FrameTimingMetric se explican en detalle más adelante en este documento. Para obtener una
lista completa de las métricas, consulta las subclases de Metric.
Los resultados de comparativas se muestran en Android Studio, como se muestra en la figura 1. Si se definen varias métricas, todas se combinan en el resultado.
TraceSectionMetric y FrameTimingMetric.StartupTimingMetric
StartupTimingMetric captura las métricas de tiempo de inicio de la app con los siguientes valores:
timeToInitialDisplayMs: Es la cantidad de tiempo desde que el sistema recibe un intent de inicio hasta que renderiza el primer fotograma deActivityde destino.timeToFullDisplayMs: Es la cantidad de tiempo que transcurre desde que el sistema recibe un intent de inicio hasta que el métodoreportFullyDrawn()informa que la app se visualiza por completo y se encuentra operativa. La medición se detiene cuando se completa la renderización del primer fotograma después de la llamadareportFullyDrawn()(o que lo contiene). Es probable que esta medición no esté disponible en Android 10 (nivel de API 29) y versiones anteriores.
StartupTimingMetric genera los valores mínimos, medios y máximos de las iteraciones de inicio. Para evaluar la mejora del inicio, debes enfocarte en los valores medios, ya que proporcionan la mejor estimación de los tiempos de inicio típicos del usuario. Para
obtener más información sobre lo que contribuye al tiempo de inicio de la app, consulta Tiempo de inicio
de la app.
StartupTimingMetric.FrameTimingMetric
FrameTimingMetric captura información de latencia de los fotogramas que produce una comparativa, como un desplazamiento o una animación, y genera los siguientes valores:
frameOverrunMs: Es la cantidad de tiempo por el que un fotograma determinado no pudo cumplir su plazo. Los números positivos indican un fotograma descartado acompañado de un bloqueo o salto visible. Los números negativos indican cuánto más rápido se completó un fotograma en relación con el plazo de hardware del subsistema. Nota: Esta métrica solo está disponible en Android 12 (nivel de API 31) y versiones posteriores.frameDurationCpuMs: Es el tiempo que se demora en producir el fotograma en la CPU, tanto en el subproceso de IU como enRenderThread.
Estas mediciones se recopilan en la distribución: percentil 50, 90, 95 y 99.
Para obtener más información sobre cómo identificar y mejorar los fotogramas lentos, consulta Renderización lenta.
FrameTimingMetric.TraceSectionMetric
TraceSectionMetric captura la cantidad de veces que se produce una sección de registro específica y la cantidad absoluta de tiempo que tarda en ejecutarse. Para el seguimiento del tiempo, muestra el tiempo mínimo, el máximo y la mediana en milisegundos.
La sección de registro de destino se define mediante una llamada a función
trace(sectionName) o los límites de bloque de nivel inferior entre
Trace.beginSection(sectionName) y Trace.endSection() o sus
variantes asíncronas. Siempre selecciona la primera instancia de una sección de registro capturada durante una medición. De forma predeterminada, solo muestra las secciones de registro de tu paquete. Para incluir procesos fuera de tu paquete, establece targetPackageOnly =
false.
Para obtener más información sobre el registro, consulta Descripción general del registro del sistema y Cómo definir eventos personalizados.
TraceSectionMetric.Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Cómo crear perfiles de Baseline {:#creating-profile-rules}
- Cómo escribir una macrocomparativa
- Optimización y análisis de inicio de la app {:#app-startup-analysis-optimization}