Programiści Chromium podsumowali pierwsze wyniki projektu RenderingNG, który rozpoczął się 8 lat temu i ma na celu stałe podnoszenie wydajności, niezawodności i skalowalności Chrome.
Na przykład, optymalizacje wprowadzone w wersji Chrome 94 w porównaniu do Chrome 93 pozwoliły na zredukowanie opóźnień w renderowaniu stron o 8% i zwiększenie czasu pracy na akumulatorze o 0,5%. Biorąc pod uwagę rozmiar bazy użytkowników Chrome, te wskaźniki przekładają się na oszczędność ponad 1400 lat czasu procesora każdego dnia. W porównaniu do wersji sprzed lat, współczesny Chrome renderuje grafikę ponad 150% szybciej i sześć razy rzadziej ulega awariom w GPU na problematycznym sprzęcie.
Wśród wdrożonych metod, które przyczyniły się do zwiększenia wydajności, wyróżnia się równoległe przetwarzanie operacji rasteryzacji różnych pikseli po stronie GPU oraz bardziej aktywne rozłożenie zadań na różne rdzenie CPU (wykonywanie JavaScript, obsługa przewijania strony, dekodowanie wideo i obrazów, wstępne rysowanie treści). Ograniczeniem w przypadku intensywnego przetwarzania równoległego jest wzrost obciążenia CPU, co przejawia się wzrostem temperatury i zwiększeniem zużycia energii, dlatego ważne jest, aby osiągnąć optymalną równowagę między wydajnością a zużyciem energii. Na przykład, pracując na akumulatorze, można poświęcić szybkość renderowania, ale nie można rezygnować z przetwarzania przewijania w oddzielnym wątku, ponieważ spadek responsywności interfejsu stanie się zauważalny dla użytkownika.
Technologie wdrożone w ramach projektu RenderingNG całkowicie zmieniają podejście do kompozycji i pozwalają na adaptacyjne wykorzystanie różnych technologii optymalizacji obliczeń na GPU i CPU w odniesieniu do poszczególnych części stron, uwzględniając takie cechy jak rozdzielczość i częstotliwość odświeżania ekranu, a także wsparcie w systemie dla zaawansowanych API graficznych, takich jak Vulkan, D3D12 i Metal. Jako przykłady optymalizacji wymienia się aktywne wykorzystanie buforowania tekstur GPU i wyników renderowania części stron internetowych, a także uwzględnienie podczas renderowania tylko obszarów strony widocznych dla użytkownika (nie ma sensu renderować części strony zakrytych inną treścią).
Ważnym elementem RenderingNG jest również izolacja wydajności podczas przetwarzania różnych części stron, na przykład w izolacji obliczeń związanych z wyświetlaniem reklam w blokach iframe, przedstawianiem animacji, odtwarzaniem dźwięku i wideo, przewijaniem treści oraz wykonywaniem JavaScript.

Wdrażane techniki optymalizacji:
- W Chrome 94 zaproponowano mechanizm CompositeAfterPaint, który umożliwia kompozycję oddzielnie renderowanych części stron internetowych i pozwala na dynamiczne skalowanie obciążenia GPU. Dane uzyskane od użytkowników podczas zbierania telemetrii pokazują, że zastosowanie nowego systemu kompozycji pozwoliło na zmniejszenie opóźnień podczas przewijania o 8%, zwiększenie responsywności interakcji z użytkownikiem o 3%, wzrost szybkości renderowania o 3%, obniżenie zużycia pamięci GPU o 3% i wydłużenie czasu pracy na baterii o 0,5%.
- GPU Raster — mechanizm rastrowania po stronie GPU, został wprowadzony na wszystkich platformach w 2020 roku i pozwolił na przyspieszenie testów MotionMark średnio o 37%, a kategorii związanych z HTML o 150%. W tym roku GPU Raster został wzbogacony o możliwość wykorzystania akceleracji po stronie GPU do renderowania elementów Canvas, co doprowadziło do przyspieszenia renderowania konturów o 1000%, a przejścia testów MotionMark 1.2 o 130%.
- LayoutNG — całkowita przebudowa algorytmów układania elementów stron, mająca na celu zwiększenie niezawodności i przewidywalności. Projekt planowany do wydania dla użytkowników w tym roku.
- BlinkNG — refaktoryzacja i czyszczenie silnika Blink z podziałem operacji renderowania na osobno wykonywane fazy w celu zwiększenia efektywności cachowania i uproszczenia opóźnionego renderowania z uwzględnieniem widoczności obiektów w oknie. Prace planowane na zakończenie w tym roku.
- Wyodrębnienie do osobnych wątków procesów obsługi przewijania, animacji i dekodowania obrazów. Projekt rozwijany od 2011 roku osiągnął w tym roku możliwość wyodrębnienia do osobnych wątków animowanych transformacji CSS i animacji SVG.
- VideoNG — efektywny i niezawodny silnik do odtwarzania wideo na stronach internetowych. W tym roku zrealizowano możliwość wyświetlania zabezpieczonej zawartości w rozdzielczości 4K. Wcześniej dodano wsparcie dla HDR.
- Viz — oddzielne procesy do rastaryzacji (OOP-R — Out-of-process Raster) i rysowania (OOP-D — Out of process display compositor), oddzielające rysowanie interfejsu przeglądarki od rysowania zawartości stron. Projekt rozwija również proces SkiaRenderer, wykorzystujący specyficzne dla różnych platform API graficzne (Vulkan, D3D12, Metal). Zmiana ta pozwoliła na zmniejszenie liczby awarii związanych z problemami w sterownikach graficznych sześciokrotnie.
Źródło: opennet.ru
