Es habitual ejecutar pruebas en IC sin Gradle, o bien de forma local si usas un sistema de compilación diferente. En este tema, se explica cómo configurar la biblioteca Benchmark durante el tiempo de ejecución sin Gradle.
Para obtener información sobre la manera en que son útiles las comparativas en IC y cómo usar los datos de las comparativas para detectar regresiones, consulta Cómo detectar regresiones con comparativas en IC, en el Blog para desarrolladores de Android.
Resultados
Benchmark genera un archivo JSON con resultados y metadatos de una ejecución de prueba. Este archivo JSON se ubica en el almacenamiento externo del dispositivo y debes extraerlo del dispositivo en cada ejecución.
La salida está inhabilitada de forma predeterminada, pero puedes habilitarla con el siguiente argumento de instrumentación, que debes pasar a tu comando am instrument
:
-e androidx.benchmark.output.enable true
De forma predeterminada, los informes se guardan en el dispositivo, dentro el directorio de descargas del almacenamiento externo de la app probada, que puedes encontrar con la siguiente consulta:
adb shell content query --uri content://media/external/file --projection _data --where "\"_data LIKE '%Android'\""
Puedes configurar la ruta en la que Benchmark escribe utilizando el siguiente argumento de instrumentación:
-e additionalTestOutputDir "device_path_you_can_write_to"
Almacenamiento y Android 10
Si, como en el complemento de Gradle para Android, es difícil extraer datos de salida del dispositivo antes de desinstalar una prueba, puedes pasar el argumento de instrumentación de más abajo. En los dispositivos que ejecutan Android 10 y versiones posteriores, este argumento permite conservar los archivos después de la desinstalación:
-e no-isolated-storage 1
Si también vas a orientar a la API 29 y versiones posteriores, debes permitir de manera explícita las opciones de almacenamiento heredado en el manifiesto de tus comparativas:
<application android:requestLegacyExternalStorage="true" ... >
Para obtener más información, consulta Cómo inhabilitar temporalmente el almacenamiento específico.
Cómo bloquear relojes
El complemento de Gradle para Benchmark proporciona el comando ./gradlew lockClocks
, que se usa para bloquear los relojes de la CPU de un dispositivo con derechos de administrador. Esto es útil para garantizar la estabilidad cuando tienes acceso a dispositivos con derechos de administrador, como compilaciones "userdebug". Puedes replicar esta acción con la secuencia de comandos de shell lockClocks.sh
, que está disponible en la fuente de la biblioteca.
Puedes ejecutar la secuencia de comandos directamente desde un host de Linux o Mac, o puedes enviarla al dispositivo con algunos comandos adb:
adb push path/lockClocks.sh /data/local/tmp/lockClocks.sh adb shell /data/local/tmp/lockClocks.sh adb shell rm /data/local/tmp/lockClocks.sh
Si ejecutas la secuencia de comandos de shell directamente en un host, este envía estos comandos a un dispositivo conectado.
Argumentos de instrumentación
Puedes configurar el comportamiento de la biblioteca con los siguientes argumentos de instrumentación:
androidx.benchmark.startupMode.enable
- Reconfigura el comportamiento de bucle para admitir el código de comparativas durante el inicio.
- Inhabilita el bucle de preparación.
- Captura 10 mediciones.
- Inhabilita el promedio de bucles, lo que minimiza la sobrecarga en microcomparativas.
- La configuración predeterminada es
false
.
androidx.benchmark.output.enable
- Permite escribir el archivo JSON resultante en almacenamiento externo.
- La configuración predeterminada es
false
.
androidx.benchmark.suppressErrors
- Lista de errores separada por comas, como
DEBUGGABLE,LOW-BATTERY
, para convertir en advertencias. - La configuración predeterminada es una lista vacía.
androidx.benchmark.profiling.mode
- Puede ser
none
,method
osampled
. - La configuración predeterminada es
none
. - Para obtener más información, consulta Generación de perfiles.
additionalTestOutputDir
- Establece en qué lugar del dispositivo se guardan los informes de comparativas de JSON y los resultados de la generación de perfiles.
- La configuración predeterminada es el directorio de descargas externo del APK de prueba.