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, puedes ejecutar las comparativas con el Generador de perfiles de CPU conectado.

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

Para obtener más información sobre las opciones, consulta Cómo elegir una configuración de registro. MethodTracing es el equivalente de "Trace Java Methods" y StackSampling es el equivalente de "Sample Java Methods" 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 el Generador de perfiles de CPU en Android Studio, selecciona File > Open. Si quieres obtener más información para leer y comprender seguimientos, consulta Cómo inspeccionar seguimientos.

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.

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 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

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.