Argumentos de instrumentación de macrocomparativas

Configura el comportamiento de la biblioteca con los siguientes argumentos de instrumentación. Puedes agregarlos a tu configuración de Gradle o aplicarlos directamente cuando ejecutes la instrumentación desde la línea de comandos. Para establecer estos argumentos para todas las ejecuciones de prueba de línea de comandos y de Android Studio, agrégalos a testInstrumentationRunnerArguments:

android {
    defaultConfig {
        // ...
        testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
    }
}

También puedes configurar argumentos de instrumentación cuando ejecutas comparativas desde Android Studio. Para cambiar los argumentos, haz lo siguiente:

  1. Para editar la configuración de ejecución, haz clic en Edit y, luego, en la configuración.
    Edita la configuración de ejecución
    Figura 1: Edita la configuración de ejecución.
  2. Para editar los argumentos de instrumentación, haz clic en More en Instrumentation arguments.
    Edita los argumentos de instrumentación
    Figura 2: Edita los argumentos de instrumentación.
  3. Para agregar el argumento de instrumentación obligatorio, haz clic en Add en Instrumentation Extra Params.
    Agrega el argumento de instrumentación obligatorio
    Figura 3: Agrega el argumento de instrumentación obligatorio.

Si ejecutas la macrocomparativa desde la línea de comandos, usa -P android.testInstrumentationRunnerArguments.[name of the argument]:

./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile

Si invocas el comando am instrument directamente (lo que puede ser el caso en entornos de pruebas de CI), pasa el argumento a am instrument con -e:

adb shell am instrument -e androidx.benchmark.enabledRules BaselineProfile -w com.example.macrobenchmark/androidx.test.runner.AndroidJUnitRunner

Para obtener más información sobre cómo configurar comparativas en CI, consulta Comparativas en CI.

androidx.benchmark.compilation.enabled

Te permite inhabilitar la compilación entre cada iteración de las comparativas. De forma predeterminada, se vuelve a instalar y compilar la aplicación de destino entre cada comparativa para respetar el CompilationMode que se pasó a measureRepeated. Si inhabilitas esta opción, podrás omitir la reinstalación y la compilación si, por ejemplo, deseas compilar la app de destino por completo una vez antes de ejecutar el conjunto de pruebas y ejecutar todas las comparativas en esa app de destino compilada por completo.

  • Tipo de argumento: booleano
  • Configuración predeterminada: true

androidx.benchmark.dryRunMode.enable

Te permite ejecutar comparativas en un solo bucle para verificar si funcionan correctamente. Puedes usarla con pruebas periódicas como parte de la verificación.

  • Tipo de argumento: booleano
  • Configuración predeterminada: false

androidx.benchmark.enabledRules

Permite que los filtros se ejecuten en un solo tipo de prueba: la generación de perfiles de Baseline o la prueba de Macrobenchmark. También se admiten las listas separadas por comas.

  • Tipo de argumento: cadena
  • Opciones disponibles:
    • Macrobenchmark
    • BaselineProfile
  • Configuración predeterminada: No se especifica

androidx.benchmark.junit4.SideEffectRunListener

Es posible que obtengas resultados de comparativas incoherentes si se ejecuta un trabajo en segundo plano no relacionado mientras se ejecutan las comparativas.

Para inhabilitar el trabajo en segundo plano durante las comparativas, establece el tipo de argumento de instrumentación listener en androidx.benchmark.junit4.SideEffectRunListener.

  • Tipo de argumento: Cadena
  • Opciones disponibles:
    • androidx.benchmark.junit4.SideEffectRunListener
  • Configuración predeterminada: No se especifica

androidx.benchmark.fullTracing.enable

Habilita puntos de registro androidx.tracing.perfetto, como el seguimiento de composición de Jetpack Compose.

Debes configurar tu proyecto para poder capturar el seguimiento de composición desde las comparativas. Para obtener más información, consulta Cómo capturar un registro con Jetpack Macrobenchmark.

  • Tipo de argumento: booleano
  • Configuración predeterminada: false

androidx.benchmark.profiling.mode

Permite capturar archivos de registro mientras se ejecutan las comparativas. Las opciones disponibles son las mismas que las de la Biblioteca de microcomparativas. Para obtener más información, consulta las descripciones en Cómo generar perfiles con una microcomparativa.

  • Tipo de argumento: Cadena
  • Opciones disponibles:
    • MethodTracing
    • StackSampling
    • None
  • Configuración predeterminada: None

androidx.benchmark.startupProfiles.enable

Te permite inhabilitar la generación de perfiles de inicio durante las comparativas.

  • Tipo de argumento: booleano
  • Configuración predeterminada: true

androidx.benchmark.suppressErrors

Acepta una lista de errores separada por comas que se convertirán en advertencias.

  • Tipo de argumento: lista de cadenas
  • Opciones disponibles:

    • DEBUGGABLE

      El error DEBUGGABLE indica que el paquete de destino se ejecuta con debuggable=true en su manifiesto, lo que reduce de forma significativa el rendimiento del entorno de ejecución para admitir funciones de depuración. Para evitar este error, ejecuta comparativas con debuggable=false. El argumento depurable afecta la velocidad de ejecución de modo que las mejoras promedio de las comparativas podrían no transferirse a la experiencia de un usuario real o tener una regresión al rendimiento de lanzamiento.

    • LOW-BATTERY

      Cuando el nivel de la batería es bajo, los dispositivos a menudo reducen el rendimiento para ahorrar la batería restante, por ejemplo, inhabilitando los núcleos grandes. Esto ocurre incluso cuando los dispositivos están conectados. Solo suprime este error si estás generando deliberadamente un perfil de la app con rendimiento reducido.

    • EMULATOR

      El error EMULATOR te indica que las comparativas se ejecutan en un emulador, lo que no resulta representativo de los dispositivos de usuarios reales. Es posible que las mejoras de las comparativas del emulador no se transfieran a la experiencia de un usuario real o que tengan una regresión al rendimiento del dispositivo real. En su lugar, debes usar un dispositivo físico para obtener comparativas. Suprime este error con mucho cuidado.

    • NOT-PROFILEABLE

      El paquete de destino $packageName se ejecuta sin <profileable shell=true>. En Android 10 y 11, se requiere la condición de perfilable para que Macrobenchmark capture información de seguimiento detallada desde el proceso de destino, como las secciones de registro del sistema definidas en la app o las bibliotecas. Suprime este error con mucho cuidado.

    • METHOD-TRACING-ENABLED

      La ejecución de Macrobenchmark para la app que se está comparando tiene habilitado el seguimiento de métodos. Esto hace que la VM se ejecute más lento de lo habitual, por lo que solo debes considerar las métricas de los archivos de registro en términos relativos, por ejemplo, comparar qué tan rápida es la primera ejecución con la segunda. La supresión de este error puede generar resultados imprecisos si comparas comparativas con compilaciones con diferentes opciones de seguimiento de método.

  • Configuración predeterminada: una lista vacía

additionalTestOutputDir

Establece en qué lugar del dispositivo se guardan los informes de comparativas de JSON y los resultados de la generación de perfiles.

  • Tipo de argumento: cadena de ruta de acceso
  • Configuración predeterminada: directorio externo del APK de prueba