2. 윈도우 매니저 소개 WAYLAND 소개 X vs WAYLAND 오픈 소스 기반 UI/UX 플랫폼 기본 UI/UX 플랫폼 구조 필수 오픈소스 프로젝트 윈도우 매니저 구조 및 기본 동작 원리 컴포지터/쉘 역할 기본 동작 과정 WAYLAND/WESTON 구조 스터디 진행 계획
3.
4. 여러 어플리케이션이 하나의 입/출력 장치를 공유 데스크탑 환경 vs 스마트폰 환경
APPLICATION
WINDOW
WINDOW
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, …)
12. PIXMAN 픽셀 기반 이미지 관리 CPU 를 이용한 렌더링에 주로 활용 (FB 백엔드) http://www.pixman.org/ CAIRO 벡터 그래픽 지원 레스터라이징 vs 벡터 http://cairographics.org/ PANGO 폰트 레이아웃 지원 http://www.pango.org/
13.
14. SURFACE 윈도우 BUFFER 윈도우 화면 내용 VIEW 윈도우 위치 속성 SHELL_SURFACE 윈도우 관리 (위치, 크기, 속성, …)
WAYLAND/WESTON
weston_surface
weston_view
shell_surface
weston_view
weston_view
shell_surface
shell_surface
CLIENT
wl_surface
wl_shell_surface
wl_surface
wl_buffer
wl_compositor
weston_compositor
wl_surface
15. 윈도우 생성 (클라이언트 컴포지터) 윈도우 화면 갱신 (클라이언트 컴포지터) 공유메모리 버퍼/DRM 버퍼 전달 결과 화면 갱신 (컴포지터 커널 장치) 모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성
CLIENT
BUFFER
WAYLAND/WESTON (screen)
WINDOW
CLIENT
BUFFER
WINDOW
shared memory buffer
DRM buffer
16. 렌더링 메모리 기반 vs 하드웨어가속 기반
SCREEN
GPU
framebuffer
framebuffer
GUI framework (without opengl)
GUI framework
(with opengl)
WINDOW
WINDOW
CPU
17. 컴포지팅 여러 화면을 하나의 화면으로 합쳐주는 것
■SCENE GRAPH 각 화면의 위치 정보 관리 다양한 그래픽 관련 분야에서 활용
■윈도우 매니저 여러 윈도우를 하나의 프레임버퍼로 합성
■위젯 엔진 여러 위젯을 하나의 윈도우 화면으로 합성
■…
window
window
framebuffer
widget
widget
widget
widget
window
widget
widget
window
copy
copy
copy
copy
18. 입력 이벤트 수집 (장치 커널 컴포지터) 입력 이벤트 전달 (컴포지터 클라이언트) 윈도우 매니저에 바인딩되어있는 이벤트 우선 처리 포커스(window)를 소유 중인 클라이언트에게 해당 이벤트 전달
CLIENT
WAYLAND/WESTON (screen)
WINDOW
CLIENT
WINDOW
wl_keyboard
wl_pointer
19. 포커스(focus) 모델 Click to Focus 마우스(혹은 터치)로 클릭 Focus Follows Mouse 마우스 포인터의 현재 위치 이용 Sloppy Focus 패널이 아닌 윈도우만 포커스 그랩(grab) 인터페이스 마우스 버튼 (or 터치) 다운 + 모션 … + 업 이벤트 전달 방식 윈도우 이동/크기 변환/…, 드래그&드롭, … 일반 사용자에게 익숙한 인터페이스 방식
SCREEN
WINDOW
WINDOW
press
motion
release
21. 키보드/마우스/멀티터치 지원 UDEV 기반 장치 검색 EVDEV/MTDEV 프로토콜 지원
CLIENT
WAYLAND/WESTON
kernel
touch
mtdev
udev
seat
touch
pointer
mouse
evdev
wl_seat
wl_touch
wl_pointer
grab
(default)
grab (default)
button motion
key
default
move
resize
…
keyboard
keyboard
wl_keyboard
evdev
grab (default)
touch motion
22. 다양한 개발 언어/프로토콜/툴킷 지원 가능
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)
23.
24. 1주차 : 출력 과정 이해 컴포지팅 동작 원리 이해 공유 메모리 기반 컴포지팅 과정 이해 (shm, pixman, …) 하드웨어 가속 기반 컴포지팅 과정 이해 (opengl/egl, drm, …) WAYLAND/WESTON 기반 컴포지팅 과정 이해 2주차 : 입력 과정 이해 입력 장치 관리 이해 (udev, evdev, …) 포커스 모델 이해 (마우스, 키보드, 멀티터치, …) WAYLAND/WESTON 기반 입력 장치 동작 과정 이해 WAYLAND/WESTON 기반 가상 키보드/한글 입력 동작 과정 이해
25. 3주차 : 렌더링 최적화 기술 분석 SCENE GRAPH 동작 과정 분석 (레이어 관리, 데미지/클리핑 관리, …) 더블 버퍼링, 디스플레이 동기화, 하드웨어 플레인 동작 과정 분석 OpenGL 확장 기능 분석
■buffer_age, unpack_subimage, swap_buffers_with_damage, … 4주차 : WAYLAND 기반 윈도우 매니저 분석 서페이스 관리 분석 (윈도우 활성화, 서브서페이스, …) 그랩 인터페이스 분석 (윈도우 이동, 크기 변환, …) 데이터 인터페이스 분석 (drag & drop, selection, clipboard, …) 쉘 인터페이스 분석 (wayland/xdg shell, workspace, …) 확장 프로토콜 분석 (subsurface, presentation, …)
26. 5주차 : UI/UX 플랫폼 분석 WAYLAND 기반 UI/UX 플랫폼 구조 분석 툴킷 엔진 지원 분석 (GTK, QT, …) X 프로토콜 지원 분석 (xwayland) 어플리케이션 지원 분석 (브라우저, 영상 재생, …) WAYLAND 기반 윈도우 매니저 소개
■weston, mutter, kwin, hawaii, ...