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.
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.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Argumentos de instrumentación de microcomparativas
- Cómo ejecutar comparativas en la integración continua