Benchmark
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
13 de noviembre de 2024 | 1.3.3 | - | - | 1.4.0-alpha05 |
Cómo declarar dependencias
Para agregar una dependencia en Benchmark, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Macrocomparativas
Para usar Macrobenchmark en tu proyecto, agrega las siguientes dependencias a tu archivo build.gradle
para tu módulo de macrocomparativas:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.3" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.3") }
Microcomparativas
Para usar Microbenchmark en tu proyecto, agrega las siguientes dependencias a tu archivo build.gradle
para tu módulo de microcomparativas:
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.3" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.3") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
The Microbenchmark library also provides a Gradle plugin to use with your microbenchmark module.
This plugin sets build configuration defaults for the module, sets up
benchmark output copy to the host,
and provides the
./gradlew lockClocks
task.
To use the plugin, include the following line in the `plugins` block in your top-level
build.gradle
file:
Groovy
plugins { id 'androidx.benchmark' version '1.3.3' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.3" apply false }
Then apply the plugin to your benchmark module's build.gradle
file
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 1.4
Versión 1.4.0-alpha05
13 de noviembre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.4.0-alpha05
. La versión 1.4.0-alpha05 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema en el nivel de API 34 y versiones posteriores en el que
CompilationMode.None()
tenía un rendimiento incoherente que no era representativo del rendimiento inicial en el peor de los casos. Esto soluciona un cambio de plataforma que permite que el estado de compilaciónverify
de ART compile apps de forma parcial (solo afecta la carga de clases) poco después del primer inicio. (Ie48d0). - Se corrigió un problema por el que se podían capturar seguimientos (especialmente cortos) que no informaban la medición de las métricas de macrocomparativas integradas, debido a que el nombre del proceso se truncaba dentro del seguimiento de Perfetto. Ahora, la macrocomparativa soluciona este problema buscando el nombre del paquete truncado en todas las consultas integradas, además del nombre del paquete esperado. Ten en cuenta que las implementaciones personalizadas de
TraceMetric
o cualquier otro llamador directo dePerfettoSession.query
pueden implementar este mismo comportamiento cambiandoprocess.name LIKE "$packageName"
en una consulta de Perfetto para que sea(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. (I5bf01, b/377565760).
Versión 1.4.0-alpha04
30 de octubre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.4.0-alpha04
. La versión 1.4.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- (Experimental) Habilita la generación de perfiles de Baseline y las comparativas en apps instaladas para un usuario secundario, por ejemplo, cualquier app en dispositivos Android Auto sin cabeza. Esta compatibilidad se probó en algunas situaciones, pero infórmanos si no funciona para ti. (I9fcbe, b/356684617, b/373641155).
Correcciones de errores
isProfileable
ahora siempre se anula en las compilaciones de comparativas, yisDebuggable
también se anula en las compilaciones de comparativas ynonMinified
(captura de perfiles de referencia). (I487fa, b/369213505).- Se corrigió la detección de compilación en algunos dispositivos físicos anteriores al nivel de API 28, lo que afecta a
context.compilationMode
de JSON, así como el comportamiento deandroidx.benchmark.requireAot=true
(que ya no arroja errores de forma incorrecta) (Ic3e08, b/374362482). - En las métricas de
CpuEventCounter
, arroja si se observan mediciones no válidas (p. ej., instrucciones/cpucycles==0) (I8c503).
Versión 1.4.0-alpha03
16 de octubre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.4.0-alpha03
. La versión 1.4.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Macrobenchmark: Agrega
ArtMetric
, que se puede usar para inspeccionar la cobertura del perfil o el rendimiento general de Android Runtime. Captura la cantidad y la duración total de JIT, la inicialización de la clase (si está disponible) y la verificación de la clase. Además, cambiaCaptureInfo
para incluir la versión principal opcional de ART con la predeterminada. (I930f7). - Agrega
coefficientOfVariation
al resultado JSON de Benchmark para mostrar la estabilidad dentro de una ejecución de comparativa determinada. (Ib14ea).
Correcciones de errores
- Se corrigió
CollectBaselineProfileTask
cuando el dispositivo AVD tiene espacios. (Ia0225, b/371642809) - Se agregó una corrección especulativa para los errores de las excepciones de
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
. Ahora,MacrobenchmarkScope.killProcess()
(incluida la que se ejecuta antes de cada iteración, que se usa para implementar el comportamiento deStartupMode.COLD
) esperará para verificar que todos los procesos de la app hayan dejado de ejecutarse. (I60aa6, b/351582215). - Se solucionó el problema por el que se mostraba el error UNLOCKED_ en algunos emuladores con permisos de administrador. (Ic5117)
- Esta biblioteca ahora usa anotaciones de nulidad de JSpecify, que son de tipo de uso. Los desarrolladores de Kotlin deben usar los siguientes argumentos del compilador para aplicar el uso correcto:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I7104f, b/326456246).
Versión 1.4.0-alpha02
2 de octubre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.4.0-alpha02
. La versión 1.4.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se movieron las tareas de Gradle
lockClocks
yunlockClocks
para que estén en proyectos de comparativas, en lugar de estar disponibles en el nivel superior. Este cambio fue necesario porque, lamentablemente, no hay forma de registrarlos como acciones de nivel superior sin romper el aislamiento del proyecto. (I02b8f, b/363325823).
Correcciones de errores
BaselineProfileRule
ahora recopila perfiles para apps de varios procesos, ya que indica cada proceso en ejecución al final del bloque para volcar perfiles. Si una compilación basada en perfiles nunca encuentra un proceso para transmitir, la compilación fallará, ya que no es esperable tener datos de perfil dentro. Además, se agregó un argumento de instrumentación para controlar la duración de espera del volcado:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469).- Desde la comparativa
1.3.2
: Se corrigió el problema por el que Firebase Test Lab (FTL) no podía extraer archivos de resultados de perfiles de Baseline ni de Macrobenchmark del complemento de Gradle para perfiles de Baseline. (I2f678, b/285187547).
Para usar FTL, aplica el complemento al módulo de perfil de Baseline en el bloque de complementos con lo siguiente:
plugins {
...
id("com.google.firebase.testlab")
}
y, luego, configura Firebase Test Lab con lo siguiente:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Además, el dispositivo FTL creado se debe agregar a la extensión del perfil de Baseline:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versión 1.4.0-alpha01
18 de septiembre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.4.0-alpha01
. La versión 1.4.0-alpha01 contiene estas confirmaciones.
Nueva función: estadísticas de inicio de la app
- La versión inicial de las estadísticas de inicio de la app se puede habilitar en Macrobenchmark. (09fae38).
Para habilitarlo en una comparativa de inicio, haz lo siguiente:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Luego, ejecutar la comparativa de inicio analizará el seguimiento para buscar problemas comunes y los imprimirá después de las métricas en el resultado de la prueba de Studio en la pestaña de comparativas, p.ej.:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Esta función aún está en desarrollo, con mejoras en la documentación y la extensibilidad por delante, pero recibimos con gusto los comentarios.
Nuevas funciones
- Se agregó la propiedad
androidx.baselineprofile.suppressWarnings
de Gradle para suprimir todas las advertencias del perfil de Baseline. (314153a). - Las métricas de microcomparativas ahora se muestran en los seguimientos de Perfetto como contadores. (3214854).
- Se agregaron secuencias de comandos experimentales para inhabilitar jit (requiere permisos de administrador o reinicio del entorno de ejecución) y restablecer el estado de rendimiento o prueba del dispositivo. Por el momento, no se publican como tareas de Gradle. (7c3732b).
- Se agregó un argumento de comparativa para omitir las pruebas cuando se ejecutan en el emulador. Cuando se habilita la compilación de
automaticGenerationDuring
, las comparativas también activarán la generación de perfiles de Baseline. Esto fallará si se usan emuladores. Con el nuevo argumentoskipBenchmarksOnEmulator
, podemos omitir la prueba. (0c2ddcd) - Se cambió la lógica de habilitación de eventos de rendimiento para que se ejecute en niveles de API superiores o iguales a 23 (2550048).
Cambios en la API
- El argumento
PerfettoConfig
experimental existente paraMacrobenchmarkRule.measureRepeated()
se trasladó al nuevo objetoExperimentalConfig
.
Correcciones de errores
- Se aumentó el recuento de reintentos de
lockClocks.sh
(99e9dac). - No crees
nonMinified
ni comparaciones de tipos de compilación si ya existen. Debido a un error, incluso si existían los tipos de compilaciónnonMinified
y de comparativa, se iban a volver a crear. (e75f0a5). - Ignora las porciones no finalizadas de los resultados de
TraceSectionMetric
. (a927d20). - Se mejoró la verificación del emulador para considerar el prefijo
sdk_
. (1587de8). - Se consideran borrados los paquetes que no se están ejecutando en
FrameTimingGfxInfoMetric
. (35cc79c). - Se corrigió
androidx.benchmark.cpuEventCounter
, que generaba valores dañados para eventos que no son de instrucción. (06edd59). - Se corrigió
resumeTiming/runWithTimingDisabled
para que respete el orden de prioridad de las métricas y se reduzca significativamente el impacto de la pausa o la reanudación de las métricas de menor prioridad en los resultados de las métricas de mayor prioridad. Por ejemplo, si usas contadores de rendimiento de la CPU a través del argumento de instrumentacióncpuEventCounter.enable
, timeNs ya no se reduce significativamente cuando se produce la pausa o la reanudación. (5de0968).
Versión 1.3
Versión 1.3.3
16 de octubre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.3
. La versión 1.3.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió
CollectBaselineProfileTask
cuando el dispositivo AVD tiene espacios (Ia0225, b/371642809).
Versión 1.3.2
2 de octubre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.2
. La versión 1.3.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el problema por el que Firebase Test Lab (FTL) no podía extraer archivos de resultados de perfiles de Baseline o Macrobenchmark del complemento de Gradle para perfiles de Baseline. (I2f678, b/285187547).
Para usar FTL, aplica el complemento al módulo de perfil de Baseline en el bloque de complementos con lo siguiente:
plugins {
...
id("com.google.firebase.testlab")
}
y, luego, configura Firebase Test Lab con lo siguiente:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Además, el dispositivo FTL creado se debe agregar a la extensión del perfil de Baseline:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Versión 1.3.1
18 de septiembre de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.1
. La versión 1.3.1 contiene estas confirmaciones.
Correcciones de errores
- Se agregó la propiedad
androidx.baselineprofile.suppressWarnings
de Gradle para suprimir todas las advertencias del perfil de referencia (I7c36e, b/349646646). - Se corrigió el complemento de Gradle para perfiles de Baseline para usar
nonMinified…
ybenchmark…
preexistentes si la app los crea en lugar de crear wrappers. (Ia8934, b/361370179) - Se corrigió
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
cuandoautomaticGenerationDuringBuild
está habilitado en emuladores. Se usa un nuevo argumento para omitir la prueba. (If3f51, b/355515798). - Reducción de microcomparativas: Mantén las subclases de
org.junit.runner.notification.RunListener
en Proguard de la biblioteca de comparativas (Ic8ed5, b/354264743). - Se corrigió
TraceSectionMetric
para ignorar las secciones que no finalizan. Anteriormente, se consideraba que tenían una duración de -1, p.ej., durante la suma o la búsqueda de la duración mínima. (If74b7). - Se corrigió un problema en
FrameTimingGfxInfoMetric
por el que se bloqueaba la métrica de inicio si el proceso aún no se estaba ejecutando. (I6e412).
Versión 1.3.0
21 de agosto de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0
. La versión 1.3.0 contiene estas confirmaciones.
Cambios en las microcomparativas desde la versión 1.2.0
- El seguimiento de métodos está activado de forma predeterminada en las microcomparativas cuando se ejecutan en la mayoría de los dispositivos.
- El seguimiento de métodos se ejecuta como una fase independiente, después de las mediciones. Esto permite que se generen mediciones y seguimientos de métodos precisos a partir de una sola ejecución de comparativas.
- El seguimiento de métodos en algunas versiones del SO Android y ART afectará a las fases de medición posteriores. En estas versiones, el seguimiento de métodos está desactivado de forma predeterminada y se imprime una advertencia en el resultado de Studio.
- comparativas del subproceso principal y errores de ANR
- Se agregó
measureRepeatedOnMainThread
para las comparativas de subprocesos de IU (p.ej., las que interactúan con las IUs de Compose o View) para evitar errores de ANR cuando se ejecutan durante muchos segundos. - Se omiten los seguimientos de métodos si se espera que superen la fecha límite de evitación de ANR. Establece
androidx.benchmark.profiling.skipWhenDurationRisksAnr
como falso para inhabilitar este comportamiento (no se recomienda para ejecuciones de CI, ya que los errores de ANR pueden causar problemas en ejecuciones de CI largas).
- Se agregó
- Reducción
- Se incorporaron reglas de Proguard para mejorar las microcomparativas con la reducción habilitada.
- La reducción/R8 en un módulo de biblioteca requiere AGP 8.3 y se puede habilitar a través de
android.buildTypes.release.androidTest.enableMinification
en tubuild.gradle
. - Se agregó la API experimental de
BlackHole.consume()
para evitar la eliminación de código muerto (If6812, b/286091643).
- Métricas
- Función experimental de contador de eventos de CPU (métricas de
perf_event_open
, que requiere permisos de administrador en la mayoría de las versiones de la plataforma), acceso a través deInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(se puede establecer entrue
) yandroidx.benchmark.cpuEventCounter.events
se puede establecer, p. ej., en (Instructions,CpuCycles
). Esto debería ser compatible con algunos emuladores de userdebug, pero la compatibilidad no se probó en todos los emuladores disponibles.
- Función experimental de contador de eventos de CPU (métricas de
Cambios en MACRObenchmark desde la versión 1.2.0
- Se reorganizó el seguimiento de métodos para las macrocomparativas.
- Ahora, los seguimientos de métodos se limitan a la duración de
measureBlock
y pueden capturar varias sesiones si el proceso se inicia varias veces. - Anteriormente, el seguimiento de métodos solo funcionaba para las comparativas de
StartupMode.COLD
y no capturaba nada parameasureBlocks
que no reiniciaba el proceso de destino. - Se corrigió el volcado de seguimientos de métodos en la macrocomparativa, de modo que los seguimientos de métodos se capturen y sean válidos por completo, incluso en dispositivos más lentos. (I6349a, b/329904950).
- Ahora, los seguimientos de métodos se limitan a la duración de
- Se volcó correctamente el perfil de ART durante iteraciones individuales de
warmUp
cuando se cerró el proceso para que las mediciones deCompilationMode.Partial(warmup=N)
sean más precisas. (I17923). - Mensaje de error de transmisión de Drop Shader
- Se agregaron sugerencias de depuración para descartar el mensaje de error de transmisión del sombreador
- Se agregaron dos argumentos de instrumentación para anular el comportamiento de eliminación de sombreadores y solucionar las fallas cuando se realizan comparativas de apps sin
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: Se puede usar para omitir todas las bajadas de sombreadores (incluidas las que se realizan en los lanzamientos deStartupMode.Cold
), en especial cuando se realizan comparativas de apps que aún no usan profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: Se puede usar para tolerar fallas cuando se intenta colocar sombreadores, por ejemplo, cuando se realizan comparativas de apps sin profileinstaller 1.3 (I4f573).
- Se agregó una variante experimental de
MacrobenchmarkRule#measureRepeated
que toma unPerfettoConfig
personalizado para la grabación de seguimientos de Perfetto completamente personalizados. Ten en cuenta que los parámetros de configuración configurados de forma incorrecta pueden provocar que falle la clase Metric integrada. (Idfd3d, b/309841164, b/304038384). - Cancela las tareas de dexopt en segundo plano antes de ejecutar una macrocomparativa para reducir la interferencia. (I989ed).
- Macrobenchmark ahora espera 1 segundo a que la aplicación de destino borre un perfil de ART (antes esperaba 500 ms). (I85a50, b/316082056).
- Reestructuración de TraceSectionMetric
- Nota: Los cambios de
TraceSectionMetric
que se indican a continuación pueden afectar los resultados en el uso de CI y pueden crear discontinuidades o interrumpir el análisis. - La suma ahora es la opción predeterminada, ya que la mayoría de los usos de esta métrica se realizan para eventos repetidos y, en primer lugar, se descartarían los datos en estos casos.
- Se modificó para que sea más personalizable y tenga más modos disponibles.
- Los nombres de los modos ahora están incorporados en el nombre del resultado de la métrica (en Studio y JSON).
- Ahora admite las secciones creadas con
Trace.{begin|end}AsyncSection
.
- Nota: Los cambios de
- Métricas
- Encendido: Se agregaron
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
yPowerMetric.deviceSupportsPowerEnergy()
- Se cambió el nombre de
Metric.getResult
agetMeasurements
para que coincida con el tipo de datos que se muestra. - Se agregaron etiquetas log.w o de excepción a todas las fallas de detección de inicio. Esto no cambia el comportamiento actual (por lo que se arrojan algunos errores y otros no detectan el inicio en silencio), solo lo hace más comprensible. Por lo general, los que
Log.w()
y no informan las métricas de inicio son aquellos en los que faltan eventos que no son de fotogramas. Se arrojan excepciones cuando se detecta el inicio, excepto por la información de tiempo de fotogramas (de las secciones de IU/RT). (Id240f, b/329145809) - Se agregó la medición
frameCount
aFrameTimingMetric
para ayudar a descubrir situaciones en las que las mediciones cambian porque cambió la cantidad de fotogramas producidos (se agregaron animaciones nuevas y se corrigieron problemas de invalidación). (I1e5aa). - Se aclaró que
frameOverrunMs
es la métrica preferida para el seguimiento cuando está disponible en los documentos y por qué. (I18749, b/329478323). - Se corrigió el problema por el que se podían vincular marcos sin terminar al principio y al final del seguimiento, lo que se informaba de forma incorrecta como un solo marco extremadamente largo. (I39353, b/322232828).
- Se mejoró el error
FrameTimingMetric
cuando no se producen fotogramas y siempre se genera un vínculo para el seguimiento cuando se produce un error de análisis de métricas para ayudar a diagnosticar el problema. (I956b9). - Se corrigió la falla en
FrameTimingMetric
que no podía analizar el ID de fotogramas, en especial en ciertos dispositivos OEM. (Ia24bc, b/303823815, b/306235276). - Se relajó la rigurosidad de las verificaciones en
FrameMetrics
y se agregaron más detalles a los mensajes de error. (Iadede).
- Encendido: Se agregaron
Cambios en la captura de perfiles de Baseline o en el complemento de Gradle desde la versión 1.2.0
- Se aumentó la versión máxima recomendada de AGP a 9.0.0-alpha01.
- Asegúrate de que las tareas
mergeArtProfile
ymergeStartupProfile
siempre esperen a que se genere el perfil de Baseline. (I623d6, b/343086054). - Si generas un perfil de Baseline correctamente, se mostrará un resumen de los cambios (I824c8, b/269484510).
- Se agregó DSL para inhabilitar las advertencias (Ic4deb, b/331237001).
- Se corrigió un problema para garantizar que las comparativas usen los perfiles de Baseline generados cuando
automaticGenerationDuringBuild
está desactivado (Ic144f, b/333024280). - Se corrigieron las anulaciones de propiedades del complemento de Gradle
BaselineProfile
para habilitar la generación de perfiles de Baseline y las comparativas cuando se personaliza un tipo de compilaciónnonMinified
o de comparativas. (Ib8f05, b/324837887). - Se corrigió la inclusión de perfiles de Baseline de bibliotecas en AAR anteriores a AGP 8.3.0-alpha15. (I1d2af, b/313992099).
- Se corrigió la URL de salida del perfil de Baseline y de inicio al final de la tarea de generación. (I802e5, b/313976958).
Otros cambios significativos desde la versión 1.2.0
- Captura de seguimiento
- Se redujo el error EXITCODE 2 cuando se iniciaba perfetto de un error a una advertencia registrada.
- Se habilitó el seguimiento de AIDL de forma predeterminada en las comparativas(requiere el nivel de API 28) (Ia0af2, b/341852305).
- Habilita el seguimiento de etiquetas de Porter de forma predeterminada en las comparativas. Esto captura, por ejemplo, los puntos de seguimiento de wakelock. (Icfe44, b/286551983).
- Se aumentó el tiempo de espera del inicio de la captura de seguimiento para evitar fallas cuando se inicia el seguimiento en dispositivos más lentos (I98841, b/329145808).
- Se agregaron APIs públicas de
PerfettoTraceProcessor.Session.queryMetrics
con variantes JSON, textproto y proto binarias (sin decodificar). Estos te permiten consultar las métricas integradas enTraceProcessor
(I54d7f, b/304038382). - Se habilitó el inicio de bloqueo en el registro de seguimiento de Perfetto para reducir el riesgo de que falten datos al comienzo del seguimiento. Solo se admite en el nivel de API 33 y versiones posteriores (Ie6e41, b/310760059).
- Salida de JSON
- Se agregó información adicional en el contexto de comparativas en el resultado JSON:
context.artMainlineVersion
: Es la versión de número entero del módulo de línea principal de Art (si está presente en el dispositivo,-1
de lo contrario).context.build.id
: Es igual a android.os.Build.ID.context.build.version.codename
: Es igual a android.os.Build.VERSION.CODENAME.context.build.version.abbreviatedCodename
: Corresponde a la primera letra del nombre en código previo al lanzamiento (incluidas las compilaciones de lanzamiento) (Ie5020).
- Se agregó la lista
profilerOutput
al resultado JSON para facilitar las herramientas en torno a los seguimientos de generación de perfiles (p. ej., Perfetto, seguimientos de métodos) (I05ddd, b/332604449). - Se agregó una advertencia cuando se usa Android Test Orchestrator en módulos de comparativas, ya que esto provocará que los archivos JSON de salida por módulo se reemplacen de forma reiterada. (Ia1af6, b/286899049).
- Lanza cuando los nombres de archivo son más largos que 200 caracteres para evitar fallas poco claras cuando se escriben o se procesan archivos posteriores. (I4a5ab).
- Se agregó información adicional en el contexto de comparativas en el resultado JSON:
Versión 1.3.0-rc01
7 de agosto de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-rc01
. La versión 1.3.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió
androidx.benchmark.cpuEventCounter
, que producía valores dañados para eventos que no son de instrucción (I7386a, b/286306579). - Se corrigió
resumeTiming
/runWithTimingDisabled
para que respete el orden de prioridad de las métricas y reduzca significativamente el impacto de la pausa o la reanudación de las métricas de prioridad más baja en los resultados de las métricas de prioridad más alta. Por ejemplo, si usas contadores de rendimiento de la CPU a través del argumento de instrumentacióncpuEventCounter.enable
, timeNs ya no se reduce significativamente cuando se produce la pausa o la reanudación. (I39c2e, b/286306579, b/307445225) - Se redujo la posibilidad de que el muestreo de pila haga que
measureRepeatedOnMainThread
no alcance el tiempo de espera forzado del subproceso principal. Para ello, se quitó la conversión de muestreo de pila del subproceso principal. (I487a8, b/342237318). - Se quitó el esquema manual de acceso a las nuevas APIs de la plataforma, ya que esto se realiza automáticamente a través del modelado de API cuando se usa R8 con AGP 7.3 o versiones posteriores (p.ej., R8 versión 3.3) y para todas las compilaciones cuando se usa AGP 8.1 o versiones posteriores (p.ej., D8 versión 8.1). Se recomienda a los clientes que no usen AGP que actualicen a la versión 8.1 de D8 o una posterior. Consulta este artículo para obtener más detalles. (I9496c, b/345472586).
- Se agregó la verificación de versión de agp para enviar el nombre del paquete como argumento de instr. Antes de AGP 8.4.0, el nombre del paquete de la app de destino no se podía enviar a la app de instrumentación a través de argumentos de instrumentación. (0c72a3f).
Versión 1.3.0-beta02
10 de julio de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-beta02
. La versión 1.3.0-beta02 contiene estas confirmaciones.
Correcciones de errores
- Controla de forma elegante EXITCODE
2
cuando inicies Perfetto para registrar una advertencia, pero continúa.
Versión 1.3.0-beta01
12 de junio de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-beta01
. La versión 1.3.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
MethodTracing.affectsMeasurementOnThisDevice
porAFFECTS_MEASUREMENT_ON_THIS_DEVICE
para mantener la coherencia. (I1bdfa). - Se agregó la API experimental de
BlackHole.consume()
para evitar la eliminación de código no alcanzado en las microcomparativas. (If6812, b/286091643). - Microbenchmark ahora arrojará correctamente para evitar que el registro de métodos interfiera con las mediciones. Esto ocurre en ciertos dispositivos cuando se activa el seguimiento de métodos (a través de argumentos de instrumentación o
MicrobenchmarkConfig
) y si se intenta realizar una medición después de un seguimiento de métodos. Los dispositivos afectados ejecutan el nivel de API 26 a 30 o ciertas versiones de módulos de línea principal de ART afectadas por esta interferencia y se pueden detectar en el entorno de ejecución a través deProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864).
Correcciones de errores
- Se aumentó la versión máxima de AGP recomendada a 9.0.0-alpha01. (I5bbb0).
- Se agregó el modo de compilación al contexto de comparativas (If5612, b/325512900).
- Se habilitó el seguimiento de AIDL de forma predeterminada (requiere el nivel de API 28) (Ia0af2, b/341852305).
- Se agregó información adicional en el contexto de comparativas en el resultado JSON:
context.artMainlineVersion
: Es la versión de número entero del módulo de línea principal de Art (si está presente en el dispositivo, -1 de lo contrario).context.build.id
: Es igual aandroid.os.Build.ID
.context.build.version.codename
: Es igual aandroid.os.Build.VERSION.CODENAME
.context.build.version.abbreviatedCodename
: Corresponde a la primera letra del nombre en código previo al lanzamiento (incluso en compilaciones de lanzamiento) (Ie5020).
- Se corrigió
StackSampling
para que respeteandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53). - Cambia macro->dependencia común a
api()
para que sea más fácil de usar, p.ej.,PerfettoTrace
yPerfettoConfig
. (Icdae3, b/341851833). - Asegúrate de que las tareas
mergeArtProfile
ymergeStartupProfile
siempre esperen a que se genere el perfil de Baseline. (I623d6, b/343086054). - Ten en cuenta el estado de habilitación de la variante cuando decidas si se debe habilitar. (I5d19e, b/343249144).
- Se aumentó el tiempo de espera de inicio predeterminado para el procesador de seguimiento de Perfetto. (I87e8c, b/329145808).
Versión 1.3.0-alpha05
14 de mayo de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-alpha05
. La versión 1.3.0-alpha05 contiene estas confirmaciones.
Correcciones de errores
- Se arroja una excepción más clara cuando la métrica de macrocomparativas muestra valores cero para todas las iteraciones (Iab58f, b/314931695).
- Se agregaron reglas de solución adicionales a las reglas de Proguard de microbench, incluida la compatibilidad con reglas de objetos de escucha y otras advertencias o errores observados. (I14d8f, b/329126308, b/339085669).
- El seguimiento de métodos se ejecuta como una fase independiente durante una macrocomparativa y ya no afecta las mediciones. (If9a50, b/285912360, b/336588271)
- Se agregaron sugerencias de depuración adicionales para descartar el mensaje de error de transmisión del sombreador. (I5efa6, b/325502725).
Versión 1.3.0-alpha04
1 de mayo de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-alpha04
. La versión 1.3.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó una variante experimental de
MacrobenchmarkRule#measureRepeated
que toma unPerfettoConfig
personalizado para la grabación de seguimientos de Perfetto completamente personalizados. Ten en cuenta que los parámetros de configuración configurados de forma incorrecta pueden provocar que falle la clase Metric integrada. (Idfd3d, b/309841164, b/304038384). - Se cambió el nombre de
PowerMetric.deviceSupportsPowerEnergy
aPowerMetric.deviceSupportsHighPrecisionTracking
para proporcionar mayor claridad (I5b82f). - Se agregaron
PowerMetric.deviceBatteryHasMinimumCharge()
yPowerMetric.deviceSupportsPowerEnergy()
para habilitar el cambio o la omisión de comparativas según la capacidad de medición de energía del dispositivo. (I6a591, b/322121218).
Correcciones de errores
- Se agregó la comparación con el perfil de Baseline anterior (I824c8, b/269484510).
- Se agregó DSL para inhabilitar las advertencias (Ic4deb, b/331237001).
- Se cambió la excepción al registro de información cuando las variantes de comparativas están inhabilitadas (I8a517, b/332772491).
- Se simplificó la captura de seguimientos de métodos para que una Macrobenchmark se limite a la duración de la
measureBlock()
real. Anteriormente, se iniciaba en el inicio del proceso de destino y solo admitía inicios en frío (Iee85a, b/300651094). - Se evita que se produzcan fallas cuando el procesador de seguimiento de Perfetto tarda en iniciarse (I98841, b/329145808).
Versión 1.3.0-alpha03
17 de abril de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-alpha03
. La versión 1.3.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron APIs de
PerfettoTraceProcessor.Session.queryMetrics
de la API pública con variantes binarias (sin decodificar) de JSON, textproto y proto. Te permiten consultar las métricas integradas en TraceProcessor (I54d7f, b/304038382). - Se agregó
profilerOutput
al resultado JSON para facilitar las herramientas en torno a los seguimientos de perfiles (p.ej., perfetto, seguimientos de métodos). (I05ddd, b/332604449). - Se agregó la etiqueta de energía para realizar comparativas de Perfetto Config. Esto captura, por ejemplo, los puntos de seguimiento de wakelock. (Icfe44, b/286551983).
- Se agregó el argumento inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, que se puede establecer en falso para evitar omitir los seguimientos de métodos cuando la duración esperada puede causar un error de ANR. Se recomienda evitarlo en las ejecuciones de CI. - Se agregó el argumento experimental de inst
androidx.benchmark.profiling.perfCompare.enable
. Establece este valor en verdadero para ejecutar el tiempo de comparación entre las fases de medición y generación de perfiles. Es útil, por ejemplo, para evaluar la sobrecarga del seguimiento de métodos. (I61fb4, b/329146942)
Cambios en la API
- Se cambió
TraceSectionMetric.Mode
a una clase sellada para permitir una expansión futura sin interrumpir las sentencias when exhaustivas (I71f7b). - Se agregaron
TraceSectionMetric.Mode.Average
y.Count
, y se reordenaron los argumentos para que el argumento más común (modo) estuviera antes en la lista de argumentos, lo que reduce la necesidad de especificar nombres de parámetros. (Ibf0b0, b/315830077, b/322167531). - Se cambió el nombre de
Metric.getResult
agetMeasurements
para que coincida con el tipo de datos que se muestra (I42595).
Correcciones de errores
- Se corrigió un problema para garantizar que las comparativas usen los perfiles de Baseline generados cuando
automaticGenerationDuringBuild
está desactivado (Ic144f, b/333024280). - Se corrigieron las anulaciones de propiedades del complemento de Gradle
BaselineProfile
para habilitar la generación de perfiles de Baseline y las comparativas cuando se personaliza un tipo de compilaciónnonMinified
o de comparativas. (Ib8f05, b/324837887). - Se corrigió el volcado de seguimientos de métodos en la macrocomparativa, de modo que los seguimientos de métodos se capturen y sean válidos por completo, incluso en dispositivos más lentos. (I6349a, b/329904950).
- Se habilitó el inicio de bloqueo en el registro de seguimiento de Perfetto para reducir el riesgo de que falten datos al comienzo del seguimiento. Solo se admite en el nivel de API 33 y versiones posteriores (Ie6e41, b/310760059).
- Se agregó una advertencia cuando se usa Android Test Orchestrator en módulos de comparativas, ya que esto provocará que los archivos JSON de salida por módulo se reemplacen de forma reiterada. (Ia1af6, b/286899049).
- Se forzaron los separadores de miles "," (coma) para lograr coherencia en el resultado de Studio, sin tener en cuenta la configuración regional del dispositivo (I3e921, b/313496656).
TraceSectionMetric
ahora admite las secciones creadas conTrace.{begin|end}AsyncSection
. (I91b32, b/300434906).- Se agregaron etiquetas log.w o de excepción a todas las fallas de detección de inicio. Esto no cambia el comportamiento actual (por lo que se arrojan algunos errores y otros no detectan el inicio en silencio), solo lo hace más comprensible. Por lo general, los que
Log.w()
y no informan las métricas de inicio son aquellos en los que faltan eventos que no son de fotogramas. Se arrojan excepciones cuando se detecta el inicio, excepto por la información de tiempo de fotogramas (de las secciones de IU/RT). (Id240f, b/329145809) - Cancela las tareas de dexopt en segundo plano antes de ejecutar una macrocomparativa para reducir la interferencia. (I989ed).
- Se agregó la medición
frameCount
aFrameTimingMetric
para ayudar a descubrir situaciones en las que las mediciones cambian porque cambió la cantidad de fotogramas producidos (se agregaron animaciones nuevas y se corrigieron problemas de invalidación). (I1e5aa). - Se aclaró que
frameOverrunMs
es la métrica preferida para el seguimiento cuando está disponible en los documentos y por qué. (I18749, b/329478323).
Versión 1.3.0-alpha02
20 de marzo de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-alpha02
. La versión 1.3.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
Compatibilidad experimental con R8 en microbench a través de reglas de ProGuard incorporadas. Ten en cuenta que esta compatibilidad es experimental y requiere AGP 8.3 para reducir las pruebas de módulos de bibliotecas. Usa lo siguiente para habilitar la reducción o optimización de R8 en el
build.gradle
de tu módulo de comparativas, lo que debería generar un aumento significativo del rendimiento, según la carga de trabajo. (I738a3, b/184378053).android { buildTypes.release.androidTest.enableMinification = true }
Correcciones de errores
- Se corrigió la advertencia de seguimiento de métodos para que esté en una línea separada del resultado de microbench. (I0455c, b/328308833).
Versión 1.3.0-alpha01
21 de febrero de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.3.0-alpha01
. La versión 1.3.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se cambiaron los nombres de los parámetros booleanos
MicrobenchmarkConfig
para evitar la palabra innecesaria "should" (Ia8f00, b/303387299). - Se agregó
BenchmarkRule.measureRepeatedOnMainThread
para que las comparativas del subproceso principal (p.ej., las que tocan Views o IU de Compose) puedan evitar activar errores de ANR, especialmente durante suites grandes en CI. (I5c86d). - Se agregó
FrameTimingGfxInfoMetric
, una implementación alternativa experimental deFrameTimingMetric
con mediciones que provienen directamente de la plataforma, en lugar de extraerse del seguimiento de Perfetto. (I457cb, b/322232828). - Se agregó la capacidad de volcar un perfil de ART durante iteraciones individuales de
warmUp
. (I17923). - Se realizaron varios cambios en la API de
TraceSectionMetric
:- Agrega
Mode.Min
,Mode.Max
. - Agrega un argumento de etiqueta para anular el nombre de la sección como etiqueta de métrica
- Se agregó el nombre del modo a la salida para aclarar el significado de la métrica
- Se cambió el valor predeterminado a suma, ya que la mayoría del uso de esta métrica es para eventos repetidos. Ten en cuenta estos cambios en el uso de CI, ya que pueden crear discontinuidades o interrumpir el análisis. (Ic1e82, b/301892382, b/301955938).
- Agrega
Correcciones de errores
- Se mejoró el mensaje de error en el complemento de Gradle del perfil de referencia cuando no existe el dispositivo administrado especificado (Idea2b, b/313803289).
- Se corrigió la inclusión de perfiles de Baseline de bibliotecas en AAR anteriores a AGP 8.3.0-alpha15 (I1d2af, b/313992099).
- Se corrigió la URL de salida del perfil de Baseline y de inicio al final de la tarea de generación (I802e5, b/313976958).
- Se ajustaron los tiempos de espera de la fuente de datos para intentar corregir
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788). - Se agregaron dos argumentos de instrumentación para anular el comportamiento de eliminación de sombreadores y solucionar las fallas cuando se realizan comparativas de apps sin
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: Se puede usar para omitir todas las bajadas de sombreadores (incluidas las que se realizan en los lanzamientos deStartupMode.Cold
), en especial cuando se realizan comparativas de apps que aún no usan profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false
: Se puede usar para tolerar fallas cuando se intenta colocar sombreadores, por ejemplo, cuando se realizan comparativas de apps sin profileinstaller 1.3 (I4f573).
- Omite el seguimiento de métodos en el subproceso de IU cuando se espera que tarde más de unos segundos y limpia los seguimientos de métodos cuando se arrojan. (I6e768).
- Lanza cuando los nombres de archivo son más largos que 200 caracteres para evitar fallas poco claras cuando se escriben o se procesan archivos posteriores. (I4a5ab).
- Se corrigió el problema por el que se podían vincular marcos sin terminar al principio y al final del seguimiento, lo que se informaba de forma incorrecta como un solo marco extremadamente largo. (I39353, b/322232828).
- Usa
--skip verification
en el nivel de API 30 o superior cuando vuelvas a instalar un paquete en el nivel de API 30-33 para borrar los perfiles de ART en las compilaciones de los usuarios. Esto ayuda a omitir las advertencias de Play Protect que causan fallas en algunas clases de dispositivos. (Ic9e36). - Usa
am force-stop
para finalizar apps que no sean del sistema, como la IU del sistema o el selector. (I5e028). - Macrobenchmark ahora espera a
1 second
para que la aplicación de destino borre un perfil de ART (antes esperaba a500 ms
). (I85a50, b/316082056). - Se mejoró el error
FrameTimingMetric
cuando no se producen fotogramas y siempre se genera un vínculo para el seguimiento cuando se produce un error de análisis de métricas para ayudar a diagnosticar el problema. (I956b9). - Se corrigió la falla en
FrameTimingMetric
que no podía analizar el ID de fotogramas, en especial en ciertos dispositivos OEM. (Ia24bc, b/303823815, b/306235276). - Se relajó la rigurosidad de las verificaciones en
FrameMetrics
y se agregaron más detalles a los mensajes de error. (Iadede).
Versión 1.2
Versión 1.2.4
17 de abril de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.2.4
. La versión 1.2.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el problema por el que no se configuraba el srcset del perfil de Baseline en las variantes de comparativas. También se corrige
automaticGenerationDuringBuild
en las bibliotecas que causaban una dependencia circular. (I28ab7, b/333024280). - Usa
am force-stop
para finalizar apps que no sean del sistema, como la IU del sistema o el selector. Esto corrige las comparativas deStartupMode.COLD
que fallaban con el mensaje "El paquete $package no debe estar en ejecución antes del inicio en frío" debido a que el proceso de eliminación no se completaba correctamente. (I5e028).
Versión 1.2.3
24 de enero de 2024
Lanzamiento de androidx.benchmark:benchmark-*:1.2.3
. La versión 1.2.3 contiene estas confirmaciones.
Correcciones de errores
- Se quitó la excepción del complemento de Gradle para perfiles de Baseline cuando la versión de AGP es 8.3.0 o una posterior.
- Se corrigió la inclusión de perfiles de Baseline de bibliotecas en AAR anteriores a AGP 8.3.0-alpha15.
Versión 1.2.2
1 de diciembre de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.2
. La versión 1.2.2 contiene estas confirmaciones.
Perfiles de Baseline
- Los registros de ejecución mostrarán la ruta de acceso del archivo de salida del perfil de referencia como un URI de archivo local (aosp/2843918, aosp/2853665, b/313976958).
Versión 1.2.1
15 de noviembre de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.1
. La versión 1.2.1 contiene estas confirmaciones.
Nuevas funciones
- Se mejoró el mensaje de error cuando el usuario inhabilita las variantes de prueba (b/307478189).
- Se agregaron propiedades para admitir la integración de la ejecución de prueba de AS (b/309805233), (b/309116324).
Versión 1.2.0
18 de octubre de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0
. La versión 1.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.1.0
Perfiles de Baseline
- El nuevo complemento de Gradle para perfiles de Baseline automatiza la captura y la inclusión de perfiles de Baseline en tu flujo de trabajo de prueba y compilación.
BaselineProfileRule.collect
ahora es estable, una versión optimizada y simplificada de la API experimental deBaselineProfileRule.collectBaselineProfile
anterior.- Solo especifica
packageName
y dirige tu app.
- Solo especifica
- En el caso de las bibliotecas que generan perfiles de Baseline, ahora puedes filtrar las reglas generadas en el código (argumento
BaselineProfileRule.collect
) o, de forma más sencilla, en el complemento de Gradle. - Correcciones
- Se corrigió la recopilación de perfiles de Baseline en Android U y versiones posteriores (Id1392, b/277645214).
Macrocomparativas
- Compilación
- Macrobenchmark ahora restablece correctamente el estado de compilación de cada compilación. Esto requiere la reinstalación del APK antes de Android 14, por lo que se recomienda realizar comparativas en Android 14 y versiones posteriores si deseas conservar el estado (como el acceso del usuario) en lo que se mide.
- También puedes controlar la compilación de la app por separado y omitir la compilación con
CompilationMode.Ignore()
o el argumento de instrumentación.
Argumentos de instrumentación
- Compatibilidad con el argumento de instrumentación
androidx.benchmark.dryRunMode.enable
(ya disponible en microcomparativas) para obtener ejecuciones de validación más rápidas (p.ej., cuando se crea la comparativa o en el envío previo) - Compatibilidad con
androidx.benchmark.profiling.mode=StackSampling
yMethodTracing
. - Se agregó
androidx.benchmark.enabledRules
para permitir que el tiempo de ejecución filtre las pruebas de reglas de perfiles de Baseline en comparación con las de macrocomparativas. - Se agregó el argumento
androidx.benchmark.perfettoSdkTracing.enable
para habilitar el registro con tracing-perfetto, p.ej., el registro de recomposición de Compose. Ten en cuenta que, cuando se usa conStartupMode.COLD
, los tiempos se verán afectados de manera significativa, ya que la biblioteca de seguimiento se carga y habilita durante el inicio de la app.
- Compatibilidad con el argumento de instrumentación
Requisitos
- Macrobenchmark ahora requiere
ProfileInstaller
1.3.0 o una versión posterior en la app de destino para habilitar la captura o el restablecimiento de perfiles, y la limpieza de la caché del sombreador.
- Macrobenchmark ahora requiere
Nuevas APIs de Metrics experimentales
- Se agregó
TraceSectionMetric
experimental, que permite extraer tiempos simples de los bloquestrace("") {}
de tu app o TraceMetric para aprovechar la capacidad de consulta completa de PerfettoTraceProcessor
. - Se agregó
PowerMetric
experimental para capturar información sobre el uso de energía. - Se agregó
MemoryCountersMetric
experimental para contar los errores de página. - Se agregó la API experimental de
PerfettoTraceProcessor
, que se usa de forma interna para extraer métricas de los registros del sistema (también conocidos como registros de Perfetto)
- Se agregó
Correcciones
- Se corrigieron las fallas que se producían cuando se instalaban o extraían perfiles de una app instalada desde varios APKs (p.ej., desde un paquete de aplicación).
- Se corrigió
FrameTimingMetric
para que no omita fotogramas con IDs de fotogramas incoherentes (por lo general, fotogramas durante las ondas en la API 31 y versiones posteriores) (I747d2, b/279088460). - Se corrigieron los errores de análisis en seguimientos de más de 64 MB (Ief831, b/269949822).
- Se aclararon los errores que se producían cuando la imagen del SO del dispositivo (en especial, del emulador) no estaba configurada correctamente para el seguimiento o la compilación.
- Se omite la comprobación del nivel de batería para dispositivos sin batería (micro y macro).
- Se mejoró la salida de archivos, con errores más claros para los directorios de salida no válidos y valores predeterminados más seguros.
- Se mejoró la estabilidad de
StartupMode.COLD
descartando de forma coherente la caché del sombreador (también se expone a través deMacrobenchmarkScope.dropShaderCache
). - Se corrigió el resguardo de Leanback para
startActivityAndWait
.
Microcomparativas
- Funciones
- La generación de perfiles se trasladó a una fase independiente, después de otras métricas, de modo que una ejecución de prueba puede mostrar resultados precisos de latencia y generación de perfiles.
- APIs experimentales
- Se agregó la API experimental de
MicrobenchmarkConfig
para definir métricas personalizadas y configurar el seguimiento y la generación de perfiles. Se puede usar para capturar seguimientos de métodos o puntos de seguimiento (pero ten en cuenta la sobrecarga de seguimiento). - Se agregaron APIs experimentales para controlar
BenchmarkState
por separado deBenchmarkRule
, sin JUnit - Se agregó el registro experimental
PerfettoTrace
para habilitar la captura de seguimientos de Perfetto, con configuración personalizada, separada de las APIs de comparativas.
- Se agregó la API experimental de
- Correcciones
- Se solucionó el problema de los espacios en blanco iniciales faltantes en el resultado de las comparativas de Android Studio.
- Se corrigió el problema por el que las advertencias no se podían imprimir en el resultado de las comparativas de Android Studio.
- Se corrigió la falla de
SampledProfiling
en Android 13 (nivel de API 33) y versiones posteriores. - Se mejoró enormemente el rendimiento de
dryRunMode
omitiendoIsolationActivity
y el seguimiento de Perfetto (hasta 10 veces más rápido el modo de ejecución de prueba en versiones anteriores del SO).
Versión 1.2.0-rc02
6 de octubre de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-rc02
. La versión 1.2.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el resultado del archivo de comparativas para que ya no se interrumpa la copia de archivos de complementos
BaselineProfile
. Se generaron archivos y se copiaron del dispositivo, pero se les cambió el nombre para que el complemento de Gradle no los viera. (I8dbcc, b/303034735, b/296453339). - Se aclararon los mensajes de error de carga de
tracing-perfetto
cuando se inserta desde el módulo de macrocomparativas en la aplicación de destino.
Versión 1.2.0-rc01
20 de septiembre de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-rc01
. La versión 1.2.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Ahora se arroja una excepción (con instrucciones de solución) cuando el seguimiento del SDK de Perfetto no se inicializa en una comparativa. (I6c878, b/286228781).
- Se corrigió la falla de OOM cuando se convertía el registro del método de ART a formato Perfetto. (I106bd, b/296905344).
- (Macrocomparativa) Se aclaró la etiqueta de seguimiento de métodos cuando se vincula en el resultado de la prueba de Studio, y se corrigieron los nombres de archivo de seguimiento de métodos para que sean únicos en el dispositivo o host, de modo que no se reemplacen cuando se ejecute más de una comparativa. (I08e65, b/285912360).
- Garantiza que el dispositivo esté activo cuando se capture un perfil de Baseline. (I503fc).
Versión 1.2.0-beta05
30 de agosto de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-beta05
. La versión 1.2.0-beta05 contiene estas confirmaciones.
Nuevas funciones
- El complemento de Gradle para el perfil de Baseline ahora es compatible con el complemento de Android para Gradle 8.3. (aosp/2715214).
Versión 1.2.0-beta04
23 de agosto de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-beta04
. La versión 1.2.0-beta04 contiene estas confirmaciones.
Nuevas funciones
- El complemento de Gradle para perfiles de Baseline ahora es compatible con el complemento de Android para Gradle 8.3. (aosp/2715214).
Correcciones de errores
- Se corrigieron las fallas en la escritura, el traslado y la extracción de archivos (en especial, los de pruebas parametrizadas) limpiando aún más los nombres de los archivos de salida y evitando los caracteres "=" y ":" en ellos. (I759d8).
Versión 1.2.0-beta03
9 de agosto de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-beta03
. La versión 1.2.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregó un argumento para filtrar
TraceSectionMetric
solo en el paquete de destino, activado de forma predeterminada (Ia219b, b/292208786).
Correcciones de errores
- Se cambió el nombre del argumento de instrumentación
fullTracing.enable
aperfettoSdkTracing.enable
para mantener la coherencia con el nombre del artefacto y otras referencias.fullTracing.enable
seguirá funcionando como resguardo. (I7cc00). - Los puntos de seguimiento internos de la biblioteca de comparativas (incluidos los registros de fase o bucle de microcomparativas) ahora aparecerán en el visor de seguimiento del sistema de Studio y se anidan en el proceso correcto en Perfetto. (I6b2e7, b/293510459)
- Se quitó el error NOT-PROFILEABLE de macrocomparativas en el nivel de API 31 y versiones posteriores, y se omitió la verificación perfilable en dispositivos con permisos de administrador en eng/userdebug. (I2abac, b/291722507)
- Cuando se usan las optimizaciones del diseño DEX, las reglas de perfil de inicio también se consideran reglas de perfil de Baseline. (aosp/2684246, b/293889189)
Versión 1.2.0-beta02
26 de julio de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-beta02
. La versión 1.2.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregaron APIs experimentales para la configuración y las métricas personalizadas de microbench (p.ej., el generador de perfiles y el seguimiento). (I86101, b/291820856)
Correcciones de errores
- Se informa un error en macrobench cuando el SO está mal configurado para el seguimiento, como se corrigió recientemente en los emuladores de ARM64 de la API 26/28. (I0a328, b/282191686).
- Se agregó un detalle a la falla de restablecimiento de compilación para sugerir la actualización del emulador, ya que algunos emuladores solucionaron este problema recientemente. (I8c815, b/282191686)
- Haz que
androidx.test.uiautomator:uiautomator:2.2.0
sea unapi
en lugar de una dependencia deimplementation
. (I1981e)
Versión 1.2.0-beta01
18 de julio de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-beta01
. La versión 1.2.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el problema por el que, a veces, se suprimían las advertencias en el resultado de la comparativa en Studio, y la solución alternativa para que los espacios en blanco iniciales del resultado de la comparativa no aparecieran en Studio (Ia61d0, b/227205461, b/286306579, b/285912360).
- Se corrigió el comentario de
FrameTimingMetric
. La submétrica se llamaframeDurationCpuMs
. (Ib097f, b/288830934).
Versión 1.2.0-alpha16
21 de junio de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha16
. La versión 1.2.0-alpha16 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de la API de
BaselineProfileRule.collectBaselineProfile()
aBaselineProfileRule.collect()
. (I4b665)
Correcciones de errores
- Compatibilidad de Macrobenchmark con
androidx.benchmark.profiling.mode = MethodTracing
. (I7ad37, b/285912360). - La generación de perfiles de microcomparativas se trasladó a una fase independiente, por lo que se produce en secuencia después de la medición, en lugar de reemplazarla. Las secciones de seguimiento de
MethodTracing
también se incluyen en el registro de Perfetto capturado, si está presente. (I9f657, b/285014599) - Agrega la medición de recuento a
TraceSectionMetric
conMode.Sum
. (Ic121a, b/264398606).
Versión 1.2.0-alpha15
7 de junio de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha15
. La versión 1.2.0-alpha15 contiene estas confirmaciones.
Nuevas funciones
- Se agregó
MemoryUsageMetric
experimental para hacer un seguimiento del uso de memoria de una aplicación de destino. (I56453, b/133147125, b/281749311). - Se agregó compatibilidad con parámetros de configuración de Perfetto completamente personalizados con
PerfettoTrace.record
(If9d75, b/280460183). - Se agregó una propiedad para omitir la generación de perfiles de Baseline. Uso:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020).
Cambios en la API
- La API de
collectBaselineProfile
siempre genera perfiles de Baseline estables. Se quitó la API decollectStableBaselineProfile
y se debe usarcollectBaselineProfile
en su lugar. (I17262, b/281078707). - Se cambió el argumento
filterPredicate
deBaselineProfileRule
a no nulo, con un valor predeterminado equivalente para que el comportamiento predeterminado del filtro sea más claro en la documentación. (I3816e).
Correcciones de errores
- Inhabilita
IsolationActivity
y el seguimiento de Perfetto endryRunMode
para mejorar significativamente el rendimiento, ya que estos eran la mayoría del tiempo de ejecución. (Ie4f7d). - Compatibilidad con el muestreo de pila de llamadas en Macrobenchmarks con los argumentos de prueba de instrumentación
androidx.benchmark.profiling.mode=StackSampling
yandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Se corrigió la falla que se producía cuando se soltaban sombreadores en Android U (nivel de API 34), así como en emuladores. (I031ca, b/274314544).
Versión 1.2.0-alpha14
3 de mayo de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha14
. La versión 1.2.0-alpha14 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el problema por el que
FrameTimingMetric
ignoraba fotogramas con IDs de fotogramas incoherentes. Esto causaría que algunas animaciones en versiones recientes de la plataforma (API 31 y versiones posteriores) ignoren muchos fotogramas mientras se animaRenderThread
(p.ej., durante un efecto de onda). (I747d2, b/279088460). - Se corrigió el análisis del procesador de seguimiento para los seguimientos de más de 64 MB. (Ief831, b/269949822).
- Se corrigió la generación de perfiles de Baseline en Android U que fallaba debido al resultado diferente del comando
pm dump-profiles
. (Id1392, b/277645214). - Se corrigió la secuencia de comandos de bloqueo de reloj de la GPU para comparar cadenas correctamente (I53e54, b/213935715).
Versión 1.2.0-alpha13
5 de abril de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha13
. La versión 1.2.0-alpha13 contiene estas confirmaciones.
Cambios en la API
- Se agregó el parámetro de tipo de perfil cuando se generan perfiles de Baseline para admitir la próxima función de perfil de inicio (Ie20d7, b/275093123).
- Se agregó una nueva API experimental de
TraceMetric
para definir métricas completamente personalizadas en función del contenido de un seguimiento de Perfetto. (I4ce31, b/219851406). - Se agregó una métrica experimental para determinar la cantidad de fallas de página durante una comparativa. (I48db0).
Versión 1.2.0-alpha12
22 de marzo de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha12
. La versión 1.2.0-alpha12 contiene estas confirmaciones.
Nuevas funciones
- El nuevo complemento de Gradle para perfiles de Baseline se lanzó en versión alfa, lo que facilita la generación de un perfil de Baseline y simplifica el flujo de trabajo de los desarrolladores.
Cambios en la API
- Se quitó la compatibilidad con el seguimiento de Perfetto en los niveles de API 21 y 22, lo que incluye las microcomparativas y las APIs experimentales de
PerfettoTrace
. Antes de esta versión, las conexiones deUiAutomation
no eran confiables en algunos dispositivos. (I78e8c). - Se agregó una API experimental pública para
PerfettoTraceProcessor
para habilitar el análisis del contenido de seguimiento. Este es un paso hacia las métricas completamente personalizadas basadas en los datos de registro de Perfetto. (I2659e, b/219851406).
Versión 1.2.0-alpha11
8 de marzo de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha11
. La versión 1.2.0-alpha11 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron las fallas en
MacrobenchmarkRule
yBaselineProfileRule
cuando se reinstalan o extraen perfiles de un paquete de aplicación con varios APK. (I0d8c8, b/270587281)
Versión 1.2.0-alpha10
22 de febrero de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha10
. La versión 1.2.0-alpha10 contiene estas confirmaciones.
Nuevas funciones
- En Android 14 y versiones posteriores, Macrobenchmark ya no reinstala aplicaciones objetivo para restablecer el estado de compilación, gracias a una nueva función de la plataforma. Anteriormente, era necesario tener un dispositivo con permisos de administrador o resolver la eliminación todos los estados de la aplicación (por ejemplo, datos de acceso del usuario) antes de cada ejecución de comparativa (I9b08c, b/249143766).
Correcciones de errores
- Se corrigió
DryRunMode
para que ya no falle en caso de perfil vacío debido a una omisión de compilación. En su lugar, ejecuta una sola iteración y extrae el perfil para asegurarse de que se capture algo. (I2f05d, b/266403227). - Se corrigió la falla de
PowerMetric
que se producía cuando se verificaba la presencia de powerstats en niveles de API anteriores (5faaf9, b/268253898).
Versión 1.2.0-alpha09
11 de enero de 2023
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha09
. La versión 1.2.0-alpha09 contiene estas confirmaciones.
Correcciones de errores
- Se habilitó el paso del argumento de instrumentación de
None
aandroidx.benchmark.enabledRules
para inhabilitar la generación de perfiles de Baseline y todas las comparativas (I3d7fd, b/258671856). - Se corrigió la captura
PerfettoTrace
en módulos de apps (es decir, las APK de prueba de instrumentación que no son automáticas) (I12cfc). - Se corrigió el orden de los argumentos de extracción de adb de perfiles de Baseline en los resultados de salida de Studio (I958d1, b/261781624).
- Ahora se reconoce correctamente la API 33 del emulador de ARM cuando se intenta ejecutar una macrocomparativa y, además, se imprime la advertencia de forma correcta (69133b,b/262209591).
- Se omite la comprobación de nivel de batería en dispositivos sin batería en Macrobenchmark (fe4114, b/232448937).
Versión 1.2.0-alpha08
7 de diciembre de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha08
. La versión 1.2.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se agregaron las nuevas APIs experimentales
PerfettoTrace.record {}
yPerfettoTraceRule
para capturar los registros de Perfetto (también conocidos como Registros del sistema) como parte de una prueba, para inspeccionar el comportamiento y el rendimiento de la misma (I3ba16). BaselineProfileRule
ahora acepta un predicado de filtro, en lugar de una lista de prefijos de paquetes. Esto le da al control total del filtro (I93240).- Se agregó una API experimental,
BaselineProfileRule.collectStableBaselineProfile
, que espera hasta que un Perfil de Baseline sea estable para N iteraciones (I923f3). - Se agregó la capacidad de especificar un prefijo de nombre de archivo de resultado durante la generación de Perfiles de Baseline con
BaselineProfileRule
(I7b59f, b/260318655).
Correcciones de errores
- Se mejoró la seguridad de la escritura de los archivos salientes, que debería evitar que los archivos de salida se escriban/anexen silenciosamente, especialmente en las APIs 21/22 (If8c44, b/227510293).
- Se corrigió el resultado de seguimiento de
simpleperf
para crear y colocar el archivo correctamente. Por lo general, también se corrigen errores en los que Gradle extrae un archivo sin éxito (I12a1c, b/259424099). - Se mejoró el mensaje de error de profileinstaller impreso cuando la versión es demasiado antigua. Este te indicará que actualices la versión de profileinstaller (1.2.1) para medir los Perfiles de Baseline de la APIs 31 a 33, en lugar de indicar que no es compatible (Ia517f, b/253519888).
- Se corrigieron varias fallas del comando de shell del mensaje de one error "Print needed API <=23", incluidas las fallas de configuración de perfetto para capturar objetos binarios y las de captura de seguimiento (Ib6b87, b/258863685).
- Ordena automáticamente las reglas de perfiles generadas para minimizar la cantidad de cambios que se realizan con el tiempo (al revisar las reglas de perfiles en el control de código fuente) (Ie2509).
- Se corrigió una falla en compilaciones inferiores a Android 13 sin permisos de administrador (API 33) con el mensaje
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183).
Problemas conocidos: MacrobenchmarkScope.dropShaderCache()
puede fallar debido a la falta de un registro de emisión en el manifiesto del instalador de perfiles, que aún no se lanzó (I5c728, b/258619948). Para resolver el problema en profileinstaller:1.3.0-alpha02
, agrega lo siguiente al AndroidManifest.xml de la aplicación (no de las comparativas):
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Versión 1.2.0-alpha07
9 de noviembre de 2022
Se lanzó androidx.benchmark:benchmark-*:1.2.0-alpha07
. La versión 1.2.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API de
PowerMetric
para medir la energía y la potencia en Macrobenchmarks (Ife601, b/220183779). - Se corrigió
MacrobenchmarkScope.dropShaderCache()
para descartar la caché del sombreador. Esto quita alrededor de 20 ms de ruido de las comparativas deStartupMode.COLD
, ya que los sombreadores ahora se borran de manera coherente en cada iteración. Antes, la compilación dePartial
con iteraciones de preparación informaba números incorrectamente rápidos, ya que era más probable que el sombreador de caché se realizara durante la preparación. Esta corrección requiere un dispositivo con permisos de administrador o el uso deprofileinstaller:1.3.0-alpha02
en la app de destino. Para conocer los cambios en la API de la biblioteca deProfileInstaller
, consulta la página ProfileInstaller 1.30-alpha02 (Ia5171, b/231455742). - Se agregó
TraceSectionMode("label", Mode.Sum)
, lo que permite medir el tiempo total empleado en varias secciones de seguimiento con la misma etiqueta. Por ejemplo,TraceSectionMetric("inflate", Mode.Sum)
registrará una métricainflateMs
para el tiempo total en una macrocomparativa invertida en inflación. También se quitó el requisito de nivel de API 29, ya queTraceSectionMetric
funciona junto conandroidx.tracing.Trace
hasta niveles de API inferiores, con el uso deforceEnableAppTracing
dentro de la app de destino (Id7b68, b/231455742).
Correcciones de errores
- Se mejoró la seguridad de todos los comandos de shell internos con la validación de todos los resultados/errores (I5984d, b/255402908, b/253094958).
- Se especificó el dispositivo en el comando
adb pull
del perfil de referencia, de modo que se pueda copiar el comando de extracción si hay varios dispositivos conectados (hasta un emulador) (I6ac6c, b/223359380). - Se agregó un error si el APK de prueba de macrocomparativas no está configurado como instrumentación autónoma. Este error evita las macrocomparativas dentro del proceso de la app de destino. En el proceso, Macrobench no podría compilar, eliminar ni iniciar la app, ni controlar sus propios permisos (I4279b).
- Se corrigió un problema en
measureRepeated()
por el queStartupMode.COLD
no finalizaba el proceso de destino después desetupBlock
. Ahora cuandosetupBlock
interactúe con la app no dejará el proceso en ejecución ni una medición de inicio en frío no válida (I8ebb7).
Versión 1.2.0-alpha06
24 de octubre de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha06
. La versión 1.2.0-alpha06 contiene estas confirmaciones.
Cambios en la API
BaselineProfileRule
ya no requiere raíces en Android 13 (nivel de API 33) y ya no es experimental (Ie0a7d, b/250083467, b/253094958).- Este cambio también corrige cómo se vacían los perfiles de una app en el disco en dispositivos que no tienen raíces, pero requiere actualizar la dependencia de ProfileInstaller de la app de destino.
- Si quieres usar
BaselineProfileRule
oCompilationMode.Partial(warmupIterations)
en un dispositivo sin raíces, también debes actualizar tu app de destino a fin de que useandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Esto permite vaciar correctamente el perfil en el disco, de modo que pueda compilarse o extraerse.
Correcciones de errores
- Se corrigió la falla de
SampledProfiling
en el nivel de API 33 y superiores (I40743, b/236109374).
Versión 1.2.0-alpha05
5 de octubre de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha05
. La versión 1.2.0-alpha05 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el desglose de fotogramas en el visor de seguimiento del sistema de Studio para comparativas de seguimientos capturados (I3f3ae, b/239677443).
- Se corrigió
FrameTimingMetric
para enumerarFrameOverrun
como requisito de la API 31 en lugar de la 29 (I716dd, b/220702554). - Se estableció la iteración en
BaselineProfileRule
y ahor se muestra con claridad si el paquete de destino no está instalado (ya se hizo para MacrobenchmarkRule) (Ic09a3, b/227991471).
Versión 1.2.0-alpha04
21 de septiembre de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha04
. La versión 1.2.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
Se agregó compatibilidad con el argumento de instrumentación
dryRunMode.enable
a macrocomparativas (ya disponibles en micro) a fin de lograr un desarrollo local más rápido y validar la automatización de apps (p. ej., en el envío previo). Esto anula las iteraciones a 1, omite la compilación, elimina todos los errores de configuración e inhabilita la salida del archivo de medición .json (Ib51b4, b/175149857).En la línea de comandos de Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
En build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Correcciones de errores
- Se corrigió
StartupTimingMetric
para que ya no requiera que las actividades medidas se inicien a través deMacrobenchmarkScope.startActivityAndWait()
. Esto significa que la métrica puede recoger lanzamientos de, p. ej., notificaciones,Context.startActivity()
, navegación basada en la actividad en la app o comandos de shell (Ia2de6, b/245414235). - Se corrigió el error por el que
startActivityAndWait
agotaba el tiempo de espera al intentar esperar la finalización del inicio en emuladores reduciendo la rigurosidad de la detección de fotogramas (Ibe2c6, b/244594339, b/228946895).
Versión 1.2.0-alpha03
7 de septiembre de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha03
. La versión 1.2.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se agregaron APIs experimentales para usar
BenchmarkState
de forma independiente, separadas deBenchmarkRule
/JUnit4
(Id478f, b/228489614).
Correcciones de errores
- Se agregó el resguardo de Leanback para
startActivityAndWait
(01ed77, b/242899915).
Versión 1.2.0-alpha02
24 de agosto de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha02
. La Versión 1.2.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- La configuración predeterminada es
am force stop
paraMacrobenchmarkScope.killProcess()
, incluso cuando tiene permisos de administrador, excepto durante la generación del perfil de Baseline. Esto se puede anular con un argumento booleano opcional (02cce9, b/241214097).
Correcciones de errores
- Se admite la generación de perfiles de referencia para apps del sistema (I900b8, b/241214097).
- Se admite la verificación de métricas de energía de ODPM en dispositivos sin derechos de administrador (a38c78, b/229623230).
Versión 1.2.0-alpha01
27 de julio de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.2.0-alpha01
. La versión 1.2.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Se agregó un nuevo componente tracing-perfetto-common que permite habilitar el seguimiento del SDK de Perfetto en una app que lo expone (I2cc7f).
Se agregó el argumento de instrumentación
androidx.benchmark.enabledRules
para habilitar el filtrado de macrobenchmarks solo a benchmarks o solo a la generación de perfiles de referencia. Pasa "Macrobenchmark" o "BaselineProfile" para ejecutar un solo tipo de prueba, p. ej., cuando se genereBaselineProfiles
en un emulador. También se admite la lista separada por comas (I756b7, b/230371561).Por ejemplo, en el archivo build.gradle de tu macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
O bien, desde la línea de comandos de Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Cambios en la API
- Se agregó un nuevo
PowerMetric
para medir tareas de energía y energía en comparativas (I9f39b, b/220183779). - Se agregó un nuevo modo de compilación
CompilationMode.Ignore
para omitir la compilación y el restablecimiento del perfil (Ibbcf8, b/230453509). - Se agregó un parámetro nuevo a
BaselineProfileRule#collectBaselineProfile
para filtrar el archivo de salida por nombres de paquetes (If7338, b/220146561). - Permite que el programador descargue el dispositivo para medir el consumo de energía (I6a6cb).
- Se agregó la capacidad de borrar la caché del sombreador en
MacrobenchmarkScope
(I32122). - Permite al desarrollador configurar la visualización del tipo de métrica y detallar las categorías del subsistema deseadas (I810c9).
- Anteriormente, se arrojaba una
UnsupportedOperationException
en la comparativa si se ejecutaba en un dispositivo no compatible. Ahora, la UOE solo ocurre si se usa la métrica en el dispositivo no compatible (es decir,PowerMetric.configure
) (I5cf20, b/227229375). - Se agregaron
TotalPowerMetric
yTotalEnergyMetric
para medir la energía total y la de cada categoría del sistema en macrobenchmarks (I3b26b, b/224557371).
Correcciones de errores
- Se solucionó un problema por el que no se restablecían correctamente los métodos compilados entre cada macrobenchmark en compilaciones sin permisos de administrador. Lamentablemente, esto requiere reinstalar el APK cada vez que se realice una iteración, lo que borrará los datos de la aplicación para cada macrobenchmark (I31c74, b/230665435).
- Se corrigió la falla de registro de seguimiento en la API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788).
- Se detecta la finalización del inicio de la actividad de sobrecarga para corregir la excepción "No se puede leer ninguna métrica" en la macrobenchmark de inicio (Ia517c).
Versión 1.1.1
Versión 1.1.1
9 de noviembre de 2022
Se lanzó androidx.benchmark:benchmark-*:1.1.1
. La versión 1.1.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió
android.system.ErrnoException: open failed: EACCES
que se producía en algunos dispositivos con Android 11 (nivel de API 30) y superiores. Esta es una corrección puntual de1.2.0-alpha01
(aosp/2072249).
Versión 1.1.0
Versión 1.1.0
15 de junio de 2022
Lanzamiento deandroidx.benchmark:benchmark-*:1.1.0
. La versión 1.1.0 contiene estas confirmaciones.
- Esta versión es idéntica a
androidx.benchmark:benchmark-*:1.1.0-rc03
.
Cambios importantes desde 1.0.0
La compatibilidad con Jetpack Macrobenchmark, que te permite medir interacciones completas de la app, como el inicio y el desplazamiento, brinda la capacidad para capturar registros y medir secciones de estos registros.
Compatibilidad con perfiles de Baseline
CompilationMode.Partial
para medir la efectividad de los perfiles de Baseline.@BaselineProfileRule
para generar automáticamente perfiles de Baseline para un recorrido crítico del usuario.
Compatibilidad con métricas de asignación y generación de perfiles durante ejecuciones de Microbenchmark.
Versión 1.1.0-rc03
1 de junio de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-rc03
. La versión 1.1.0-rc03 contiene estas confirmaciones.
Correcciones de errores
Se evita la reinstalación del paquete de destino en cada iteración de benchmark (aosp/2093027, b/231976084).
Se quitó la demora de
300ms
depressHome()
(aosp/2086030, b/231322975).Se mejoró la velocidad de iteración de macrobenchmarks mediante la optimización de los comandos de shell que se usan en nivel interno (aosp/2086023, b/231323582).
Se agregó compatibilidad con dispositivos Gradle administrados cuando se generan perfiles de Baseline con Macrobenchmarks (aosp/2062228, b/228926421).
Versión 1.1.0-rc02
11 de mayo de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-rc02
. La versión 1.1.0-rc02 contiene estas confirmaciones.
- Ten en cuenta que esta versión incluye un cambio de comportamiento, ya que ahora las apps se vuelven a instalar por completo entre cada comparativa para garantizar mediciones precisas.
Correcciones de errores/Cambios de comportamiento
Se solucionó un problema por el que no se restablecía, de forma correcta, la compilación de apps entre macrobenchmarks ni en todas las compilaciones sin permisos de administrador. Esto corrige muchos casos en los que ejecutar varias pruebas causaba que
CompilationMode
produjera poco o ningún efecto en las mediciones. Para solucionar este problema, la app de destino ahora está reinstalando por completo cada método de prueba, lo que borrará los datos de la aplicación entre cada macrobenchmark (I31c74, b/230665435).Como esto evita que las apps configuren el estado antes de las pruebas, ahora es posible omitir la compilación o reinstalación para poder solucionar este problema. Por ejemplo, puedes compilar por completo el destino con un comando de shell
cmd package compile -f -m speed <package>
y, luego, omitir el paso de compilación de macrobenchmarks.Por ejemplo, en el archivo build.gradle de tu macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
O bien, desde la línea de comandos de Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
Ahora es posible compartir un módulo entre macrobenchmarks y el perfil de Baseline que genera pruebas si agregas el argumento de instrumentación
androidx.benchmark.enabledRules
. Pasa "Macrobenchmark" o "BaselineProfile" para ejecutar un solo tipo de prueba, p. ej., cuando se genereBaselineProfiles
en un emulador (I756b7, b/230371561).Por ejemplo, en el archivo build.gradle de tu macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
O bien, desde la línea de comandos de Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Versión 1.1.0-rc01
20 de abril de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-rc01
. La versión 1.1.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Los vínculos de salida del perfil de Baseline en Android Studio ahora usan un nombre de archivo único. De esta manera, el resultado siempre refleja los más recientes del uso de una
BaselineProfileRule
(aosp/2057008, b/228203086).
Versión 1.1.0-beta06
6 de abril de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-beta06
. La versión 1.1.0-beta06 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla de registro de seguimiento en la API 21/22 (If7fd6, b/227509388).
- Se detecta la finalización del inicio de la actividad de sobrecarga para corregir la excepción "No se puede leer ninguna métrica" en la macrobenchmark de inicio (Ia517c).
- Se corrigieron las métricas de inicio de Macrobenchmarks cuando se usa
CompilationMode.None()
. Antes de este cambio, el valor deCompilationMode.Partial()
parecía ser más lento que el deCompilation.None()
(611ac9).
Versión 1.1.0-beta05
23 de marzo de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-beta05
. La versión 1.1.0-beta05 contiene estas confirmaciones.
Correcciones de errores
- Finaliza el paquete después de omitir la instalación del perfil cuando se usa
CompilationMode.None
(aosp/1991373). - Se solucionó un problema por el que Macrobenchmarks no podía recopilar métricas de inicio cuando se usaba
StartupMode.COLD
(aosp/2012227 b/218668335).
Versión 1.1.0-beta04
23 de febrero de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-beta04
. La versión 1.1.0-beta04 contiene estas confirmaciones.
Correcciones de errores
Se corrigieron las métricas que faltaban en Android 10 y
NoSuchElementException
que causaban los nombres de procesos que no se capturaban, de manera correcta, en los seguimientos (Ib4c17, b/218668335).Se usó
PowerManager
para la detección de modelos térmicos en Q (API 29) y versiones posteriores. Esto reduce significativamente la frecuencia de los falsos positivos en la detección de modelos térmicos (reintento de comparativas después del enfriamiento de 90 segundos) y acelera las comparativas de manera considerable en compilaciones de usuarios. También proporciona detección de modelos térmicos incluso cuando los relojes están bloqueados (si están bloqueados demasiado alto para el entorno físico del dispositivo) (I9c027, b/217497678, b/131755853).Se filtró la generación de perfiles de muestra de simpleperf para el subproceso
measureRepeated
a fin de simplificar la inspección (Ic3e12, b/217501939).Se admitieron métricas de subprocesos de la IU con nombre en apps de varios procesos (Ice6c0, b/215988434).
Se filtraron las reglas del perfil de Baseline para orientarlas a Android 9 (SDK 28) (aosp/1980331 b/216508418).
Se omite la instalación de perfiles cuando se usa
Compilation.None()
. Además, se informan advertencias cuando la app use una versión anterior deandroidx.profileinstaller
y del complemento de Android para Gradle (aosp/1977029).
Versión 1.1.0-beta03
9 de febrero de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-beta03
. La versión 1.1.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregó
AudioUnderrunMetric
a la biblioteca de macrobenchmarks en la marca experimental para permitir la detección de subdesbordamientos de audio (Ib5972). BaselineProfileRule
ya no acepta un bloquesetup
porque esto funcionaba igual queprofileBlock
(Ic7dfe, b/215536447).Por ejemplo:
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Correcciones de errores
- Se solucionó el problema por el que no se actualizaban los seguimientos del generador de perfiles de microbench en ejecuciones posteriores cuando se vinculaban en el resultado de Studio (I5ae4d, b/214917025).
- Se impiden los comandos de shell de compilación en el nivel de API 23 (Ice380).
- Se cambió el nombre de
FrameCpuTime
porFrameDurationCpu
yFrameUiTime
porFrameDurationUi
para aclarar que son duraciones, no marcas de tiempo, y para que coincidan con los prefijos (I0eba3, b/216337830).
Versión 1.1.0-beta02
26 de enero de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-beta02
. La versión 1.1.0-beta02 contiene estas confirmaciones.
Correcciones de errores
- Los resultados de Microbenchmark Stack Sampling/Method Tracing Profile ahora están vinculados en el resultado de Studio, de manera similar a otras salidas de generación de perfiles, y no suprimen la métrica de asignación (Idcb65, b/214440748 y b/214253245).
- Ahora, BaselineProfileRule imprime el comando
adb pull
en logcat y el resultado de Studio para extraer el archivo de texto de BaselineProfile generado (f08811).
Versión 1.1.0-beta01
12 de enero de 2022
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-beta01
. La versión 1.1.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió la opción que habilitaba ignorar el argumento del generador de perfiles (I37373, b/210619998).
- Se quitó el objeto
CompliationModes
obsoleto (I98186, b/213467659). - Se modificó el argumento del perfil del modelo de referencia de
CompilationMode.Partial
para aclarar la numeración (Id67ea).
Versión 1.1.0-alpha13
15 de diciembre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha13
. La versión 1.1.0-alpha13 contiene estas confirmaciones.
Cambios en la API
- Se agregó el Registro del sistema de baja sobrecarga a la salida de microbench en Android Q (nivel de API 29 o superior). Ten en cuenta que, actualmente, no se obtiene el seguimiento personalizado (a través de las APIs de
android.os.Trace
oandroidx.tracing
de Jetpack) para evitar que se vean afectados los resultados. Este seguimiento debería ser útil para diagnosticar inestabilidad, sobre todo desde fuentes que se encuentran fuera de las comparativas (I298be, b/205636583, b/145598917). - Se aclaró
CompilationModes
en tres clases: Completo, Ninguno y Parcial. Antes, se les asignaba un nombre inconsistente según argumentos de compilación (que ahora conocemos como detalles de implementación) y funciones. Esto permite que las compensaciones, las combinaciones potenciales y el comportamiento en las versiones de la plataforma sean más claras (I3d7bf, b/207132597). - La configuración y la medición ahora están siempre en pares y en orden. Ahora puedes consultar el nombre y la iteración del paquete (aunque la iteración puede ser
null
en algunas situaciones de preparación) (Id3b68, b/208357448, b/208369635).
Correcciones de errores
- Se corrigió
CompilationMode.Speed
que se consideraba incorrectamente comoNone
(I01137).
Versión 1.1.0-alpha12
17 de noviembre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha12
. La versión 1.1.0-alpha12 contiene estas confirmaciones.
Nuevas funciones
- Agrega TraceSectionMetric experimental para las mediciones de tiempo personalizadas basadas en seguimientos (I99db1, b/204572664).
Correcciones de errores
- Activa el dispositivo en cada iteración para asegurarte de que se pueda probar la IU (se requiere que la pantalla de bloqueo esté inhabilitada) (Ibfa28, b/180963442).
- Se corrigieron varias fallas en el modo de generación de perfiles de StackSampling en emuladores y dispositivos sin derechos de administrador (Icdbda, b/202719335).
- Quitamos 0.5 segundos de suspensión al final de cada iteración. Si ves que faltan métricas con este cambio, informa un error (Iff6aa).
- Disminuye las posibilidades de pérdida de datos y reducción de la sobrecarga de memoria del seguimiento (Id2544, b/199324831, b/204448861).
- Reduce el tamaño de registro en aproximadamente un 40% si cambias al formato de almacenamiento programable compacto (Id5fb6, b/199324831).
- Se actualizaron las implementaciones de métricas de inicio para que siempre terminen al final del procesamiento de subprocesos. Esto será más coherente en todas las versiones de la plataforma y se asignará más estrechamente a las mediciones dentro de la app (Ic6b55).
Versión 1.1.0-alpha11
3 de noviembre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha11
. La versión 1.1.0-alpha11 contiene estas confirmaciones.
Cambios en la API
- Macrobenchmark ahora tiene un
minSdkVersion
de23
(If2655). - Se agrega un nuevo
BaselineProfileRule
experimental que es capaz de generar perfiles de referencia para el recorrido crítico del usuario de la app. Documentación detallada a continuación (Ibbefa, b/203692160). - Se quitó la variante de la interfaz measureRepeated, que se agregó para los emisores de Java, ya que causó ambigüedad al completar o resolver el método. Los emisores de Java deberán volver a mostrar Unit.Instance de measureRepeated. Si esto te resulta poco conveniente, informa un error y podemos volver a revisarlo en una versión futura (Ifb23e, b/204331495).
Versión 1.1.0-alpha10
27 de octubre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha10
. La versión 1.1.0-alpha10 contiene estas confirmaciones.
Cambios en la API
- Portabilidad a versiones anteriores de StartupTimingMetric para volver al nivel de API 23. Esta nueva implementación también controla mejor reportFullyDrawn() para esperar hasta que se procese el contenido correspondiente (If3ac9, b/183129298).
- Se agregó JvmOverloads a varios métodos de MacrobenchmarkScope para emisores de Java (I644fe, b/184546459).
- Proporciona la función alternativa MacrobenchmarkRule.measureRepeated que usa un
Consumer<MacrobenchmarkScope>
para el uso idiomático en Java (If74ab, b/184546459).
Correcciones de errores
- Se corrigieron los seguimientos que no se iniciaron con anticipación y faltan datos de métricas. Se espera que esto solucione las excepciones "No se puede leer ninguna métrica durante las comparativas" que haya provocado la biblioteca (I6dfcb, b/193827052, b/200302931).
- Se cambió el nombre de FrameNegativeSlack por FrameOverrun para aclarar su significado: por cuánto superó el marco su límite de tiempo (I6c2aa, b/203008701).
Versión 1.1.0-alpha09
13 de octubre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha09
. La versión 1.1.0-alpha09 contiene estas confirmaciones.
Correcciones de errores
- Se admite la eliminación de caché de la página del kernel sin raíz en el nivel de API 31/S+, lo que aumentará la exactitud de los inicios de StartupMode.COLD (Iecfdb, b/200160030).
Versión 1.1.0-alpha08
29 de septiembre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha08
. La versión 1.1.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se habilitaron las macroscomparativas de desplazamiento para volver a la API 23 (If39c2, b/183129298).
- Se agregó un nuevo tipo de métrica de muestra a la IU y el resultado de JSON que se centra en los percentiles de varias muestras por iteración (I56247, b/199940612).
- Se cambió a las métricas de punto flotante en las bibliotecas comparativas (truncadas en la IU de Studio) (I69249, b/197008210).
Versión 1.1.0-alpha07
1 de septiembre de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha07
. La versión 1.1.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se aumentó la API mínima a 21 para reflejar el nivel de API más bajo que se admitirá en el futuro. La API mínima actual admitida (29) sigue transmitiéndose mediante RequiredApi() (I440d6, b/183129298).
Correcciones de errores
- Se corrigió
ProfileInstaller
para facilitar que las apps que usan perfiles de referencia puedan ejecutar MacroBenchmarks medianteCompilationMode.BaselineProfile
(I42657, b/196074999). NOTA: También se debe actualizar aandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
o una versión posterior. - Las comparativas de
StartupMode.COLD
+CompilationMode.None
ahora son más estables (I770cd, b/196074999).
Versión 1.1.0-alpha06
18 de agosto de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha06
. La versión 1.1.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Se agregó un argumento de instrumentación
androidx.benchmark.iterations
para permitir la anulación manual del recuento de iteraciones cuando se realizan pruebas o se generan perfiles a nivel local. (6188be, b/194137879).
Correcciones de errores
- Se cambió a Simpleperf como generador de perfiles de muestras predeterminado en la API nivel 29 y versiones posteriores (Ic4b34, b/158303822).
Errores conocidos
CompilationMode.BaselineProfile
está en mantenimiento. Evita usarlo para determinar qué tan buen perfil es por ahora.
Versión 1.1.0-alpha05
4 de agosto de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha05
. La versión 1.1.0-alpha05 contiene estas confirmaciones.
Se canceló 1.1.0-alpha04
antes del lanzamiento debido a una falla esporádica (b/193827052).
Cambios en la API
- Se cambió startActivityAndWait para invocar el lanzamiento a través de
am start
, lo que reduce el tiempo de cada iteración de medición aproximadamente 5 segundos, a costa de ya no se admitan elementos parcelables de intent (I5a6f5, b/192009149).
Correcciones de errores
- Reduce la agresividad de la detección de limitaciones térmicas y vuelve a calcular el modelo de referencia si se regulan con frecuencia (I7327b).
- Se corrigió FrameTimingMetric para que funcione en la versión beta de Android S (Ib60cc, b/193260119).
- Usa una
EmptyActivity
para sacar la app de destino de un estado de detención forzada a fin de admitir mejorCompilationMode.BaselineProfile
(Id7cac, b/192084204). - Se cambió la extensión del archivo de registro a
.perfetto-trace
para que coincida con el estándar de la plataforma (I4c236, b/174663039). - StartupTimingMetric ahora genera la métrica "fullDrawnMs" para medir el tiempo que tarda tu app en completar la renderización. A fin de definir esta métrica para tu app, llama a Activity.reportFullyDrawn cuando el contenido inicial esté listo, por ejemplo, cuando los elementos de la lista inicial se carguen desde la base de datos o la red (método reportFullyDrawn disponible sin verificaciones de la versión de compilación en ComponentActivity). Ten en cuenta que tu prueba debe ejecutarse durante el tiempo suficiente para capturar la métrica (startActivityAndWait no espera a reportFullyDrawn) (If1141, b/179176560).
- Se redujo el costo de agregar metadatos de IU a los seguimientos en más de 50 ms (Ic8390, b/193923003).
- Se aumentó drásticamente la frecuencia de sondeo cuando se detiene el seguimiento, lo que puede reducir el tiempo de ejecución de comparativas de inicio en más de un 30% (Idfbc1, b/193723768).
Versión 1.1.0-alpha03
16 de junio de 2021
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha03
. La versión 1.1.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se agregó un
CompilationMode.BaselineProfile
nuevo para admitir perfiles instalados usando la biblioteca de Jetpack ProfileInstaller (aosp/1720930).
Correcciones de errores
Se actualizó el código de muestra de Gradle que suprime errores de comparativas para usar una API que no sea obsoleta con una sintaxis que también sea compatible con los usuarios de .gradle.kts.
P. ej.:
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Versión 1.1.0-alpha02
18 de mayo de 2021
La versión 1.1.0-alpha02 de Benchmark proporciona Macrobenchmarks, un gran componente para generar comparativas. Además de generar comparativas, lo que le permite medir los bucles de CPU, macrobenchmarks te permite medir interacciones completas de la aplicación, como inicio y desplazamiento, y capturar seguimientos. Para obtener más información, consulta la documentación sobre bibliotecas.
Lanzamiento de androidx.benchmark:benchmark-*:1.1.0-alpha02
. La versión 1.1.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
Se agregaron artefactos de macrobenchmarks (androidx.benchmark:benchmark-macro-junit4
y androidx.benchmark:benchmark-macro
):
- Captura de métricas de rendimiento de inicio, desplazamiento y animación desde tu app, de forma local o en IC
- Captura e inspección de seguimientos desde Android Studio
Correcciones de errores
- Se ideó una solución alternativa al problema de permisos de shell en el directorio de salida de Android 12 (Nota: Es posible que se tenga que actualizar el complemento de Android para Gradle a la versión canary 7.0.0 y Android Studio a Arctic Fox (2020.3.1) para continuar capturando archivos de salida en dispositivos afectados) (Icb039).
- Compatibilidad de caché de configuración en BenchmarkPlugin (6be1c1, b/159804788).
- Se corrigió la activación de forma predeterminada del archivo de salida simplificado en un directorio que no requiere
requestLegacyExternalStorage=true
(8b5a4d, b/172376362). - Se corrigieron las advertencias de impresión de logcat de la biblioteca cuando no encontraba subprocesos de JIT en versiones de la plataforma en las que no está presente (I9cc63, b/161847393).
- Se corrigió la frecuencia máxima del dispositivo de lectura (I55c7a).
Versión 1.1.0-alpha01
10 de junio de 2020
Lanzamiento de androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
y androidx.benchmark:benchmark-junit4:1.1.0-alpha01
. La versión 1.1.0-alpha01 contiene estas confirmaciones.
Nuevas funciones de 1.1
- Métrica de asignación: Las comparativas ahora ejecutan una fase adicional luego de la preparación y sincronización, y capturan los recuentos de asignación. Las asignaciones pueden causar problemas de rendimiento en versiones anteriores de la plataforma (los 140 ns en O se convirtieron en 8 ns en M, medidos en Nexus 5X con relojes bloqueados). Se muestra esta métrica en el resultado de la consola de Android Studio, así como en
- Compatibilidad con la generación de perfiles: Ahora puedes capturar datos de generación de perfiles para obtener comparativas a fin de inspeccionar el motivo de la ejecución lenta de tu código. Benchmark admite la captura mediante seguimiento de métodos o muestreo de métodos desde ART. Estos archivos pueden inspeccionarse con el generador de perfiles de Android Studio mediante File > Open.
- El complemento de Gradle de la biblioteca de Benchmark ahora brinda valores predeterminados para una configuración más simple:
- Se establece
testBuildType
para lanzarse de forma predeterminada, a fin de evitar el uso de dependencias con cobertura de código incorporada. El buildType de lanzamiento es también el predeterminado, que permite que Android Studio seleccione automáticamente la variante de compilación correcta cuando abre un proyecto por primera vez (b/138808399). - Se usa
signingConfig.debug
como la configuración de firma predeterminada (b/153583269).
- Se establece
** Correcciones de errores **
- Se redujo de forma significativa la sobrecarga de la transición de preparación, en la que la primera medición para cada comparativa fue artificialmente más alta que otras. Este problema era más evidente en comparativas muy pequeñas (1 microsegundo o menos) (b/142058671).
- Se corrigió el error
InstrumentationResultParser
que se mostraba para cada comparativa cuando se ejecutaba desde la línea de comandos (I64988, b/154248456).
Errores conocidos
- La línea de comandos y las invocaciones de Gradle de la biblioteca Benchmark no imprimen los resultados de forma directa. Para solucionar este problema, ejecuta el código mediante Studio o analiza el archivo de salida JSON a fin de obtener los resultados.
- La función de informes de Benchmark no puede extraer informes de dispositivos que tengan una app instalada con un applicationID que termine en "android" o "download" (no distingue entre mayúsculas y minúsculas). Los usuarios que tengan este problema deberán actualizar el complemento de Gradle para Android a la versión 4.2-alpha01 o posterior.
Versión 1.0.0
Versión de Benchmark 1.0.0
20 de noviembre de 2019
Lanzamiento de androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
y androidx.benchmark:benchmark-junit4:1.0.0
sin cambios desde la versión 1.0.0-rc01. La versión 1.0.0 contiene estas confirmaciones.
Funciones principales de la versión 1.0.0
La biblioteca de Benchmark te permite escribir comparativas de rendimiento del código de la app y obtener resultados rápidamente.
Evita problemas de compilación y configuración del tiempo de ejecución, y estabiliza el rendimiento del dispositivo para garantizar que las mediciones sean exactas y consistentes. Ejecuta las comparativas directamente en Android Studio o en integración continua para observar el rendimiento del código en el tiempo y evitar las regresiones.
Las funciones principales incluyen:
- Estabilización del reloj
- Priorización automática de subprocesos
- Compatibilidad con las pruebas de rendimiento de IU, como en la muestra de RecyclerView
- Repetición y calentamiento con JIT
- Resultado de comparativa JSON para el posprocesamiento
Versión 1.0.0-rc01
23 de octubre de 2019
Lanzamiento de androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
y androidx.benchmark:benchmark-junit4:1.0.0-rc01
. La versión 1.0.0-rc01 contiene estas confirmaciones.
Nuevas funciones
- Se agregó el seguimiento de systrace a las comparativas
Correcciones de errores
- Se corrigió el problema de inestabilidad de métrica donde JIT no finalizaba antes del calentamiento debido a la falta de priorización (b/140773023).
- Directorio de resultado de JSON unificado en el complemento de Gradle para Android 3.5 y 3.6
Versión 1.0.0-beta01
9 de octubre de 2019
Lanzamiento de androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
y androidx.benchmark:benchmark-junit4:1.0.0-beta01
. La versión 1.0.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- Ejecuta la recolección de elementos no utilizados antes de cada preparación para reducir la presión de memoria de una comparativa a otra (b/140895105).
Correcciones de errores
- Se agregó la dependencia de
androidx.annotation:android-experimental-lint
para que el código de Java produzca correctamente los errores de lint cuando no se utiliza la API experimental, de forma similar a lo que proporciona la anotación experimental Kotlin para las llamadas a Kotlin. - Ahora detecta de manera correcta el uso del argumento de instrumentación
additionalTestOutputDir
para el resultado en el complemento de Gradle para Android 3.6, a fin de saber cuándo AGP procesará la copia de datos. - Se corrigió la frecuencia de reloj no detectada en JSON para imprimir correctamente
-1
(b/141945670).
Versión 1.0.0-alpha06
18 de septiembre de 2019
Lanzamiento de androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
y androidx.benchmark:benchmark-junit4:1.0.0-alpha06
. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una búsqueda del uso incorrecto del paquete anterior para el corredor de prueba, que ahora proporciona un mensaje de error más útil.
Cambios en la API
- La anotación experimental
ExperimentalAnnotationReport
ahora es correctamente pública. El uso de la API experimental BenchmarkState#report ahora requiere esta anotación
Versión 1.0.0-alpha05
5 de septiembre de 2019
Lanzamiento de androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
y androidx.benchmark:benchmark-junit4:1.0.0-alpha05
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Cambios en la API
- La API de
BenchmarkState.reportData
ahora se marca como experimental
Correcciones de errores
- Se corrigió la secuencia de comandos de bloqueo de reloj, que fallaba en los dispositivos a los que les faltaban las utilidades de shell
cut
oexpr
. - Se corrigió un problema con la tarea
./gradlew lockClocks
que se bloqueaba en los dispositivos con permisos de administrador con una versión anterior de la utilidad su, que no era compatible con la marca-c
.
Versión 1.0.0-alpha04
7 de agosto de 2019
Lanzamiento de androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
y androidx.benchmark:benchmark-junit4:1.0.0-alpha04
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
También se agregó nueva documentación sobre cómo usar la biblioteca Benchmark sin Gradle, tanto para usarla con diferentes sistemas de compilación (como Bazel o Buck), como para cuando se ejecuta en CI. Para obtener más información, consulta Cómo compilar comparativas sin Gradle y Cómo ejecutar comparativas en integración continua.
Nuevas funciones
- Complemento de Gradle
- Ahora inhabilita automáticamente la cobertura de la prueba y establece
AndroidBenchmarkRunner
de forma predeterminada (b/138374050). - Se agregó compatibilidad con la nueva copia de datos basada en AGP, para cuando se ejecutan comparativas y se usa AGP 3.6+.
- Ahora inhabilita automáticamente la cobertura de la prueba y establece
- Adiciones de formato JSON.
- Tiempo total de ejecución de prueba de comparativas (b/133147694).
- Las comparativas
@Parameterized
que usan una string de nombre (por ejemplo,@Parameters(name = "size={0},depth={1}")
) ahora muestran nombres y valores de parámetros por comparativa en el resultado de JSON ( b/132578772 ).
- Modo de ejecución en seco (b/138785848).
- Se agregó un modo de "ejecución en seco" para ejecutar cada bucle de comparativa solo una vez, a fin de verificar errores/fallas sin capturar mediciones. Esto puede ser útil, p. ej., para ejecutar comparativas con rapidez en el envío previo para verificar que no estén dañadas.
Cambios en la API
- Se modificó la estructura del módulo y se dividió la biblioteca (b/138451391).
benchmark:benchmark-junit4
contiene clases con dependencia de JUnit:AndroidBenchmarkRunner
yBenchmarkRule
, que se movieron al paqueteandroidx.benchmark.junit4
.benchmark:benchmark-common
contiene el resto de la lógica, incluida la API de BenchmarkState.- Esta división permitirá que la biblioteca admita comparativas sin las APIs de JUnit4 en el futuro.
- Las advertencias de configuración ahora se tratan como errores y producen fallas en las pruebas (b/137653596).
- Esto se hace para alentar aún más las mediciones precisas, especialmente en IC.
- Estos errores se pueden volver a reducir a advertencias con un argumento de instrumentación. Por ejemplo:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Correcciones de errores
- Los errores que se producen al escribir en el almacenamiento externo en dispositivos Q proporcionan mensajes más descriptivos, con sugerencias sobre cómo resolver el problema.
- Las pantallas se encienden automáticamente durante las ejecuciones de comparativas, en lugar de fallar cuando la pantalla está apagada.
Contribuciones externas
- ¡Gracias a Sergey Zakharov por contribuir con las mejoras de resultados de JSON y la solución para los problemas de apagado de la pantalla!
Versión 1.0.0-alpha03
2 julio de 2019
Lanzamiento de androidx.benchmark:benchmark:1.0.0-alpha03
y androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Nuevas funciones
- Se expone la duración de la suspensión debido a la regulación térmica por comparativas en el informe de JSON completo.
Correcciones de errores
- Ya no es necesario aplicar el complemento de Gradle después de los complementos de Android y el bloque Android.
- Se agregó compatibilidad con informes de comparativas en dispositivos Android 10 que usan almacenamiento específico.
Versión 1.0.0-alpha02
6 de junio de 2019
Lanzamiento de androidx.benchmark:1.0.0-alpha02
y androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Ten en cuenta que tratamos al esquema JSON como una API. Nuestra idea es seguir las mismas restricciones de estabilidad que otras APIs: estable (con muy pocas excepciones) una vez en la versión beta, y corregido en la versión final, con solo adiciones en versiones menores y cambios/eliminaciones en versiones principales.
Cambios en la API
Se revisó el esquema de JSON. Es probable que los próximos cambios en el esquema de JSON se limiten a adiciones:
- Se reorganizó la estructura del objeto de resultado para admitir grupos de métricas adicionales en el futuro (b/132713021).
- Se agregó información de contexto de ejecución de prueba, como información sobre el dispositivo y la compilación, y si los relojes están bloqueados, al objeto de nivel superior (b/132711920).
- Los nombres de métrica de tiempo ahora incluyen "ns" (b/132714527).
- Se agregaron estadísticas adicionales por métrica informada (máxima, media, mínima) y se quitó la estadística de resumen de "nanos" (b/132713851).
Se quitó el resultado de XML (b/132714414).
Se quitó la detección de regulador térmico de la API de
BenchmarkState.reportData
(b/132887006 ).
Correcciones de errores
- Se corrigió un error por el que
./gradlew lockClocks
no permanecía en algunos dispositivos recientes del SO (b/133424037). - Se inhabilitó la detección de regulación para el emulador (b/132880807).
Versión 1.0.0-alpha01
7 de mayo de 2019
Lanzamiento de androidx.benchmark:benchmark:1.0.0-alpha01
. Las confirmaciones incluidas en esta versión están disponibles en este vínculo.