Cómo mejorar el rendimiento de una cara de reloj con la aceleración de hardware

Las apps para Wear OS que usan vistas estándar se benefician de la renderización gráfica automática acelerada por hardware. Sin embargo, las caras de reloj suelen implementarse mediante lienzos, por lo que no obtienen aceleración de hardware automáticamente.

¿Por qué deberías usar un lienzo acelerado por hardware para tu cara de reloj?

En la mayoría de los casos, la cara de reloj se procesa a una velocidad de fotogramas más alta cuando se usa un lienzo acelerado por hardware. Cuanto más alta sea la velocidad de fotogramas, más fluidas se verán las animaciones y transiciones, lo que brinda una mejor experiencia del usuario

Cuando usas un lienzo acelerado por hardware, también puedes acceder a más datos de rendimiento de la IU sobre tu cara de reloj. Por ejemplo, cuando usas un lienzo acelerado por hardware, solo puedes acceder a la información detallada sobre fotogramas que se menciona en Cómo medir el rendimiento de la IU.

¿Mi cara de reloj usa aceleración de hardware?

Para verificar si la cara de reloj usa la aceleración de hardware, puedes usar las opciones para desarrolladores o adb.

Cómo verificar con las opciones para desarrolladores

Si quieres comprobar si tu cara de reloj usa aceleración de hardware con las opciones para desarrolladores, sigue estos pasos:

  1. En un dispositivo Wear OS, navega a Configuración > Opciones para desarrolladores.
  2. Habilita Depurar perfil de GPU.

    Esta opción dibuja una superposición sobre las plataformas visibles (una por cada plataforma) para mostrar la cantidad de tiempo empleado en cada etapa del procesamiento de GPU para esa plataforma.

  3. En el dispositivo, navega hacia atrás a la cara de reloj.

  4. Si tu cara de reloj usa un lienzo acelerado por hardware, verás una barra nueva que se mueve de derecha a izquierda para cada marco renderizado.

Cómo verificar con adb

Si deseas usar adb para comprobar si la cara de reloj usa aceleración de hardware, sigue estos pasos:

  1. En un dispositivo Wear OS, cambia la cara de reloj por la que quieras probar.
  2. Deja que la cara de reloj se ejecute durante unos segundos en el modo interactivo.
  3. Ejecuta el siguiente comando adb para verificar si la cara de reloj usa aceleración de hardware:

    adb shell dumpsys gfxinfo [package-name]

Una vez que ejecutes el comando, obtendrás un resultado similar al siguiente:

Applications Graphics Acceleration Info:
Uptime: 2239933 Realtime: 13568751

** Graphics info for pid 1100 [package-name] **

Stats since: 59875589194ns
Total frames rendered: 1213
Janky frames: 0 (0.00%)
50th percentile: 7ms
90th percentile: 18ms
95th percentile: 25ms
99th percentile: 150ms
Number Missed Vsync: 0
Number High input latency: 0
Number Slow UI thread: 0
Number Slow bitmap uploads: 0
Number Slow issue draw commands: 0
Number Frame deadline missed: 0

...

En este resultado de muestra, observa la línea que lee Total frames rendered. Por lo general, si el resultado muestra un total de fotogramas superiores a 0, la cara de reloj usa un lienzo acelerado. De lo contrario, el total de marcos procesados y otros datos de fotogramas del informe normalmente es 0.

Sin embargo, debido a que gfxinfo es el resultado del paquete completo de la app, es posible que veas información de latencia de fotogramas de algo que no sea un lienzo acelerado por hardware, como una Activity que use tu app para una pantalla de configuración. Para indicar la diferencia, asegúrate de que tu cara de reloj sea la única plataforma visible y, luego, vuelve a ejecutar el comando adb shell dumpsys gfxinfo para verificar si aumenta el valor de Total frames rendered.

Prácticas recomendadas

Sigue estas prácticas recomendadas a fin de garantizar la mejor experiencia posible para los usuarios.

Maximiza la duración de la batería

Si tu cara de reloj tiene animaciones de larga duración, usar la aceleración de hardware puede reducir en gran medida la duración de la batería de un dispositivo. Este problema puede empeorar si la cara de reloj intenta dibujar en cada fotograma. Para evitar un impacto negativo en los usuarios, no uses animaciones de larga duración en tu cara de reloj. Este lineamiento no es específico para usar la aceleración de hardware, pero, debido a que esta aumenta la cantidad de fotogramas que puedes dibujar, es aún más importante que lo sigas. Para obtener más información, consulta Prácticas recomendadas para las animaciones.

Usa operaciones de dibujo compatibles

Algunas operaciones de dibujo no son compatibles cuando se usa la aceleración de hardware. Para obtener información sobre lo que se admite, consulta Aceleración de hardware. Si tienes un conjunto pequeño de instrucciones de código que usa una operación no compatible, puedes crear un lienzo respaldado por un mapa de bits y, luego, dibujarlo en el lienzo de la cara de reloj con canvas.drawBitmap().

Mantén la compatibilidad cuando uses la aceleración de hardware

La aceleración de hardware está disponible en dispositivos Wear OS que ejecutan Android 9 (nivel de API 28) o versiones posteriores. Si deseas evitar una operación de dibujo específica en dispositivos más antiguos, en los que la aceleración de hardware no está disponible, o en una operación de dibujo no compatible en un lienzo acelerado por hardware, puedes verificar Canvas.isHardwareAccelerated() y ofrecer la funcionalidad alternativa.