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-6.0/wayland-and-qt.html