Comparativas de hero

Las comparativas de Hero son un conjunto de comparativas que abarcan los recorridos del usuario de la app de alto nivel, como el inicio de la app o el desplazamiento en la app de código abierto de Pokedex.

  • Comparativas de héroes de inicio: Se hace un seguimiento del tiempo que transcurre desde que se abre la app hasta que se muestra el contenido.
  • Comparativas de desplazamiento de Hero: Mide el rendimiento del desplazamiento de una cuadrícula diferida con imágenes.

Configuración de las pruebas

  • Selección de la app: Realizamos estas pruebas con la app de código abierto Pokedex, en la que comparamos sus versiones basadas en View y basadas en Compose. La app se seleccionó para representar situaciones del mundo real y no la desarrolló el equipo de Compose.
  • Configuración del hardware: Las comparativas se ejecutaron en un Pixel 6 con Android 17 (nivel de API 37) con CPUs y GPUs bloqueadas. Antes de Compose 1.12, las comparativas se realizaban en un Pixel 3a. A partir de Compose 1.12, se usa el Pixel 6 como el modelo de referencia de rendimiento estándar para las comparativas principales, y Compose 1.11 también se midió en el Pixel 6 para realizar comparaciones.
  • Configuración de compilación: Las comparativas usan la app compilada en el modo de lanzamiento con R8 habilitado. La app se precompila por completo para reducir la inestabilidad de la compilación justo a tiempo (JIT).
  • Selección de resultados: Para garantizar el análisis del peor de los casos, se excluyeron los valores atípicos extremos y el ruido no representativo de los resultados de la comparativa. Luego, se estableció un modelo de referencia seleccionando los valores de la mediana de los datos de rendimiento del límite superior.

Comparativas de héroes de inicio

Para medir el inicio, usamos PokedexStartupBenchmark. El PokedexStartupBenchmark mide el tiempo que tarda la app de Pokédex en ser visible para el usuario.

El inicio de una app se puede llevar a cabo en uno de estos tres estados: inicio en frío, inicio semicaliente o inicio en caliente. Cada estado determina el tiempo que tarda una app en volverse visible para el usuario. En un inicio en frío, la app se inicia desde cero. En esta comparativa, medimos el rendimiento del inicio de la app en el estado de inicio en frío. Te recomendamos que siempre optimices la app en función de la perspectiva de un inicio en frío. ya que esto también puede mejorar el rendimiento de los inicios semicalientes y en caliente.

Las métricas que usamos para medir el tiempo de inicio de la app son el tiempo para la visualización inicial y el tiempo para la visualización completa.

Tiempo para la visualización inicial

El tiempo para la visualización inicial (TTID) mide el tiempo que tarda una app en producir su primer fotograma, incluidas la inicialización del proceso durante un inicio en frío, la creación de la actividad durante un inicio en frío o semicaliente, y la visualización del primer fotograma.

En el PokedexStartupBenchmark, Compose 1.13 alcanza la visualización inicial en 147.65 ms en un inicio en frío. Este resultado se encuentra dentro del ruido normal de ejecución a ejecución de Compose 1.12.1 (145.51 ms) y Compose 1.11.4 (147.78 ms), y es un 3.4% más rápido que las vistas (152.87 ms).

Tiempo transcurrido hasta la visualización inicial en milisegundos, probado en Pixel 6
VersiónTiempo para la visualización inicial (ms)
Compose 1.11147.78
Compose 1.12145.51
Compose 1.13147.65
Vistas152.87
Figura 1. En este gráfico, se compara el TTID de Compose 1.11, 1.12 y 1.13 con Views.

Tiempo para la visualización completa

El tiempo para la visualización completa (TTFD) mide el tiempo que tarda la app en volverse interactiva. Esto significa que se cargaron y dibujaron todos los datos. Para obtener más información sobre el tiempo de visualización completa, consulta Tiempo de inicio de la app.

En el PokedexStartupBenchmark, Compose 1.13 alcanza la visualización completa en 202.79 ms en un inicio en frío. Este resultado se encuentra dentro del ruido normal de ejecución a ejecución de Compose 1.12.1 (201.96 ms) y Compose 1.11.4 (203.33 ms). Views alcanza la visualización completa en 180.32 ms, por lo que Compose 1.13 es un 12.5% más lento que Views para TTFD.

Tiempo para la visualización completa en milisegundos, probado en un Pixel 6
VersiónTiempo para la visualización completa (ms)
Compose 1.11203.33
Compose 1.12201.96
Compose 1.13202.79
Vistas180.32
Figura 2. En este gráfico, se compara el TTFD de Compose 1.11, 1.12 y 1.13 con Views.

Comparativas de héroes de desplazamiento

Para medir el rendimiento del desplazamiento, usamos PokedexScrollBenchmark. Mide el rendimiento del desplazamiento de la pantalla de la app de Pokédex para una cuadrícula diferida con imágenes. En esta comparativa, se desplaza y se desliza toda la pantalla varias veces, y se cargan elementos nuevos. El rendimiento del desplazamiento se mide por la tasa de jank.

Tasa de bloqueos

Los dispositivos Android renderizan hasta 60 o 120 fotogramas por segundo (FPS). Esto significa que el sistema tiene un plazo estricto (por ejemplo, 16.6 ms para 60 FPS) para producir un fotograma. Si la app tarda demasiado en realizar su trabajo, puede causar un tartamudeo visible que llamamos jank.

En el PokedexScrollBenchmark, Compose iguala el rendimiento de las vistas con 0 puntos porcentuales de jank excesivo desde Compose 1.9.0. En Pixel 6, Views y Compose tienen un 0.00% de jank en Compose 1.11.4, 1.12.1 y 1.13.

Exceso de tirones de Compose sobre Views en puntos porcentuales, por versión de Compose (cuanto más bajo, mejor)
Versión de ComposeDispositivoBloqueos excesivos en las vistas (pp)
1.3.3Pixel 3a+0.35
1.4.3Pixel 3a+0.41
1.5.4Pixel 3a+0.42
1.6.8Pixel 3a+0,21
1.7.8Pixel 3a+0.36
1.8.0Pixel 3a+0.38
1.9.0Pixel 3a0
1.10.0Pixel 3a0
1.11Pixel 60
1.12Pixel 60
1.13Pixel 60
Figura 3: Desde Compose 1.9.0, Compose coincide con la latencia de desplazamiento de Views.

Ejecuta comparativas de héroe

Para validar los resultados de rendimiento y ejecutar las comparativas de forma local, haz lo siguiente:

  1. Sigue la guía de AndroidX para consultar el código fuente.
  2. Sigue las instrucciones del archivo README del código fuente de Hero Benchmarks para compilar los APKs de comparativas y de destino (pokedex-macrobenchmark y pokedex-macrobenchmark-target), instalarlos en un dispositivo de prueba y ejecutar los paquetes PokedexStartupBenchmark y PokedexScrollBenchmark con adb o Android Studio.

Puedes ejecutar estas comparativas en cualquier dispositivo compatible, como un dispositivo específico para el que estés optimizando tu app. Sin embargo, para validar los resultados oficiales, usa la misma configuración de hardware.