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 ya se benefician de la renderización de gráficos acelerados por hardware. Por el contrario, las caras de reloj se suelen implementar con 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. A velocidades de fotogramas más altas, las animaciones y transiciones se ven más fluidas. Para los usuarios, estos beneficios son evidentes.

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.

Cómo solicitar aceleración de hardware para tu cara de reloj

Crea un CanvasRenderer y establece tu canvasType para que sea CanvasType.HARDWARE a fin de solicitar la aceleración de hardware para la cara de reloj.

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

Puedes comprobar si tu cara de reloj usa la aceleración de hardware mediante las opciones para desarrolladores o adb.

Cómo verificar con las opciones para desarrolladores

Para comprobar si tu cara de reloj usa la aceleración de hardware mediante 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) a fin de 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 lienzos acelerados por hardware, verás una barra nueva (que se mueve de derecha a izquierda) para cada fotograma renderizado de tu cara de reloj.

Cómo verificar con adb

Para comprobar si tu cara de reloj usa aceleración de hardware mediante adb, sigue estos pasos:

  1. En un dispositivo Wear OS, cambia la cara de reloj por la tuya 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]

Después de ejecutar 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 dice Total frames rendered. Por lo general, si ves los datos de este fotograma en el resultado, significa que tu cara de reloj usa un lienzo acelerado. De lo contrario, el número de Total frames rendered (y otros números de datos de fotogramas del informe) será, por lo general, cero.

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 a fin de 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 aún más si la cara de reloj intenta dibujar en cada fotograma. Para evitar un impacto negativo en los usuarios, no deberías tener 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 la 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. Si tienes una ruta de código pequeña 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 Wearuld 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 una operación de dibujo no compatible en un lienzo acelerado por hardware, puedes verificarCanvas.isHardwareAccelerated() y ofrecer la funcionalidad alternativa.