Los desarrolladores de Chromium han presentado los primeros resultados del proyecto RenderingNG, lanzado hace 8 años, que se centra en mejorar continuamente el rendimiento, la fiabilidad y la escalabilidad de Chrome.
Por ejemplo, las optimizaciones añadidas en la versión Chrome 94, en comparación con Chrome 93, permitieron reducir los retrasos en el procesamiento de páginas en un 8% y aumentar el tiempo de funcionamiento del batería en un 0.5%. Teniendo en cuenta el tamaño de la base de usuarios de Chrome, estas cifras se traducen a una economía de más de 1400 años de tiempo de CPU al día a nivel global. En comparación con versiones anteriores, el Chrome actual renderiza gráficos más de un 150% más rápido y es 6 veces menos propenso a fallos en los controladores de GPU en hardware problemático.
Entre los métodos implementados para lograr mejoras en el rendimiento se destaca la paralelización de las operaciones de rasterización de diferentes píxeles en el lado de la GPU y una distribución más activa de los controladores entre los diferentes núcleos de la CPU (ejecución de JavaScript, procesamiento de desplazamientos de página, decodificación de vídeos e imágenes, pre-renderizado de contenido). Un factor limitante en la paralelización activa es el aumento de la carga en la CPU, que se refleja en un incremento de temperatura y un aumento en el consumo de energía, por lo que es importante encontrar un equilibrio óptimo entre rendimiento y consumo energético. Por ejemplo, al trabajar con batería, se puede sacrificar la velocidad de renderizado, pero no se puede sacrificar el procesamiento de desplazamiento en un hilo separado, ya que una reducción en la capacidad de respuesta de la interfaz será notoria para el usuario.
Las tecnologías implementadas en el marco del proyecto RenderingNG cambian por completo el enfoque de composición y permiten utilizar de manera adaptativa diferentes tecnologías de optimización de cálculos en GPU y CPU, vinculándolas a partes específicas de las páginas, teniendo en cuenta aspectos como la resolución y la frecuencia de actualización de la pantalla, así como la disponibilidad en el sistema de soportes para API gráficas avanzadas, como Vulkan, D3D12 y Metal. Como ejemplos de optimizaciones se menciona el uso activo del almacenamiento en caché de texturas de GPU y los resultados de renderizado de partes de páginas web, así como la consideración al renderizar solo las áreas de la página visibles para el usuario (no tiene sentido renderizar partes de una página que están cubiertas por otro contenido).
Un elemento fundamental de RenderingNG es el aislamiento del rendimiento al procesar diferentes partes de las páginas, por ejemplo, para aislar cálculos relacionados con la publicidad en bloques iframe, mostrar animaciones, reproducir audio y video, desplazarse por el contenido y ejecutar JavaScript.

Técnicas de optimización implementadas:
- En Chrome 94 se propuso un mecanismo CompositeAfterPaint, que permite el compositing de partes de páginas web dibujadas por separado y permite escalar dinámicamente la carga en la GPU. Según los datos obtenidos de los usuarios a través de la recopilación de telemetría, la nueva sistema de compositing ha reducido el retraso en el desplazamiento en un 8%, ha aumentado la capacidad de respuesta de la interacción del usuario en un 3%, ha incrementado la velocidad de renderizado en un 3%, ha disminuido el consumo de memoria de la GPU en un 3% y ha extendido el tiempo de autonomía en un 0.5%.
- GPU Raster — un mecanismo de rasterización del lado de la GPU, fue implementado para todas las plataformas en 2020 y permitió acelerar las pruebas MotionMark en promedio en un 37%, mientras que las categorías relacionadas con HTML alcanzaron un 150%. Este año, GPU Raster se complementó con la posibilidad de utilizar la aceleración del lado de la GPU para renderizar elementos Canvas, lo que llevó a una aceleración del renderizado de contornos en un 1000% y a la realización de pruebas MotionMark 1.2 en un 130%.
- LayoutNG — una reestructuración completa de los algoritmos de disposición de elementos de página, centrada en aumentar la fiabilidad y la predictibilidad. El proyecto se prevé que se entregue a los usuarios este año.
- BlinkNG — refactorización y limpieza del motor Blink, con separación de operaciones de renderizado en fases ejecutadas por separado para mejorar la eficiencia de la caché y simplificar el renderizado diferido teniendo en cuenta la visibilidad de los objetos en la ventana. Se espera finalizar el trabajo este año.
- Extracción hacia hilos separados de manejadores de desplazamiento, animación y decodificación de imágenes. El proyecto ha estado en desarrollo desde 2011 y este año logró la capacidad de extraer en hilos separados las transformaciones CSS animadas y la animación SVG.
- VideoNG — un motor eficiente y fiable para la reproducción de video en páginas web. Este año se implementó la posibilidad de mostrar contenido protegido con resolución 4K. Anteriormente, se había añadido soporte para HDR.
- Viz — procesos separados para rasterización (OOP-R — Rasterización fuera de proceso) y representación (OOP-D — Compositor de visualización fuera de proceso), que separan la renderización de la interfaz del navegador de la renderización del contenido de las páginas. El proyecto también desarrolla el proceso SkiaRenderer, que utiliza APIs gráficas específicas para diferentes plataformas (Vulkan, D3D12, Metal). Este cambio ha permitido reducir en 6 veces el número de fallos debido a problemas en los controladores gráficos.
Fuente: opennet.ru
