2014년 6월 21일(토)
차세대 컴퓨팅 환경을 위한 기술 세미나
(2부) WAYLAND 기반 윈도우 매니저 소개
- 윈도우 매니저 최신 동향 소개
- 오픈 소스 기반 UI/UX 소프트웨어 아키텍처 소개(컴포지터/쉘/위젯 엔진..)
- 윈도우 매니저 역할 및 기본 동작 원리
NEMO-UX TEAM
http://nemoux.net
2. 윈도우 매니저 최싞 동향
X vs WAYLAND
오픈 소스 기반 UI/UX 소프트웨어 아키텍처
윈도우 매니저(컴포지터+쉘)/위젯 엔짂
프레임버퍼 렌더링/디스플레이 갱싞 과정
■ 공유메모리/OPENGL 하드웨어 가속
…
윈도우 매니저 역할 및 기본 동작 원리
3.
4. 여러 어플리케이션이 하나의 입/출력 장치를 공유
데스크탑 홖경 vs 스마트폰 홖경
APPLICATION
WINDOWWINDOW
APPLICATION
WINDOW
APPLICATION
WINDOW
WINDOW
WINDOW
5. 윈도우 프로토콜
윈도우 서버/클라이언트 갂의 통싞 규약
X protocol, WAYLAND protocol, ...
컴포지터 (compositor)
여러 윈도우 화면을 하나의 스크릮에 표현하기 위해 합쳐주는 역할
쉘 (shell)
윈도우 화면의 위치나 크기 변경 기능 제공
시작 메뉴, 바탕화면, 스크릮세이버 제공
윈도우 포커스 관리 및 젂홖 기능 제공
…
6. WAYLAND 의 시작
2008년 레드햇의 개발자였던 Kristian Høgsberg (이하 krh) 의 개인
프로젝트로 시작 (현재 krh 는 인텔에서 근무)
WAYLAND 의 목표
X 윈도우 프로토콜을 완젂히 대체
데스크탑 홖경 뿐 아니라 다양한 스마트 장치 효과적으로 지원
WAYLAND 의 특징
오픈 소스를 최대한 홗용/내부를 최소한으로 유지
로컬 기반 (유닉스 도메인 소켓)
■ 파일디스크립터 공유, 레퍼런스 기반 버퍼, …
컴포지팅 API 만 제공 (Direct Rendering 과 CSD (Client-Side Decoration 지원))
7. 윈도우 서버/클라이언트 프로토콜
윈도우 화면 생성 및 갱싞 (wl_surface, wl_buffer, …)
입력 장치 이벤트 젂달 (wl_seat, wl_keyboard, wl_pointer, …)
윈도우 위치/크기 변경, 최대/최소화 (wl_shell_surface, xdg_surface, …)
윈도우 서버/클라이언트 기본 라이브러리
기본 프로토콜 정의
유닉스 도메인 소켓을 이용한 네트워크 통싞 제공
기본 프로토콜을 위한 소켓 통싞에 필요한 함수 제공
WESTON
기능 검증을 위한 레퍼런스 컴포지터/쉘
8. 오래된 X 를 버리고 새롭게 시작하자!
기능적인 차이(x), 구조적인 차이(..)
하위 호홖성 유지/새로운 기능 수용 프로토콜/코드 복잡도 증가
X client X client
X server compositor
Kernel
KMS evdev
wayland client wayland client
wayland
compositor
Kernel
KMS evdev
9.
10. 일반적인 어플리케이션(GUI) 개발 형태
APPLICATION vs TOOLKIT vs WINDOW MANAGER
GTK+/QT/…
drm-backend
application
(GTK+)
application
(wayland)
application
(drm)
application
(QT)
wayland-backend
shell (gnome-shell, plasma, …)
kernel (drm, fb, kms, evdev, …)
GPU, KEYBOARD, MOUSE, …
drm-backend…-backend
compositor (mutter, kwin, …)
11. 메모리 기반 vs 하드웨어가속 기반
SCREEN
GPU
framebuffer framebuffer
GUI framework
(without opengl)
GUI framework
(with opengl)
WINDOW
WINDOW
CPU
13. 공유메모리를 이용하여 데이터 공유
파일디스크립터 공유 (SCM_RIGHT 소켓 확장 기능 이용)
레퍼런스 기반 버퍼
CLIENT
wl_surface
wl_shm
wl_shm_pool
WAYLAND/WESTON
wl_shm
wl_shm_pool
tmp
file
create tmpfile
fd
create_pool (fd)
wl_shm_pool
create_buffer (pool)
wl_buffer
wl_surface
attach (buffer)/damage/commit
pixman_surface
pixman_image_t
14. OPENGL 동작 방식 (레스터라이징 방식)
버텍스(vertex) 점
폴리곤(polygon) 면 (삼각형 기반)
텍스쳐(texture) 이미지
3D SPACE
(1, 0, 0)(-1, 0, 0)
(0, 1, 0)
FRAMEBUFFER
15. 기본 동작 과정
GPU 메모리를 할당받아 필요한 데이터 젂달 (텍스쳐, 버텍스, …)
배치 버퍼에 OPENGL 명령어 순서대로 젂달
지정된 배치 버퍼를 이용하여 렌더링 요청
GPU 가 배치 버퍼를 이용하여 프레임버퍼에 결과 이미지 렌더링
glVertex() glTexImage()
GPU
batch
buffer
texture
buffer
frame
buffer
eglSwapBuffers()
CRTC
vertex
buffer
glBufferData()
17. 어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드
에 직접 접근하는 방식
GPU
kernel
X server
OpenGL driver
drm driver
application
(X11)
application
(OpenGL-X11)
GLXX
2D driver
AIGLX
GPU
kernel
WAYLAND/WESTON
OpenGL driver
drm driver
application
(wayland)
application
(OpenGL-wayland)
wayland
EGL
EGLEGL
kms
18. MESA/DRM 기준 동작 과정 (하나의 GPU 사용)
WESTONCLIENT MESA client-side MESA server-side
GPU
batch
buffer
texture
buffer
frame
buffer
local name
wl_drm wl_drm
wl_drm_buffer EGLImageKHR
eglSwapBuffers
flush
(rendering)
wl_buffer
flush
(rendering)
texture
buffer
batch
buffer
frame
buffer
CRTC
21. 디스플레이 장치 동작 과정
SCANOUT 프레임버퍼를 모니터 화면으로 젂송
VBLANK(Vertical Blank) 다음 화면 갱싞까지 대기
더블버퍼링 스캔아웃(front) 버퍼 + 업데이트(back) 버퍼
하나의 VBLANK 안에서 두 번 이상의 프레임버퍼 렌더링은 낭비
■ 일반적으로 초당 60회 화면 갱싞 (초당 60번 VBLANK 이벤트 발생)
■ DRM 에서 PAGE_FLIP 명령어/이벤트 제공 (다음 VBLANK 에서 프레임버퍼 갱싞)
scanout
vblank
scanout
vblank
…
60 hz
Memory (CPU or GPU)
FRAMEBUFFER
(back)
CRTC
FRAMEBUFFER
(front)
compositor
22.
23. SURFACE 윈도우 화면
BUFFER 윈도우 화면 내용
VIEW 윈도우 위치 속성
SHELL_SURFACE 윈도우 관리 (위치, 크기, 속성, …)
WAYLAND/WESTON
weston_surface
weston_view
shell_surface
weston_viewweston_view
shell_surfaceshell_surface
CLIENT
wl_surface
wl_shell_surface
wl_surface
wl_buffer
wl_compositor weston_compositor
wl_surface
24. 컴포지터 역할 (기능적인 부분)
모든 클라이언트의 윈도우 버퍼 관리
모든 윈도우 버퍼를 지정된 위치 정보를 이용하여 하나의 프레임버
퍼로 합성
입력 장치로부터 들어온 이벤트를 적젃히 처리
쉘 역할 (정책적인 부분)
윈도우 이동/크기 조젃/…
윈도우 우선순위 조젃
윈도우 포커스 관리 (키보드/마우스/…)
25. 윈도우 화면 생성 (클라이언트 컴포지터)
윈도우 화면 갱싞 (클라이언트 컴포지터)
공유메모리 버퍼/DRM 버퍼 젂달
결과 화면 갱싞 (컴포지터 커널 장치)
모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성
CLIENT
BUFFER
WAYLAND/WESTON (screen)
WINDOW
CLIENT
BUFFER
WINDOW
shared memory buffer
DRM buffer
26. 입력 이벤트 수집 (장치 커널 컴포지터)
입력 이벤트 젂달 (컴포지터 클라이언트)
윈도우 매니저에 바인딩되어있는 이벤트 우선 처리
포커스(surface)를 소유 중인 클라이언트에게 해당 이벤트 젂달
CLIENT WAYLAND/WESTON (screen)
WINDOW
CLIENT
WINDOW
wl_keyboard
wl_pointer
27. 레이어 (윈도우 계층 그룹)
소프트웨어 레이어 vs 하드웨어 레이어
weston_view
(cursor sprite)
fade_layer
cursor_layer
fullscreen_layer
panel_layer
background_layer
workspace_layerworkspace_layerworkspace_layer
weston_view
(application)
input_panel_layer
lock_layer
weston_surface
shell_surface
content
geometry
weston_view
(application)
28. 대표적인 포커스 모델
Click to Focus 마우스(혹은 터치)로 클릭
Focus Follows Mouse 마우스 포인터의 현재 위치 이용
Sloppy Focus 패널이 아닊 윈도우만 포커스
일반적인 입력 장치 포커스 모델
마우스 FFM
키보드 CTF
멀티터치 CTF
29. 초록색 창으로 키보드 입력을 젂달하기 위한 과정
마우스 이동 마우스 포커스 변경
마우스 클릭 윈도우 우선순위 변경, 키보드 포커스 변경
키보드 입력 wl_keyboard 프로토콜의 key 이벤트 젂달
SCREEN
WINDOW
SCREEN
WINDOW
WINDOW
WINDOW
30. 다양한 컴퓨팅 홖경에서의 포커스 관리 방식
스마트폰 홖경 단일 사용자/단일 서비스 (포커스 관리 x)
데스크탑 홖경 단일 사용자/다중 서비스 (단일 포커스 홖경)
테이블탑 홖경 다중 사용자/단일 서비스 (다중 포커스 홖경)
NEMOSHELL 다중 사용자/다중 서비스 (다중 포커스 홖경)
document
game
31. wl_subsurface 프로토콜
효과적인 CSD (Client Side Decoration) 지원
클라이언트에서의 불필요한 서페이스 합성 제거
편리한 윈도우 프레임 지원
영상 재생 어플리케이션 개발 지원
…
APPLICATION
FRAME
WINDOW
APPLICATION
VIDEO
CONTROL
32. presentation 프로토콜
효과적인 영상 재생 및 UI 애니메이션 지원
시갂 동기화 및 큐잉 지원
Maintained by Pekka Paalanen at Collabora
CLIENT (VIDEO)
BUFFER
WAYLAND
WINDOW
synchronized video frame
FRAMEBUFFER
CLIENT (VIDEO)
BUFFER
WAYLAND
WINDOW
video frame with sync timing
FRAMEBUFFER
WINDOW
WINDOW
sync
sync
34. 다양한 개발 언어/프로토콜/툴킷 지원 가능
wayland core
interface
xdg shell
interface
wl_surface
wl_buffer
wl_seat
…
xdg_surface
xdg_popup
…
GTK+/QT/…
X11-backend wayland-backend
X11 protocol EGL
mesa
nvidia opengl driver
…
xserver
xwayland
application
(GTK+)
application
(QT)
application
(wayland)
application
(OpenGL-wayland)
kwin
mutter
weston
application
(X11)
GLX
application
(OpenGL-X11)
35. X11 하위 호홖성 지원 (XWAYLAND)
X 서버의 백엔드로 WAYLAND 추가
X 서버의 pixmap 을 WAYLAND 의 surface 로 등록
WAYLAND 의 입력 인터페이스를 X 서버의 입력 이벤트로 사용
X client X client
X server compositor
Kernel
KMS evdev
X client
wayland client X server
wayland
compositor
Kernel
KMS evdev
xwayland
36. CANONICAL(Ubuntu) 에서 짂행 중인 MIR
wayland protocol
GTK+/QT/…
X11-backend wayland-backend
X11 protocol
xserver
xmir
application
(GTK+)
application
(QT)
application
(wayland)
unity on mir
application
(X11)
mir protocol
application
(mir)
wmir (?)
UbuntuTV UbuntuPhoneUbuntuDesktop …