Spec-Zone.ru › Qt 5.13

Wayland и Qt

Wayland — это протокол сервера отображения, который помогает создавать многопроцессные системы. Несколько приложений-клиентов («клиенты») могут отображать свой собственный контент в буферах вне экрана. Затем эти буферы передаются серверу отображения, часто называемому композитором, с помощью протокола Wayland. Наконец, композитор комбинирует и позиционирует контент на физическом дисплее.

Почему использовать многопроцессность

В однопроцессной системе все части пользовательского интерфейса работают в одном процессе. В многопроцессной системе все клиенты работают в своих собственных, выделенных процессах. С Qt в любой момент разработки вы можете выбирать между однопроцессной и многопроцессной системами.

Архитектура многопроцессного клиента

Архитектура однопроцессного клиента

Использование многопроцессности имеет следующие преимущества:

  • Стабильность
  • Безопасность
  • Производительность
  • Совместимость
Стабильность
Легче восстанавливаться, когда клиенты зависают или выходят из строя Если у вас сложный пользовательский интерфейс, многопроцессность полезна, потому что если одна часть интерфейса выйдет из строя, это не повлияет на всю систему. Аналогично, отображение не замерзнет, даже если один клиент зависнет.

Примечание: Если ваш клиент обязан по закону отображать критически важную для безопасности информацию, рассмотрите использование Qt Safe Renderer Overview.

Защита от возможных утечек памяти В многопроцессной системе, если у одного клиента произошла утечка памяти и он потребляет много памяти, эта память освобождается при завершении работы этого клиента. В отличие от однопроцессной системы, утечка памяти сохраняется до перезагрузки всей системы.
Безопасность
В однопроцессной системе все клиенты могут обращаться к памяти друг друга. Например, нет изоляции для передачи конфиденциальных данных; каждый оператор кода должен быть одинаково надежным. Эта изоляция реализована по умолчанию в многопроцессных системах.
Производительность
Если у вас процессор с несколькими ядрами, многопроцессная система может помочь равномерно распределить нагрузку по различным ядрам, обеспечивая более эффективное использование процессора.
Совместимость
Вы можете взаимодействовать с клиентами, не использующими Qt, в многопроцессной системе, если ваши клиенты понимают Wayland или X11. Например, если вы используете gstreamer для видео или хотите использовать приложение навигации, созданное с помощью другого набора инструментов UI, вы можете запустить эти клиенты вместе со своими другими клиентами на базе Qt.

Почему использовать Wayland вместо X11 или пользовательских решений

X11, протокол рабочего стола из 80-х годов, больше не соответствует принципам работы современной графической аппаратуры. Он громоздкий, сложный и не обладает хорошей настраиваемостью. Фактически, сложно запустить клиент с плавной работой на X11 и достичь 60 кадров в секунду без разрывов. Wayland, напротив, проще в реализации, обладает лучшей производительностью и содержит все необходимые компоненты для эффективной работы на современной графической аппаратуре. Для встроенных многопроцессных систем на Linux Wayland является стандартом.

Однако, если вы работаете со старым оборудованием или устаревшими приложениями, Wayland может быть не лучшим выбором. Протокол Wayland разработан с учетом безопасности и изоляции, и строго/осторожно относится к информации и функциональности, доступной клиентам. Хотя это приводит к более чистому и безопасному интерфейсу, некоторые функции, ожидаемые устаревшими приложениями, могут больше не быть доступны в Wayland.

В частности, есть три распространенных случая, когда Wayland может быть не лучшим вариантом:

  1. Аппаратное обеспечение или платформа устаревшие и поддерживают только X11; в этом случае у вас нет выбора.
  2. Вам нужно поддерживать устаревшие приложения, зависящие от функций, отсутствующих в протоколе Wayland из-за соображений безопасности и простоты.
  3. Вам нужно поддерживать устаревшие приложения, использующие набор инструментов пользовательского интерфейса, который не работает с 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.13/wayland-and-qt.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API