¿Cuánto puede aportar la aceleración de la GPU Skia al renderizado de Webkit?
Andorid admite la aceleración de GPU desde la versión Honeycomb [3.x], pero actualmente Android no utiliza GPU Skia para el renderizado de Webkit.
Mucha gente cree que incluso si Android utiliza con éxito el renderizado Webkit acelerado por GPU, los usuarios no sentirán mucha diferencia al visitar y navegar por sitios web comunes como Yahoo.com. Esto se debe a que la mayoría de los recursos de Webkit son consumidos por scripts Javascript y posicionamiento del diseño.
Creemos que lo más destacado del renderizado acelerado por GPU de Webkit es el lienzo HTML5 (el efecto de dibujo dinámico de HTML5). La velocidad de representación de la animación de Canvas en Android es demasiado lenta, lo que hace imposible que los desarrolladores web utilicen Canvas para desarrollar juegos web en Android. Tenga en cuenta que muchas aplicaciones para dispositivos móviles y tabletas utilizan actualmente HTML5 como interfaz y funcionan con Webkit, lo cual es un factor importante por el cual muchas aplicaciones se sienten "fluidas" en Android.
Android es la primera aplicación del mercado que utiliza Webkit. ]
Prueba de la plataforma de desarrollo Webkit de Android [NDK] usando la aceleración de GPU Skia
Probamos Webkit en Android usando la aceleración de GPU Skia. Ya teníamos a mano la versión WAC 2.0 del NDK Webkit de Android, tomé una confirmación del código fuente de Skia y lo compilé en el NDK con la aceleración de GPU de Skia activada.
No utilicé la aceleración de Canvas porque aumentaría la carga de trabajo de modificar la API GraphicsContextSkia, por lo que no probé el rendimiento del renderizado de Canvas.
Para usar la aceleración de GPU Skia, hice las dos cosas siguientes:
1. Agregué un nuevo contenido eglContext usando GLSurfaceView.
2. Utilice SkGpuCanvas en lugar de SkCanvas en WebView.cpp. Probé en un Nexus S con la versión del sistema 2.3.2 y la aceleración de composición de pantalla y el caché de respaldo de Webkit deshabilitados. Los resultados fueron inesperados. La GPU Skia en realidad redujo el rendimiento de dibujo, que fue más lento que cuando Skia usó la CPU para renderizar. doble.
A medida que un usuario se desplaza por una página de Yahoo.com, cada cuadro hace que Webkit vuelva a dibujar los elementos de la página. Cuando se "aceleró" con Skia GPU, el 70% del texto, el 15% de los rectángulos y el 15% de las imágenes en los elementos de la página se renderizaron cinco veces más lento.
Cuando miras estos gráficos, podrías pensar que la GPU Skia procesa animaciones SVG un poco más rápido que la CPU. Pero Webkit tiene algunos problemas con la renderización de animaciones SVG, pasa la mayor parte de su tiempo posicionando elementos SVG de diseño en lugar de renderizarlos. Así que no estoy seguro de si Skia es realmente más rápido cuando usa la aceleración de GPU.
Skia utiliza la CPU en lugar de la GPU al rasterizar texto y almacena en caché el texto como mapas de materiales. Por lo tanto, la aceleración de la GPU Skia no aumenta la velocidad al desplazarse por el texto.
Inicialmente, pensé que la aceleración de la GPU Skia debería ser más rápida al dibujar íconos voladores del navegador; después de todo, esto es animación de mapa de bits, que es el punto fuerte de la GPU. Como resultado, la GPU Skia procesa 10 veces más lento…. Dado que aún no tenemos resultados detallados, necesitamos más investigaciones para encontrar la causa del problema.
Cuando construyes Skia, obtienes un programa de puntuación que, cuando se ejecuta, muestra las diferencias de rendimiento al renderizar con CPU y GPU. A continuación se muestran algunos aspectos destacados de los resultados de las pruebas.
Puedes ver que, con la excepción del dibujo de mapa de bits, el renderizado de la GPU Skia es aproximadamente dos veces más rápido que el renderizado de la CPU.
¿Por qué el renderizado de la GPU Skia es más lento?
Después de usar gDEBugger [herramienta de depuración] y los registros de callgrind, encontré varios problemas:
1. glDrawSomething fue llamado demasiadas veces
2, gl; El estado de [Graphics Linkbase] se ha ajustado demasiadas veces
3, FBO [Frame Buffer
Objetos] se ha cambiado demasiadas veces.
El quid de todos estos problemas es que glDrawSomething se usa demasiado, y cada vez que Webkit llama a SkCanvas::drawSomething, Skia llama repetidamente a glDraw, cambia el estado de GL y lo convierte a un FBO. Incluso si Skia resuelve estos tres problemas, no estoy seguro de que la GPU Skia pueda dibujar animaciones de texto y pequeñas formas geométricas más rápido que la CPU. Porque en realidad, es difícil que una GPU sea más rápida al renderizar geometrías pequeñas (menos de 10 píxeles) en cantidades de 1000 o más. Incluso antes de eso, los desarrolladores de Android habían optimizado en gran medida el renderizador lineal. En el programa de ejecución de Skia, también vemos que path_stroke_small_triangle es aproximadamente 15 veces más lento.
La promesa de la aceleración de GPU de Skia
Puedes pensar que es imposible utilizar la aceleración de GPU al dibujar gráficos vectoriales 2D, pero no saques conclusiones precipitadas, escribí un pequeño programa. para probar ¿Cuánto más rápido se puede dibujar una curva de Bézier usando una GPU que una CPU? Afortunadamente, la GPU de Android consume un poco más rápido que la CPU cuando se prueba en un Nexus
S.
Materiales relacionados Colección de esta imagen e imágenes relacionadas
Prueba de dibujo de curva de Bézier de 100 círculos -
Usa CPU para renderizar
Materiales relacionados Recopile imágenes relacionadas de esta imagen
Prueba de dibujo de curva de Bezier de 100 círculos:
Usa GPU para renderizar
Animación del dibujo de 100 círculos grandes. El renderizado de GPU es 1,5 veces más rápido.
Materiales relacionados Colección de esta imagen e imágenes relacionadas
Prueba de dibujo de curva de Bezier de 1000 círculos -
Usar renderizado de CPU
Materiales relacionados Recopilar imágenes relacionadas de esta imagen
Prueba de dibujo de curva de Bezier de 1000 círculos:
Usando renderizado de GPU
Dibuje 1000 círculos pequeños en animación, la velocidad de renderizado de GPU es cercana a la CPU.
Skia
Las GPU son más lentas, pero a Google solo le tomó un año implementarlas, y creo que Google puede mejorarlas de la misma manera que optimizaron la optimización de los renderizadores lineales. Si ese es el caso, creo que los usuarios de Android podrían disfrutar de los juegos de lienzo HTML5 en uno o dos años [Por supuesto, resulta que como los procesadores ARM están mejorando ahora, las GPU Skia podrían simplemente olvidarse... Traducción].