Cómo capturar métricas de macrocomparativas

Las métricas son el tipo principal de información que se extrae de tus comparativas. Se pasan a la función measureRepeated 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, 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"),
    ),
    // ...
)

Java

benchmarkRule.measureRepeated(
    /* packageName */ TARGET_PACKAGE,
    /* metrics */ Arrays.asList(
        new StartupTimingMetric(),
        new TraceSectionMetric("RV CreateView"),
        new TraceSectionMetric("RV OnBindView"),
    ),
    /* iterations */ 5,
    // ...
);

Los resultados de comparativas se muestran en Android Studio, como en la siguiente imagen. Si se definen varias métricas, todas se combinan en el resultado.

Resultados de TraceSectionMetric y FrameTimingMetric

StartupTimingMetric

StartupTimingMetric captura las métricas de tiempo de inicio de la app con estos valores:

  • timeToInitialDisplayMs: Es el tiempo que transcurre desde que el sistema recibe un intent de inicio hasta que procesa el primer fotograma de la Activity de destino.
  • timeToFullDisplayMs: Es el tiempo que transcurre desde que el sistema recibe un intent de inicio hasta que la aplicación informa por completo mediante el método reportFullyDrawn. La medición se detiene cuando se completa el procesamiento del primer fotograma después de la llamada reportFullyDrawn() (o contiene este). Es posible que esta medición no esté disponible en Android 10 (nivel de API 29) y versiones anteriores.

Para obtener más información sobre lo que contribuye al tiempo de inicio de la aplicación, consulta la página acerca del tiempo de inicio de la app.

Resultados de 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: Indica cuánto tiempo pasó un fotograma determinado dentro de su plazo. Los números positivos indican un fotograma descartado y un bloqueo o salto visible; los números negativos indican cuánto más rápido que el límite fue un fotograma. Disponible solo en Android 12 (nivel de API 31) y versiones posteriores.
  • frameDurationCpuMs: Indica cuánto tiempo tardó en producirse el fotograma en la CPU, tanto en el subproceso de IU como en RenderThread.

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 fotogramas lentos, consulta Procesamiento lento.

Resultados de FrameTimingMetric

TraceSectionMetric (experimental)

TraceSectionMetric captura el tiempo que ocupa una sección de registro que coincide con el sectionName proporcionado y da como resultado min, median y maximum en milisegundos. La sección de registro se define mediante una llamada a función trace(sectionName){} o con el código 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.

Para obtener más información sobre el registro, consulta Descripción general del registro del sistema y Cómo definir eventos personalizados.

Resultados de TraceSectionMetric