Chromium-ontwikkelaars hebben de eerste resultaten van het RenderingNG-project samengevat. Dit project is 8 jaar geleden gestart en is gericht op het doorlopend uitvoeren van werkzaamheden om de prestaties, betrouwbaarheid en uitbreidbaarheid van Chrome te verbeteren.
De optimalisaties die in Chrome 94 zijn toegevoegd ten opzichte van Chrome 93 resulteerden bijvoorbeeld in een reductie van 8% in de latentie bij het renderen van pagina's en een toename van 0.5% in de batterijduur. Gezien de omvang van Chrome's gebruikersbestand, vertalen deze statistieken zich wereldwijd in een besparing van meer dan 1400 jaar CPU-tijd per dag. Vergeleken met eerdere versies rendert de moderne Chrome-versie graphics meer dan 150% sneller en is de kans op crashes in GPU-drivers op problematische hardware 6 keer kleiner.
Tot de geïmplementeerde methoden die prestatieverbeteringen mogelijk maken, behoren parallellisatie van rasterbewerkingen van verschillende pixels aan de GPU-zijde en een actievere verdeling van processors over verschillende CPU-cores (het uitvoeren van JavaScript, het verwerken van paginascrollen, het decoderen van video en afbeeldingen, en het anticiperen op contentrendering). Een beperkende factor bij actieve parallellisatie is de toename van de CPU-belasting, wat zich vertaalt in een toename van de temperatuur en het stroomverbruik. Het is daarom belangrijk om een optimale balans te vinden tussen prestaties en stroomverbruik. Bij gebruik op accustroom kunt u bijvoorbeeld de renderingsnelheid inleveren, maar niet de scrollverwerking in een aparte thread, aangezien de afname in interfaceresponsiviteit merkbaar zal zijn voor de gebruiker.
De technologieën die binnen het RenderingNG-project worden geïmplementeerd, veranderen de aanpak van compositing volledig en maken adaptief gebruik van verschillende technologieën mogelijk voor het optimaliseren van GPU- en CPU-berekeningen met betrekking tot afzonderlijke pagina-onderdelen. Hierbij wordt rekening gehouden met kenmerken zoals schermresolutie en vernieuwingsfrequentie, evenals de aanwezigheid van ondersteuning voor geavanceerde grafische API's in het systeem, zoals Vulkan, D3D12 en Metal. Voorbeelden van optimalisaties zijn onder andere actief gebruik van GPU-textuurcaching en de resultaten van het renderen van webpagina-onderdelen. Ook wordt alleen rekening gehouden met het voor de gebruiker zichtbare gedeelte van de pagina tijdens het renderen (het heeft geen zin om pagina-onderdelen te renderen die door andere content worden bedekt).
Een belangrijk element van RenderingNG is ook het isoleren van de prestaties bij het verwerken van verschillende delen van pagina's. Dit kan bijvoorbeeld helpen bij het isoleren van berekeningen met betrekking tot het weergeven van advertenties in iframe-blokken, het weergeven van animaties, het afspelen van geluid en video, het scrollen van inhoud en het uitvoeren van JavaScript.

Geïmplementeerde optimalisatietechnieken:
- Chrome 94 introduceert CompositeAfterPaint, een mechanisme dat compositing van afzonderlijk gerenderde delen van webpagina's mogelijk maakt en de GPU-belasting dynamisch schaalt. Volgens telemetriegegevens van gebruikers verminderde het nieuwe compositingsysteem de scrolllatentie met 8%, verhoogde de gebruikersrespons met 3%, verhoogde de rendersnelheid met 3%, verminderde het GPU-geheugenverbruik met 3% en verlengde de batterijduur met 0.5%.
- GPU Raster, een GPU-gebaseerde rasterisatie-engine, werd in 2020 uitgerold naar alle platforms en resulteerde in een gemiddelde stijging van 37% in MotionMark-benchmarks en een stijging van 150% in HTML-gerelateerde categorieën. Dit jaar werd GPU Raster uitgebreid met de mogelijkheid om GPU-versnelling te gebruiken voor het renderen van Canvas-elementen, wat resulteerde in een stijging van 1000% in outline rendering en een stijging van 1.2% in MotionMark 130-benchmarks.
- LayoutNG is een volledig herziene versie van de algoritmen voor de lay-out van pagina-elementen, gericht op het verbeteren van de betrouwbaarheid en voorspelbaarheid. Het project zal naar verwachting dit jaar voor gebruikers beschikbaar komen.
- BlinkNG — Refactoring en opschoning van de Blink-engine, waarbij renderingbewerkingen worden opgesplitst in afzonderlijke fasen om de cache-efficiëntie te verbeteren en uitgestelde rendering te vereenvoudigen op basis van de zichtbaarheid van objecten in het venster. De voltooiing van de werkzaamheden staat gepland voor dit jaar.
- Scrolling, animatie en het decoderen van afbeeldingen naar aparte threads verplaatsen. Het project is al sinds 2011 in ontwikkeling en dit jaar is de mogelijkheid bereikt om geanimeerde CSS-transformaties en SVG-animaties naar aparte threads te verplaatsen.
- VideoNG is een efficiënte en betrouwbare engine voor het afspelen van video op webpagina's. Dit jaar werd de mogelijkheid geïntroduceerd om beveiligde content met 4K-resolutie weer te geven. HDR-ondersteuning werd eerder toegevoegd.
- Viz — aparte processen voor rastering (OOP-R — Out-of-process raster) en rendering (OOP-D — Out-of-process display compositor), waarbij rendering van de browserinterface wordt gescheiden van rendering van pagina-inhoud. Het project ontwikkelt ook het SkiaRenderer-proces, dat gebruikmaakt van platformspecifieke grafische API's (Vulkan, D3D12, Metal). Deze wijziging heeft het aantal crashes als gevolg van problemen met grafische drivers met een factor zes verminderd.
Bron: opennet.ru
