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.
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étodoreportFullyDrawn
. La medición se detiene cuando se completa el procesamiento del primer fotograma después de la llamadareportFullyDrawn()
(o que lo contiene). 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.
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 los fotogramas lentos, consulta Renderización lenta.
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.
PowerMetric (experimental)
PowerMetric
captura el cambio en la alimentación o la energía durante la prueba para el categories
proporcionado. Cada categoría seleccionada se divide en sus subcomponentes medibles, mientras que las categorías sin seleccionar se agregan a la métrica "sin seleccionar". Ten en cuenta que las métricas miden el consumo en todo el sistema, no el consumo por app, y actualmente se limitan a los dispositivos Pixel 6 y Pixel 6 Pro.
power<category>Uw
: La cantidad de energía consumida durante la prueba en esta categoría.energy<category>Uws
: La cantidad de energía transferida por unidad de tiempo durante la prueba en esta categoría.
Las categorías incluyen: CPU, DISPLAY, GPU, GPS, MEMORY, MACHINE_LEARNING, NETWORK y UNCATEGORIZED.
Con algunas categorías, como CPU
, puede ser difícil separar el trabajo que realizan otros procesos del que realiza tu propia app. Para minimizar la interferencia, quita o restringe las apps y las cuentas innecesarias.