Разработчиците на Chromium обобщиха първите резултати от проекта RenderingNG, стартиран преди 8 години, насочен към постоянно подобряване на производителността, надеждността и разширяемостта на Chrome.
Например, оптимизациите, добавени в версия Chrome 94 в сравнение с Chrome 93, позволиха да се намалят закъсненията при обработка на страници с 8% и да се увеличи времето за работа от батерията с 0,5%. С оглед на размера на потребителската база на Chrome, тези показатели изразяват спестяване от над 1400 години време на процесора всеки ден в глобален мащаб. В сравнение с версиите от предишни години, съвременният Chrome рендерира графика повече от 150% по-бързо и е 6 пъти по-малко подложен на сривове в GPU драйверите на проблемно оборудване.
Сред реализираните методи, позволяващи увеличаване на производителността, се откроява паралелизацията на операциите по растеризация на различни пиксели на GPU и по-активното разпределение на обработчиците на различни ядра на CPU (изпълнение на JavaScript, обработка на скролинга на страницата, декодиране на видео и изображения, предварителна рендеринг на съдържание). Ограничаващият фактор при активната паралелизация е увеличаването на натоварването на CPU, което се отразява в покачването на температурата и увеличаването на енергийното потребление, затова е важно да се постигне оптимален баланс между производителността и енергийното потребление. Например, при работа от батерията може да се жертва скоростта на рендериране, но не може да се жертва обработката на скролинга в отделен поток, тъй като намаляването на отзивчивостта на интерфейса ще бъде забележимо за потребителя.
Технологиите, реализирани в рамките на проекта RenderingNG, напълно променят подхода към композицията и позволяват адаптивно прилагане на различни технологии за оптимизация на изчисленията на GPU и CPU, свързани с отделните части на страниците, като се вземат предвид особености като разрешение и честота на опресняване на екрана, а също така наличието на поддръжка за напреднали графични API в системата, като Vulkan, D3D12 и Metal. Като примери за оптимизации се посочва активно използване на кеширане на текстури на GPU и резултати от рендериране на части от уеб страниците, а също така и вземане предвид само на областта на страницата, видима за потребителя (няма смисъл да се извършва рендериране на части от страницата, покрити с друго съдържание).
Важно е изолирането на производителността при обработката на различни части от страниците, например, за изолиране на изчисленията, свързани с показването на реклама в блоковете iframe, показването на анимации, възпроизвеждането на звук и видео, превъртането на съдържанието и изпълнението на JavaScript.

Реализирани техники за оптимизация:
- В Chrome 94 е предложен механизъм CompositeAfterPaint, който осигурява композиране на отделно нарисуваните части на уеб страниците и позволява динамично мащабиране на натоварването на GPU. Според данните, получени от потребителите в резултат на събиране на телеметрия, прилагането на новата система за композиране е позволило да се намалят забавянията при превъртане с 8%, да се увеличи отзивчивостта на взаимодействието с потребителя с 3%, да се увеличи скоростта на рисуване с 3%, да се намали консумацията на памет от GPU с 3% и да се удължи времето на работа с 0.5%.
- GPU Raster — механизъм за растеризация на страна на GPU, беше внедрен за всички платформи през 2020 година и позволи да се ускори преминаването на тестове MotionMark средно с 37%, а категориите, свързани с HTML, с 150%. През тази година GPU Raster беше допълнен с възможността за използване на ускорение на страна на GPU за рисуване на Canvas елементи, което доведе до ускорение на рисуването на контури с 1000%, а преминаването на тестове MotionMark 1.2 — с 130%.
- LayoutNG — пълна преработка на алгоритмите за подреждане на елементите на страниците, насочена към повишаване на надеждността и предсказуемостта. Проектът планират да бъде предоставен на потребителите тази година.
- BlinkNG — рефакторинг и почистване на мотора Blink с отделяне на операциите по рисуване в отделно изпълнявани фази за повишаване на ефективността на кеширането и опростяване на отложеното рисуване, като се взема предвид видимостта на обектите в прозореца. Работата е планирана да бъде завършена тази година.
- Извеждане в отделни потоци на обработчици за превъртане, анимация и декодиране на изображения. Проектът напредва от 2011 година и тази година достигна възможността за извеждане в отделни потоци на анимирани CSS трансформации и анимации SVG.
- VideoNG — ефективен и надежден двигател за възпроизвеждане на видео на уеб страниците. През тази година е реализирана възможността за показване на защитено съдържание с резолюция 4K. По-рано беше добавена поддръжка на HDR.
- Viz — отделни процеси за растеризация (OOP-R — Out-of-process Raster) и визуализация (OOP-D — Out of process display compositor), които отделят визуализацията на интерфейса на браузъра от визуализацията на съдържанието на страниците. Проектът също така развива процеса SkiaRenderer, който използва специфични за различни платформи графични API (Vulkan, D3D12, Metal). Промяната е позволила да се намали броят на сривовете поради проблеми в графичните драйвери шест пъти.
Източник: opennet.ru
