Cómo generar perfiles con Microbenchmark

De forma predeterminada, las microcomparativas te proporcionan información sobre el tiempo y las asignaciones del código ejecutado. Si deseas investigar por qué el código medido se ejecuta con lentitud, inspecciona el registro del método (que se captura de forma predeterminada en las versiones de SO compatibles) o selecciona otras configuraciones de generación de perfiles.

Para seleccionar la configuración del generador de perfiles, agrega el argumento del ejecutor de instrumentación androidx.benchmark.profiling.mode con MethodTracing (predeterminado), StackSampling o None, como se muestra en el siguiente fragmento.

Para obtener más información sobre las opciones, consulta Cómo registrar métodos de Java/Kotlin. MethodTracing es el equivalente del seguimiento y StackSampling es el equivalente del muestreo según se define en ese documento.

Groovy

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'
    }
}

Kotlin

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling"
    }
}

Cuando generas perfiles de una comparativa, se copia un archivo .trace de salida en el host en el directorio junto con los resultados JSON. Para inspeccionar los resultados de la generación de perfiles en Android Studio, selecciona el vínculo Method Trace o Stack Sampling Trace en los resultados de la microcomparativa.

MethodTracing

El seguimiento de métodos es útil cuando intentas optimizar el código, ya que puede ayudarte a identificar los métodos que tardan más en ejecutarse que otros. Luego, puedes enfocarte en optimizar los métodos que tienen el mayor impacto en el rendimiento.

La generación de perfiles se produce en secuencia después de la medición de código, por lo que la prueba genera resultados precisos de latencia y generación de perfiles.

El seguimiento de métodos está activado de forma predeterminada.

Nota: En algunas versiones de Android y ART, el seguimiento de métodos está desactivado de forma predeterminada. En estos casos, Android Studio muestra una advertencia.

StackSampling

El seguimiento de muestra también puede ayudar a identificar métodos costosos sin la sobrecarga de rendimiento del seguimiento de métodos. Sin embargo, si tu app ingresa en un método después de que se capturó una pila de llamadas y el método se cierra antes de la siguiente captura, la llamada al método no se registra. Para hacer un seguimiento adecuado de los métodos con ciclos de vida breves, usa el seguimiento de métodos en lugar del seguimiento de muestra.

Con el muestreo de pila, las comparativas toman pilas de llamadas después de que se completa la preparación. Puedes controlar el comportamiento de muestreo, como la frecuencia de muestreo y la duración de muestreo, mediante argumentos de instrumentación.

En Android 10 (API 29) y versiones posteriores, el muestreo de pila usa Simpleperf para tomar muestras de pilas de llamadas de apps, incluido el código de C++. En Android 9 (API 28) y versiones anteriores, usa Debug.startMethodTracingSampling para capturar muestras de pilas.

Puedes configurar este modo de generación de perfiles agregando otros argumentos de instrumentación:

  • androidx.benchmark.profiling.sampleFrequency

    • Cantidad de muestras de pila para capturar por segundo
    • Tipo de argumento: número entero
    • La configuración predeterminada es de 1,000 muestras por segundo
  • androidx.benchmark.profiling.sampleDurationSeconds

    • Duración de la comparativa que se ejecuta
    • Tipo de argumento: número entero
    • La configuración predeterminada es 5 segundos
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • Omite el seguimiento de métodos cuando es probable que cause un error de ANR. Debes mantener esta opción habilitada para las ejecuciones de CI, ya que los errores de ANR pueden causar problemas durante ejecuciones de CI largas.
    • Tipo de argumento: booleano
    • La configuración predeterminada es true.

Ninguno

Este argumento no captura un archivo de generación de perfiles. Aún se mide la información sobre el tiempo y las asignaciones.