Gli sviluppatori di Chromium hanno fornito i primi risultati del progetto RenderingNG, avviato 8 anni fa, mirato a migliorare continuamente le prestazioni, l'affidabilità e l'espandibilità di Chrome.
Ad esempio, le ottimizzazioni introdotte nella versione Chrome 94 rispetto a Chrome 93 hanno consentito di ridurre le latenze nella gestione delle pagine dell'8% e di aumentare dell'0,5% il tempo di autonomia della batteria. Considerando le dimensioni della base utenti di Chrome, questi risultati si traducono in un risparmio globale di oltre 1400 anni di tempo di elaborazione ogni giorno. Rispetto alle versioni passate, l'attuale Chrome elabora la grafica con una velocità superiore del 150% e è sei volte meno soggetto a crash nei driver GPU su hardware problematico.
Tra i metodi implementati per ottenere un aumento delle prestazioni, è stato notato il parallelismo nelle operazioni di rasterizzazione di diversi pixel sul lato GPU e una distribuzione più attiva dei processori su diversi nuclei della CPU (esecuzione di JavaScript, gestione dello scrolling della pagina, decodifica di video e immagini, rendering anticipato dei contenuti). Un fattore limitante del parallelismo attivo è l'aumento del carico sulla CPU, che si traduce in un incremento della temperatura e del consumo energetico, quindi è importante trovare un equilibrio ottimale tra prestazioni e consumo energetico. Ad esempio, durante l'uso della batteria, si può sacrificare la velocità di rendering, ma non si può sacrificare l'elaborazione dello scrolling in un thread separato, poiché una riduzione della reattività dell'interfaccia sarebbe evidente per l'utente.
Le tecnologie implementate nel progetto RenderingNG cambiano completamente l'approccio al compositing e permettono di utilizzare in modo adattivo diverse tecnologie di ottimizzazione dei calcoli su GPU e CPU in relazione a parti specifiche delle pagine, considerando fattori come la risoluzione e la frequenza di aggiornamento dello schermo, oltre alla disponibilità all'interno del sistema di supporto per avanzate API grafiche come Vulkan, D3D12 e Metal. Tra gli esempi di ottimizzazione è citato l'uso attivo della memorizzazione nella cache delle texture GPU e dei risultati di rendering delle parti delle pagine web, nonché il fatto di prendere in considerazione solo le aree della pagina visibili all'utente durante il rendering (non ha senso effettuare il rendering delle parti della pagina coperte da altri contenuti).
Un elemento importante di RenderingNG è anche l'isolamento delle prestazioni nel trattamento delle diverse parti delle pagine, ad esempio per isolare i calcoli legati alla visualizzazione di annunci in blocchi iframe, alla visualizzazione di animazioni, alla riproduzione di suoni e video, allo scorrimento dei contenuti e all'esecuzione di JavaScript.

Tecniche di ottimizzazione implementate:
- In Chrome 94 è stato proposto un meccanismo CompositeAfterPaint, che consente di effettuare il compositing di parti di pagine web separate nel rendering e permette di scalare dinamicamente il carico sulla GPU. Secondo i dati raccolti dagli utenti tramite telemetria, l'uso del nuovo sistema di compositing ha permesso di ridurre i ritardi durante lo scorrimento del 8%, aumentare la reattività dell'interazione con l'utente del 3%, incrementare la velocità di rendering del 3%, ridurre il consumo di memoria GPU del 3% e prolungare la durata della batteria dell'0,5%.
- GPU Raster — un meccanismo di rasterizzazione lato GPU, è stato implementato su tutte le piattaforme nel 2020 e ha permesso di accelerare il superamento dei test MotionMark in media del 37%, e delle categorie legate all'HTML del 150%. Quest'anno, GPU Raster è stato arricchito con la possibilità di utilizzare l'accelerazione lato GPU per il rendering degli elementi Canvas, portando a un'accelerazione del rendering dei contorni del 1000% e a un miglioramento nel superamento dei test MotionMark 1.2 del 130%.
- LayoutNG — una revisione completa degli algoritmi di layout degli elementi delle pagine, mirata a migliorare l'affidabilità e la prevedibilità. Il progetto prevede di raggiungere gli utenti entro quest'anno.
- BlinkNG — rifattorizzazione e pulizia del motore Blink con separazione delle operazioni di rendering in fasi eseguite separatamente per migliorare l'efficienza della cache e semplificare il rendering posticipato tenendo conto della visibilità degli oggetti nella finestra. Il lavoro è previsto per essere completato quest'anno.
- Estensione a thread separati per la gestione dello scrolling, delle animazioni e della decodifica delle immagini. Il progetto è in sviluppo dal 2011 e quest'anno ha raggiunto la possibilità di estendere a thread separati le trasformazioni CSS animate e l'animazione SVG.
- VideoNG — motore efficiente e affidabile per la riproduzione di video su pagine web. Quest'anno è stata implementata la possibilità di visualizzare contenuti protetti con risoluzione 4K. In precedenza, era stato aggiunto il supporto per l'HDR.
- Viz — processi separati per la rasterizzazione (OOP-R — Rasterizzazione fuori processo) e il rendering (OOP-D — Compositore di visualizzazione fuori processo), che separano il rendering dell'interfaccia del browser dal rendering del contenuto delle pagine. Il progetto sta anche sviluppando il processo SkiaRenderer, che utilizza API grafiche specifiche per diverse piattaforme (Vulkan, D3D12, Metal). Questa modifica ha permesso di ridurre di sei volte il numero di crash causati da problemi nei driver grafici.
Fonte: opennet.ru
