Wayland и Qt
Wayland — это протокол сервера отображения, который помогает создавать многопроцессные системы. Несколько клиентских приложений («клиенты») могут отображать своё содержимое на буферы вне экрана. Эти буферы затем передаются серверу отображения, часто называемому композитором, с использованием протокола Wayland. В конечном итоге, композитор комбинирует и позиционирует содержимое на физическом экране.
Почему использовать многопроцессность
В системе с одним процессом все части пользовательского интерфейса работают в одном процессе. В многопроцессной системе все клиенты работают в своих собственных выделенных процессах. С Qt в любой момент разработки вы можете переключаться между однопроцессной и многопроцессной системами.
Архитектура многопроцессного клиента
Архитектура однопроцессного клиента
Использование многопроцессной системы имеет следующие преимущества:
| Стабильность | |
|---|---|
| Легче восстановиться при зависании или сбоях клиентов | Если у вас сложный пользовательский интерфейс, многопроцессность полезна, поскольку если один его компонент аварийно завершит работу, это не повлияет на всю систему. Аналогично, отображение не замерзнет, даже если один клиент зависнет. Примечание: Если ваш клиент обязан отображать критически важную для безопасности информацию, рассмотрите использование Обзора Qt Safe Renderer. |
| Защита от возможных утечек памяти | В многопроцессной системе, если у одного клиента произошла утечка памяти и он потребляет много памяти, эта память восстанавливается при завершении работы этого клиента. В отличие от однопроцессных систем, утечка памяти сохраняется до перезагрузки всей системы. |
| Безопасность |
|---|
| В однопроцессной системе все клиенты могут получить доступ к памяти друг друга. Например, нет изоляции для передачи конфиденциальных данных; каждое строка кода должна быть одинаково надёжной. Эта изоляция реализована по умолчанию в многопроцессных системах. |
| Производительность |
|---|
| Если у вас процессор с несколькими ядрами, многопроцессная система может помочь равномерно распределить нагрузку по разным ядрам, обеспечивая более эффективное использование процессора. |
| Взаимодействие |
|---|
| Вы можете взаимодействовать с клиентами, не использующими Qt, в многопроцессной системе, если ваши клиенты понимают Wayland или X11. Например, если вы используете gstreamer для видео или хотите использовать приложение навигации, созданное с помощью другого набора инструментов UI, вы можете запускать эти клиенты вместе с другими клиентами на базе 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. Однако совместное использование текстур графического процессора между процессами требует более сложных решений. Такие решения в настоящее время разрабатываются для композитора Qt Wayland. |
Возможности Qt Wayland
Для клиентов Клиенты Qt могут работать с любым композитором Wayland, включая Weston, эталонный композитор, разработанный в рамках проекта Wayland.
Любое приложение Qt может работать как клиент Wayland (как часть многопроцессной системы) или автономный клиент (однопроцессный). Это определяется при запуске, где вы можете выбрать различные бэкэнды. Во время разработки вы можете сначала разработать клиент на рабочем столе, а затем протестировать его на целевом оборудовании позже. Вам не нужно постоянно запускать свои клиенты на фактическом целевом оборудовании.
Разработка однопроцессного клиента
Если вы разрабатываете на машине Linux, вы также можете запустить композитор в окне на вашей машине разработки. Это позволяет запускать клиентов в среде, которая близка к целевому устройству. Без перекомпиляции клиента вы также можете запустить его с -platform wayland для запуска внутри композитора. Если вы используете -platform xcb (для X11), вы можете запустить клиента на рабочем столе. Другими словами, вы можете начать разработку своих клиентов, прежде чем композитор будет готов к использованию.
Для серверов Сервер, или композитор, подключается к экрану и отображает содержимое каждого клиента на экране. Композитор обрабатывает ввод и отправляет события ввода соответствующему клиенту. В свою очередь, каждый клиент подключается к композитору и отправляет содержимое своих окон. Именно композитор решает:
- Как и где отобразить содержимое
- Какое содержимое отобразить
- Что делать с различными графическими буферами клиентов
Это означает, что именно композитор определяет, что такое многопроцессная система. Например, клиенты могут быть частью 3D сцены с окнами на стенах, в VR-системе, отображённой на сфере и так далее.
Композитор Qt Wayland — это API для создания собственного композитора. Он даёт вам полную свободу создания пользовательского интерфейса композитора и управления окнами различных клиентов. Вы можете объединить Qt Quick и QML с композитором Qt Wayland, чтобы создать впечатляющие и воображаемые пользовательские интерфейсы. Более подробную информацию см. в Композитор Qt Wayland.
Связанные материалы
- QtWS17 — Композитор Qt Wayland: создание многопроцессного пользовательского интерфейса
- Менеджер приложений Qt
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/wayland-and-qt.html