Louvre — это высокопроизводительная библиотека C++, предназначенная для создания композиторов Wayland с упором на простоту разработки.
Создание композитора Wayland может оказаться непростой задачей, часто требующей месяцев или даже лет самоотдачи. Эта сложная задача включает в себя освоение входных и графических API Linux, управление графическими буферами и тщательную реализацию многочисленных протоколов Wayland и соответствующих им интерфейсов.
К счастью, Лувр упрощает этот сложный процесс, выполняя все сложные задачи низкого уровня от вашего имени. Он даже предоставляет способ управления протоколами по умолчанию, позволяя вам с первого дня иметь базовый, но функциональный наборщик, а также постепенно исследовать и настраивать его функциональность в точном соответствии с вашими требованиями.
В Louvre у вас есть возможность использовать свои собственные шейдеры/программы OpenGL ES 2.0, использовать класс LPainter для фундаментального 2D-рендеринга или использовать систему LScene и LView, которая управляет повреждением буфера, а также может обрабатывать события ввода за вас. Кроме того, при необходимости можно комбинировать эти три подхода.
Лувр предлагает отличную производительность. Тест, состоящий из рендеринга множества движущихся wl_subsurfaces (непрозрачных и полупрозрачных), в котором тестировался пример композитора louvre-weston-clone, показывает, что Louvre может поддерживать высокий уровень FPS даже в сложных сценариях. Кроме того, он использует меньше ресурсов ЦП и графического процессора, чем популярные наборщики, такие как Weston и Sway.
Машина | MacBook Pro A1398 (Retina, 15 дюймов, середина 2015 г.) |
Процессор | Intel Core i7-4770HQ @ 2,20 ГГц (до 3,4 ГГц) с общим кэшем третьего уровня объемом 6 МБ |
Память | 16 ГБ памяти DDR3L 1600 МГц |
графический процессор | Графика Intel Iris Pro — i915 (Intel Graphics) версия 1.6.0 (20201103) |
Отображать | 15-дюймовый дисплей Retina с одномодовым разрешением 2880x1800 при 60 Гц |
ОС | Linux Mint 21 — универсальный вариант Linux 5.15.0-86 |
Если вас интересуют подробности о том, как работает тест, и вы хотите попробовать его самостоятельно, перейдите по этой ссылке.
Вот график, иллюстрирующий результаты тестов. Он отображает средний FPS каждого композитора, рендерящего от 1 до 50 движущихся поверхностей с использованием двойной буферизации на дисплее HiDPI.
Результаты тестов не обновлялись с 2023 года и могут неточно отражать текущую производительность тестируемых наборщиков.
Большинство композиторов Wayland используют один поток, что резко снижает их производительность при рендеринге сложных сценариев. Причиной этого является вертикальная синхронизация , когда композитору приходится ждать несколько миллисекунд, прежде чем он сможет заменить только что отрендеренный фреймбуфер на тот, который отображается на экране. Это сделано для того, чтобы синхронизировать переключение с частотой обновления дисплея ( vblank ) и избежать эффекта разрыва изображения . При работе с одним потоком у композиторов возникает «мертвое время», которое не позволяет им вовремя обработать и отобразить контент для следующего кадра. Вот почему они в конечном итоге пропускают vblank , в результате чего частота обновления падает вдвое (или более). Чтобы избежать этой проблемы, Лувр работает с несколькими потоками. Каждый вывод (дисплей) отображает свое содержимое в своем собственном потоке, что позволяет наборщику продолжать обработку запросов и рендеринг на другие выходы, пока один из них ожидает vblank. Это предотвращает «мертвое время» у наборщиков Лувра и, следовательно, позволяет им поддерживать высокую частоту обновления.
На графике слева показаны необработанные результаты потребления ЦП, которые могут указывать на то, что Лувр использует больше ресурсов ЦП. Однако это сравнение не совсем справедливо, поскольку частота обновления Лувра почти вдвое выше, чем у других (60 кадров в секунду против 30 кадров в секунду в среднем). Когда мы делим потребление ЦП на количество кадров в секунду (FPS), как показано на графике справа, становится очевидным, что Лувр фактически использует меньше ресурсов ЦП относительно FPS по сравнению с другими наборщиками.
Как и в случае с потреблением процессора, мы можем наблюдать, что Louvre использует меньше ресурсов графического процессора по сравнению с FPS, чем другие наборщики.