С тех пор как Ubuntu перешла с Unity на GNOME, сотрудники Canonical внесли множества улучшений в рамках работы над веткой GNOME 3.32. В частности, разработчик Даниэль Ван Вугт (Daniel Van Vugt) провёл работу над повышением производительности.
Вот небольшой перечень его исправлений:
Clutter - важнейшая часть стека GNOME. Библиотека, которая позволяет создавать графический интерфейс пользователя. Раньше все события ставились в очередь и их обработка откладывалась до следующих master clock tick. Это всё благотворно сказывалось лишь на уменьшении нагрузки на ЦПУ, но обладало недостатками. Теперь если есть достаточно свободного времени (idle time), то он будет использовано для доставки события сразу без промедления. В противном случае доставка событий будет использовать своё старое поведение - минимизация нагрузки ЦПУ (minimal-CPU).
Диаграмма от разработчиков
BEFORE
Time | 0 10 20 30 40 milliseconds
-----------------------------------------------------------------
| I I I I I I
| M :.......:......M M
| i i i
| rr rr........ rr
| RRRR RRRR .......RRRR
|-------|--------------------------|
2 10 37
Observed lag is 27ms for continuous input (scrolling)
or 35ms for instantaneous input (button press)
AFTER
Time | 0 10 20 30 40 milliseconds
-----------------------------------------------------------------
| I I I I I I
| M : : M M
| i i i i i i
| rr......rr? rr rr? rr rr?
| RRRR .....RRRR RRRR
|-------|---------|
2 10 20
Observed lag is 18ms for a swap interval 1 client (60Hz)
or 10ms for a swap interval 0 client (125Hz)
Улучшения в оконном менеджере Mutter позволяют уменьшить использование CPU и GPU при движениях мыши и избежать использования GPU, когда в этом нет необходимости.
Данные разработчика об его улучшениях:
125Hz mouse on an Intel i7-7700:
before: 10% CPU, 1% GPU
after: 6% CPU, 0% GPU (or 3% CPU if you include !283+gnome-shell!276)
С родным рендером Mutter теперь возможно принимать новые кадры, не блокируя их. Это улучшает производительность GNOME Wayland в режиме нескольких мониторов.
COGL это низкоуровневая библиотека абстракций OpenGL, разработанная для (и являющаяся частью) Clutter. В основном, она используется Clutter для предоставления API базовой отрисовки для прозрачной работы с OpenGL >=1.4, OpenGL ES 1.1 и OpenGL ES 2.0. Проведена работа по уменьшению задержек вывода и пропущенных кадров. Переписан код clutter-stage-cogl и окончательно закрыта проблема [Wayland] Mouse cursor stuck at 60hz when screen is idle and display refresh rate is >60hz
Различные улучшения, положительно влияющие на быстродействие:
* добавлены возможность различать между собой массовые непрерывные события типа движения мыши и события, таковыми не являющиеся. Это позволяет "не спускать" вниз дорогостоящие в плане ЦПУ события на обработку к gnome-shell JavaScript и снизить траты процессора.
* в cogl-winsys-glx исправлена ситуация с утечкой и ситуацией состояния гонки.
* использование captured-event::discrete позволяет не тратить циклы ЦПУ, который ранее транслировал в JavaScript то, что тот игнорировал.
Множество различных разработчиков решают различные проблемы Гнома 3, от ошибок и регрессий до улучшений производительности и юзабилити. Сотрудники Canonical вносят свою лепту и все эти улучшения пользователи увидят в марте 2019 в рамках GNOME 3.32.0 и релиза Ubuntu 19.04 Disco Dingo.