Les développeurs de Chromium ont tiré les premiers enseignements du projet RenderingNG, lancé il y a 8 ans, qui vise à améliorer en permanence les performances, la fiabilité et l'évolutivité de Chrome.
Par exemple, les optimisations ajoutĂ©es dans la version Chrome 94 par rapport Ă Chrome 93 ont permis de rĂ©duire de 8 % les dĂ©lais de traitement des pages et d'augmenter de 0,5 % l'autonomie de la batterie. Ătant donnĂ© la taille de la base d'utilisateurs de Chrome, ces rĂ©sultats se traduisent Ă l'Ă©chelle mondiale par une Ă©conomie de plus de 1400 annĂ©es de temps processeur chaque jour. ComparĂ© aux versions des annĂ©es prĂ©cĂ©dentes, Chrome moderne rend les graphiques plus de 150 % plus rapidement et est 6 fois moins sujet aux crashes des pilotes GPU sur du matĂ©riel problĂ©matique.
Parmi les mĂ©thodes mises en Ćuvre pour amĂ©liorer les performances, on note la parallĂ©lisation des opĂ©rations de rasterisation de diffĂ©rents pixels du cĂŽtĂ© GPU et la distribution plus active des tĂąches sur diffĂ©rents cĆurs CPU (exĂ©cution de JavaScript, gestion du dĂ©filement des pages, dĂ©codage vidĂ©o et images, prĂ©-rendu du contenu). Un facteur limitant lors de la parallĂ©lisation active est l'augmentation de la charge sur le CPU, qui se manifeste par une montĂ©e en tempĂ©rature et une augmentation de la consommation d'Ă©nergie. Il est donc crucial d'atteindre un Ă©quilibre optimal entre performance et consommation d'Ă©nergie. Par exemple, lorsqu'il fonctionne sur batterie, on peut sacrifier la vitesse de rendu, mais il ne faut pas sacrifier le traitement du dĂ©filement dans un thread sĂ©parĂ©, car une diminution de la rĂ©activitĂ© de l'interface sera perceptible par l'utilisateur.
Les technologies mises en Ćuvre dans le cadre du projet RenderingNG changent totalement l'approche du compositing et permettent d'utiliser de maniĂšre adaptative diffĂ©rentes technologies d'optimisation des calculs sur GPU et CPU en fonction des parties spĂ©cifiques des pages, tenant compte de particularitĂ©s telles que la rĂ©solution et le taux de rafraĂźchissement de l'Ă©cran, ainsi que la prĂ©sence dans le systĂšme de support d'API graphiques avancĂ©es comme Vulkan, D3D12 et Metal. Parmi les optimisations Ă©voquĂ©es, on trouve l'utilisation active du caching des textures GPU et des rĂ©sultats du rendu de parties de pages web, ainsi que la prise en compte lors du rendu uniquement des zones de la page visibles pour l'utilisateur (il n'est pas utile de rendre des parties de page recouvertes par d'autres contenus).
Un élément clé de RenderingNG est également l'isolation des performances lors du traitement de différentes parties des pages, par exemple, pour l'isolation des calculs liés aux publicités dans des blocs iframe, l'affichage d'animations, la lecture de son et de vidéo, le défilement de contenu et l'exécution de JavaScript.

Techniques d'optimisation mises en Ćuvre :
- Dans Chrome 94, un mécanisme CompositeAfterPaint a été proposé, permettant le composition des parties dessinées séparément des pages web et permettant de moduler dynamiquement la charge sur le GPU. Selon les données collectées par les utilisateurs via la télémétrie, l'application de ce nouveau systÚme de composition a permis de réduire la latence lors du défilement de 8 %, d'améliorer la réactivité des interactions utilisateur de 3 %, d'accélérer le rendu de 3 %, de réduire la consommation de mémoire GPU de 3 % et d'augmenter l'autonomie de 0,5 %.
- GPU Raster â mĂ©canisme de rasterisation cĂŽtĂ© GPU, a Ă©tĂ© mis en Ćuvre pour toutes les plateformes en 2020 et a permis d'accĂ©lĂ©rer le passage des tests MotionMark en moyenne de 37 %, et les catĂ©gories liĂ©es au HTML de 150 %. Cette annĂ©e, GPU Raster a Ă©tĂ© complĂ©tĂ© par la possibilitĂ© d'utiliser l'accĂ©lĂ©ration cĂŽtĂ© GPU pour le rendu des Ă©lĂ©ments Canvas, ce qui a conduit Ă une augmentation de 1000 % pour le rendu des contours et un passage des tests MotionMark 1.2 de 130 %.
- LayoutNG â une refonte complĂšte des algorithmes de mise en page des Ă©lĂ©ments des pages, visant Ă amĂ©liorer la fiabilitĂ© et la prĂ©visibilitĂ©. Le projet est prĂ©vu pour ĂȘtre mis Ă la disposition des utilisateurs cette annĂ©e.
- BlinkNG â refactorisation et nettoyage du moteur Blink avec sĂ©paration des opĂ©rations de rendu en phases distinctes pour amĂ©liorer l'efficacitĂ© du cache et simplifier le rendu diffĂ©rĂ© tenant compte de la visibilitĂ© des objets dans la fenĂȘtre. Le travail doit ĂȘtre achevĂ© cette annĂ©e.
- Détacher les gestionnaires de défilement, d'animation et de décodage d'images dans des threads distincts. Le projet est en développement depuis 2011 et a atteint cette année la possibilité de détaché les transformations CSS animées et l'animation SVG dans des threads séparés.
- VideoNG â un moteur efficace et fiable pour la lecture de vidĂ©os sur les pages web. Cette annĂ©e, la possibilitĂ© d'afficher du contenu protĂ©gĂ© en rĂ©solution 4K a Ă©tĂ© rĂ©alisĂ©e. PrĂ©cĂ©demment, le support HDR a Ă©tĂ© ajoutĂ©.
- Viz â processus distincts pour la rasterisation (OOP-R â Rasterisation hors processus) et le rendu (OOP-D â Compositieur d'affichage hors processus), sĂ©parant le rendu de l'interface du navigateur du rendu du contenu des pages. Le projet dĂ©veloppe Ă©galement le processus SkiaRenderer, utilisant des API graphiques spĂ©cifiques Ă diffĂ©rentes plateformes (Vulkan, D3D12, Metal). Ce changement a permis de rĂ©duire par six le nombre de plantages dus Ă des problĂšmes dans les pilotes graphiques.
Source : opennet.ru
