Wayland и Qt
Wayland — это протокол сервера отображения, который помогает создавать многопроцессные системы. Несколько клиентских приложений («клиенты») могут отображать своё содержимое в буферы вне экрана. Эти буферы затем передаются серверу отображения, часто называемому композитором, используя протокол Wayland. Наконец, композитор комбинирует и позиционирует содержимое на физическом экране.
Почему использовать многопроцессную систему?
В однопроцессной системе все части пользовательского интерфейса работают в одном процессе. В многопроцессной системе все клиенты работают в своих собственных, выделенных процессах. С Qt вы можете в любой момент разработки переключаться между однопроцессной и многопроцессной системами.
Архитектура многопроцессного клиента
Архитектура однопроцессного клиента
Использование многопроцессной системы имеет следующие преимущества:
| Стабильность | |
|---|---|
| Легче восстановиться при зависании или сбое клиентов | Если у вас сложный пользовательский интерфейс, многопроцессная система полезна, потому что сбой одной части интерфейса не повлияет на всю систему. Аналогично, отображение не замерзнет даже при зависании одного клиента. Примечание: Если ваш клиент по закону обязан отображать критически важные для безопасности данные, рассмотрите использование Обзора Qt Safe Renderer. |
| Защита от возможных утечек памяти | В многопроцессной системе, если у одного клиента возникла утечка памяти и он потребляет много памяти, эта память возвращается, когда клиент завершает работу. В отличие от однопроцессной системы, утечка памяти сохраняется до перезапуска всей системы. |
| Безопасность |
|---|
| В однопроцессной системе все клиенты могут получать доступ к памяти друг друга. Например, нет изоляции для передачи конфиденциальных данных; каждое утверждение кода должно быть надёжным. Эта изоляция реализована по умолчанию в многопроцессных системах. |
| Производительность |
|---|
| Если у вас процессор с несколькими ядрами, многопроцессная система может помочь равномерно распределить нагрузку по различным ядрам, обеспечивая более эффективное использование процессора. |
| Совместимость |
|---|
| Вы можете взаимодействовать с не-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-5.15/wayland-and-qt.html