Обзор оконной подсистемы Screen

Описание общих принципов работы оконной подсистемы

Screen является композитной оконной подсистемой ЗОСРВ «Нейтрино», реализующей композицию графических окружений, а также аппаратную акселерацию приложений.

Традиционное и композитное оконные окружения
Композиция
Потоки ввода
Взаимодействие с приложениями
Обзор Screen API
Приложения и демонстрации

Традиционное и композитное оконные окружения

В отличие от традиционных оконных окружений, управляющих единственным буфером, ассоциированным с каждым дисплеем, в композитном окружении приложениям предоставляется возможность off-screen рендеринга (от англ. rendering) с последующей визуализацией на экране средствами оконной подсистемы.

Off-screen рендеринг на системном уровне позволяет графической и оконной подсистеме производить манипуляции с окнами не вовлекая в это прикладное приложение. Содержимое окон может быть перемещено, масштабировано, повернуто на заданный угол, а также отражено вертикально или горизонтально без необходимости дополнительной перерисовки со стороны приложения.

Оконная подсистема Screen ответственна за:

Screen объединяет множество графических и UI (user interface) технологий в единое окружение. Посредством композиции это окружение объединяется оконной подсистемой в единое изображение для последующего отображения на экране. При этом осуществляется композиция (совмещение) слоев, окон и курсоров.

screen_compmanager.png
Рисунок 1. Композиция окон и слоев в оконной подсистеме Screen

Композиция

Как уже было сказано, одной из основных задач, решаемой оконной подсистемой Screen является комбинирование всех видимых оконных буферов в единое изображение при отображении. Эта функция возложена на модуль, именуемый композитором (Composition Manager) и достигается за счет привлечения аппаратной акселерации.

Screen имеет модульную архитектуру, включающую аппаратно-специфичные компоненты и модули организации OpenGL for Embedded Systems (OpenGL ES) акселерации.

Screen использует GPU-акселерированные операции для оптимального построения финальной сцены.

Потоки ввода

Кроме менеджмента окон композитор (Composition Manager) тесно связан с маршрутизацией потоков ввода от соответствующих устройств. При этом происходит перехват потоков у классических путей, используемых в оконной подсистеме Photon (отмечены красным).

screen_input_flow.png
Рисунок 2. Маршрутизация потоков ввода в оконной подсистеме


Caution: Стоит отметить, что каждое событие ввода при маршрутизации направляется либо окнам Screen, либо в оконную подсистему Photon. Сосуществование обеих оконных подсистем возможно, но не рекомендуется из соображений производительности. Степень потерь при этом сильно зависит от особенностей устройств акселерации и общей производительности системы (пропускная способность памяти, CPU, вид и степень параллелизма, ...).

Взаимодействие с приложениями

Приложения взаимодействуют с композитором (Composition Manager) используя Screen API. Основные векторы взаимодействия:

Приложения могут осуществлять рендеринг, используя:

Обзор Screen API

Screen API характеризует способы взаимодействия приложения с оконной подсистемой Screen

Все компоненты Screen API достаточно тесно связаны между собой (в настоящий момент не все виды объектов доступны через API).

cscreen_api_components.png
Рисунок 3. Компоненты Screen API

Контексты
Контекст представляет совокупность параметров графических операций в рамках подсистемы Screen.

Все остальные объекты API создаются в рамках конкретного контекста и доступ к ним осуществляется с использованием ассоциированного контекста. Через контекст также можно получить доступ к объектам, на которых будет производиться рендеринг (например, окна, группы, дисплеи, pixmap-ы), чтобы устанавливать или изменять их свойства и атрибуты.

Устройства, дисплеи и окна зависят от контекста, который ассоциирован также с событиями, группами и pixmap-ами.
Устройство
Определяет устройство ввода. Это устройство (например, клавиатура, мышь, джойстик, геймпад или мультитач) можно сфокусировать на конкретных дисплеях.
Дисплей
Дисплей относится к физическому устройству отображения. Используя API можно получить доступ к свойствам дисплея, его режимам и вертикальной синхронизации.
Окна
Окно представляет поверхность для рисования. Окно может отображать различные типы контента, отсюда следует доступность нескольких типов окон: окна приложений, дочерние окна и встроенные окна.
Pixmap
Pixmap схож с битовой картой, за исключением того, что она может иметь глубину цвета в несколько бит на пиксель. Битовые карты, напротив, имеют глубину цвета в 1 бит на пиксель.

Вы можете рисовать непосредственно на поверхность pixmap-а, размещенную в off-screen области, а затем копировать его содержимое в буфер.
Событие
Событие включает такие действия, как создание окна, изменение его параметров, события клавиатуры и других устройств ввода. События связаны с контекстом. Screen API предоставляет одну очередь событий для каждого контекста.
Группа
Группа используется для организации и управления несколькими окнами приложения. Принадлежащие группе окна имеют идентичные параметры.
Буфер
Буфер - это область памяти (обычно видео-памяти), где можно быстро перемещать данные не занимая CPU. Хотя буфер создается в рамках контекста, его нельзя использовать, если он не привязан к окну или pixmap-у.

Несколько буферов могут быть ассоциированы с окном, тогда как только один буфер может быть связан с pixmap-ом.

Приложения и демонстрации

Screen предоставляет набор простых приложений для демонстрации основных функций Screen API. Запуск этих приложений позволяет, в том числе, определить настроен ли Screen должным образом.

screen-blank
Приложение позволяет отобразить простейшее композитное окно.
screen-egl-configs
Утилита позволяет запрашивать и отображать перечень доступных конфигураций framebuffer-а для указанного дисплея. Если номер дисплея не указан, используется дисплей, заданный по умолчанию.
screen-gles2-gears
Это приложение отображает в окне стандартную демонстрацию «gears», использующую OpenGL ES 2.x API.
screen-gl1-gears
Это приложение отображает в окне стандартную демонстрацию «gears», использующую OpenGL 1.x API и EGL.
screen-gles2-glmark2
Это приложение позволяет оценить производительность 3D акселерации при использовании OpenGL ES 2.x API.
display-screenshot
Утилита записывает файл в формате BMP, содержащий скриншот изображения указанного дисплея.
gf-vsync
Приложение демонстрирует стандартный тест сигнала vsync монитора. По загрузке CPU можно судить о том, работают ли аппаратные vsync-прерывания контроллера дисплея.




Предыдущий раздел: Оконная подсистема Screen