Risultati dell'ottimizzazione di Chromium implementati dal progetto RenderingNG

Gli sviluppatori di Chromium hanno riassunto i primi risultati del progetto RenderingNG, lanciato 8 anni fa, finalizzato al lavoro in corso per aumentare le prestazioni, l'affidabilità e l'estensibilità di Chrome.

Ad esempio, le ottimizzazioni aggiunte in Chrome 94 rispetto a Chrome 93 hanno comportato una riduzione dell'8% nella latenza di rendering della pagina e un aumento dello 0.5% nella durata della batteria. In base alle dimensioni della base utenti di Chrome, ciò rappresenta un risparmio globale di oltre 1400 anni di tempo di CPU ogni giorno. Rispetto alle versioni precedenti, il moderno Chrome rende la grafica più veloce del 150% ed è 6 volte meno suscettibile ai crash dei driver GPU su hardware problematico.

Tra i metodi implementati per ottenere miglioramenti in termini di prestazioni, abbiamo notato la parallelizzazione delle operazioni di rasterizzazione di diversi pixel sul lato GPU e una distribuzione più attiva dei processori su diversi core della CPU (esecuzione di JavaScript, elaborazione dello scorrimento delle pagine, decodifica di video e immagini, rendering proattivo di contenuto). Il fattore limitante per la parallelizzazione attiva è il carico crescente sulla CPU, che si riflette nell'aumento delle temperature e nell'aumento del consumo energetico, quindi è importante raggiungere un equilibrio ottimale tra prestazioni e consumo energetico. Ad esempio, quando si utilizza la batteria, è possibile sacrificare la velocità di rendering, ma non è possibile sacrificare l'elaborazione dello scorrimento in un thread separato, poiché la diminuzione della reattività dell'interfaccia sarà evidente all'utente.

Le tecnologie implementate nell'ambito del progetto RenderingNG cambiano completamente l'approccio al compositing e consentono di utilizzare in modo adattivo diverse tecnologie per ottimizzare i calcoli su GPU e CPU in relazione alle singole parti delle pagine, tenendo conto di caratteristiche come la risoluzione dello schermo e la frequenza di aggiornamento , così come la presenza nel sistema del supporto per API grafiche avanzate, come Vulkan, D3D12 e Metal. Esempi di ottimizzazioni includono l'uso attivo della memorizzazione nella cache delle texture GPU e del rendering dei risultati di parti di pagine Web, nonché la presa in considerazione solo dell'area della pagina visibile all'utente durante il rendering (non ha senso eseguire il rendering di parti della pagina pagina coperta da altri contenuti).

Un elemento importante di RenderingNG è anche quello di isolare le prestazioni durante l'elaborazione di diverse parti delle pagine, ad esempio, per isolare il calcolo associato alla pubblicazione di annunci negli iframe, alla visualizzazione di animazioni, alla riproduzione di audio e video, allo scorrimento dei contenuti e all'esecuzione di JavaScript.

Risultati dell'ottimizzazione di Chromium implementati dal progetto RenderingNG

Tecniche di ottimizzazione implementate:

  • Chrome 94 offre il meccanismo CompositeAfterPaint, che fornisce la composizione di parti di pagine Web renderizzate separatamente e consente di ridimensionare dinamicamente il carico sulla GPU. Secondo i dati di telemetria dell'utente, il nuovo sistema di composizione ha ridotto la latenza di scorrimento dell'8%, aumentato la reattività dell'esperienza utente del 3%, aumentato la velocità di rendering del 3%, ridotto il consumo di memoria della GPU del 3% e prolungato la durata della batteria dello 0.5%.
  • GPU Raster, un motore di rasterizzazione lato GPU, è stato introdotto su tutte le piattaforme nel 2020 e ha accelerato i benchmark MotionMark in media del 37% e i benchmark relativi all'HTML del 150%. Quest'anno, GPU Raster è stata migliorata con la possibilità di utilizzare l'accelerazione lato GPU per eseguire il rendering degli elementi Canvas, ottenendo un rendering dei contorni più veloce del 1000% e benchmark MotionMark 1.2 più veloci del 130%.
  • LayoutNG è una riprogettazione completa degli algoritmi di layout degli elementi di pagina volta ad aumentare l'affidabilità e la prevedibilità. Si prevede che il progetto sarà presentato agli utenti quest'anno.
  • BlinkNG - refactoring e pulizia del motore Blink, suddividendo le operazioni di rendering in fasi eseguite separatamente per migliorare l'efficienza del caching e semplificare il lazy rendering, tenendo conto della visibilità degli oggetti nella finestra. Il completamento dei lavori è previsto quest'anno.
  • Spostamento dei gestori di scorrimento, animazione e decodifica delle immagini in thread separati. Il progetto è in sviluppo dal 2011 e quest'anno ha raggiunto la possibilità di esportare trasformazioni CSS animate e animazioni SVG in thread separati.
  • VideoNG è un motore efficiente e affidabile per la riproduzione di video su pagine web. Quest'anno è stata implementata la possibilità di visualizzare i contenuti protetti con risoluzione 4K. Il supporto HDR è stato aggiunto in precedenza.
  • Visualizzazione: processi separati per la rasterizzazione (OOP-R - Out-of-process Raster) e il rendering (OOP-D - Out of process display compositor), separando il rendering dell'interfaccia del browser dal rendering del contenuto della pagina. Il progetto sta inoltre sviluppando il processo SkiaRenderer, che utilizza API grafiche specifiche della piattaforma (Vulkan, D3D12, Metal). La modifica ha permesso di ridurre di 6 volte il numero di arresti anomali dovuti a problemi nei driver grafici.

Fonte: opennet.ru

Aggiungi un commento