Wayland и Qt
Wayland — это протокол сервера отображения, который помогает создавать многопроцессные системы. Несколько клиентских приложений («клиенты») могут отображать своё содержимое в буферы вне экрана. Затем эти буферы передаются серверу отображения, часто называемому композитором, с помощью протокола Wayland. Наконец, композитор компонует и позиционирует содержимое на физическом дисплее.
Почему использовать многопроцессность
В однопроцессной системе все части пользовательского интерфейса работают в одном процессе. В многопроцессной системе все клиенты работают в своих собственных, выделенных процессах. С Qt в любой момент разработки вы можете переключаться между однопроцессной и многопроцессной системами.
Архитектура многопроцессного клиента
Архитектура однопроцессного клиента
Использование многопроцессности имеет следующие преимущества:
| Устойчивость | |
|---|---|
| Легче восстановиться, когда клиенты зависают или терпят крах | Если у вас сложный пользовательский интерфейс, то многопроцессность полезна, поскольку если одна часть пользовательского интерфейса зависает или терпит крах, это не повлияет на всю систему. Аналогично, дисплей не замерзнет, даже если один клиент зависнет. Примечание: Если ваш клиент обязан отображать критически важные для безопасности данные, рассмотрите использование Qt Safe Renderer Overview. |
| Защита от возможных утечек памяти | В многопроцессной системе, если у одного клиента есть утечка памяти и он потребляет много памяти, эта память восстанавливается при завершении работы этого клиента. В отличие от однопроцессной системы, утечка памяти сохраняется до перезагрузки всей системы. |
| Безопасность |
|---|
| В однопроцессной системе все клиенты могут получать доступ к памяти друг друга. Например, нет изоляции для передачи конфиденциальных данных; каждое операционное действие должно быть одинаково надёжным. Эта изоляция есть по умолчанию в многопроцессных системах. |
| Производительность |
|---|
| Если у вас процессор с несколькими ядрами, многопроцессная система может помочь равномерно распределить нагрузку между различными ядрами, более эффективно используя процессор. |
| Совместимость |
|---|
| Вы можете взаимодействовать с не-Qt клиентами в многопроцессной системе, если ваши клиенты понимают Wayland или X11. Например, если вы используете gstreamer для видео или хотите использовать приложение навигации, созданное с помощью другого инструментария пользовательского интерфейса, вы можете запускать эти клиенты вместе с другими клиентами на базе Qt. |
Почему использовать Wayland вместо X11 или пользовательских решений
X11, протокол рабочего стола 80-х годов, больше не соответствует принципам работы графического оборудования сегодня. Он большой, сложный и не обладает гибкостью настройки. На самом деле, трудно запустить клиент с X11 плавно и достичь 60 кадров в секунду без разрывов. Wayland, напротив, проще в реализации, имеет лучшую производительность и содержит все необходимые компоненты для эффективной работы на современном графическом оборудовании. Для встраиваемых многопроцессных систем на Linux Wayland является стандартом.
Однако, если вы работаете со старым оборудованием или устаревшими приложениями, Wayland может не быть лучшим вариантом. Протокол Wayland разработан с учётом безопасности и изоляции, и он строго/консервативно относится к тому, какая информация и функциональность доступна клиентам. Хотя это приводит к более чистому и безопасному интерфейсу, некоторые функции, ожидаемые устаревшими приложениями, могут быть недоступны в Wayland.
В частности, есть три распространённых случая, когда Wayland может не быть лучшим вариантом:
- Оборудование или платформа устарела и поддерживает только X11; в этом случае у вас нет выбора.
- Вам необходимо поддерживать устаревшие приложения, зависящие от функций, отсутствующих в протоколе Wayland из соображений безопасности и простоты.
- Вам необходимо поддерживать устаревшие приложения, использующие инструмент разработки пользовательского интерфейса, который не работает с Wayland. В некоторых случаях вы можете обойти это, запустив эти приложения на XWayland вместо этого.
Когда X11 был очень популярен, разработчики создавали собственные решения для обхода проблем X11. Более ранние версии Qt имели Qt Windowing System (QWS), который теперь устарел. Сегодня большинство из этих случаев покрываются Wayland, и пользовательские решения становятся всё менее распространёнными.
Возможные компромиссы при использовании многопроцессности
Использование многопроцессных систем влечёт за собой следующие компромиссы:
- Увеличение потребления видеопамяти
- Увеличение потребления основной памяти
- Повторное хранение графических ресурсов
| Увеличение потребления видеопамяти |
|---|
| Это может быть ограничением для встраиваемых устройств. В многопроцессной системе каждый клиент должен иметь свой собственный графический буфер, который он отправляет композитору. В результате вы используете больше видеопамяти по сравнению с однопроцессным случаем: где всё рисуется сразу и нет необходимости хранить разные части в промежуточных буферах. |
| Увеличение потребления основной памяти |
|---|
| Помимо некоторой дополнительной нагрузки на уровне операционной системы, запуск нескольких клиентов также может потребовать больше основной памяти, поскольку некоторые части необходимо дублировать для каждого клиента. Например, если вы запускаете QML, каждый клиент требует отдельного движка QML. Следовательно, если вы запускаете единственный клиент, использующий Qt Quick Controls, он загружается один раз. Если затем вы разделите этого клиента на несколько клиентов, вы загружаете Qt Quick Controls несколько раз, что приводит к более высокой стоимости запуска для инициализации ваших клиентов. |
| Повторное хранение графических ресурсов |
|---|
| В однопроцессной системе, если вы используете одни и те же текстуры, фоны или значки во многих местах, эти изображения хранятся только один раз. В отличие от этого, если вы используете эти изображения в многопроцессной системе, то их нужно хранить несколько раз. В этом случае одним из решений является совместное использование графических ресурсов между клиентами. Qt уже позволяет совместное использование ресурсов изображений в основной памяти между процессами без участия Wayland. В то же время совместное использование текстур GPU между процессами требует более сложных решений. Такие решения в настоящее время разрабатываются для Qt Wayland Compositor. |
Возможности Qt Wayland
Для клиентов Клиенты Qt могут работать с любым композитором Wayland, включая Weston, эталонный композитор, разработанный в рамках проекта Wayland.
Любое приложение Qt может работать как клиент Wayland (в многопроцессной системе) или как автономный клиент (однопроцессный). Это определяется при запуске, где вы можете выбрать различные бэкэнды. В процессе разработки вы можете сначала разработать клиента на рабочем столе, а затем протестировать его на целевом оборудовании позже. Вам не нужно запускать свои клиенты на реальном целевом оборудовании постоянно.
Разработка однопроцессного клиента
Если вы разрабатываете на машине Linux, вы также можете запустить композитор в окне на своей машине разработки. Это позволяет вам запускать клиентов в среде, которая близка к целевому устройству. Без перекомпиляции клиента вы также можете запустить его с -platform wayland для запуска внутри композитора. Если вы используете -platform xcb (для X11), вы можете запустить клиент на рабочем столе. Другими словами, вы можете начать разработку своих клиентов до того, как композитор будет готов к использованию.
Для серверов Сервер или композитор подключается к дисплею и отображает содержимое каждого клиента на экране. Композитор обрабатывает ввод и отправляет события ввода соответствующему клиенту. В свою очередь, каждый клиент подключается к композитору и отправляет содержимое своих окон. Композитору предоставляется право решения:
- Как и где отобразить содержимое
- Какое содержимое отобразить
- Что делать с различными графическими буферами клиентов
Это означает, что композитору предоставляется право решения о том, что представляет собой многопроцессная система. Например, клиенты могут быть частью 3D-сцены с окнами на стенах, на VR-системе, отображённых на сфере и так далее.
Qt Wayland Compositor — это API для создания собственного композитора. Он предоставляет вам полную свободу создания пользовательского интерфейса композитора и управления окнами различных клиентов. Вы можете комбинировать Qt Quick и QML с Qt Wayland Compositor, чтобы создавать впечатляющие и оригинальные пользовательские интерфейсы. Для получения дополнительной информации см. Qt Wayland Compositor.
Связанные материалы
- QtWS17 — Qt Wayland Compositor: создание многопроцессного пользовательского интерфейса
- Qt Application Manager
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/wayland-and-qt.html