SlideShare a Scribd company logo
1 of 25
Download to read offline
nemoux00@gmail.com 
http://nemoux00.wordpress.com
컴포지팅 최적화 OPENGL 확장 인터페이스 WAYLAND 확장 프로토콜 소프트웨어 아키텍처 개선
메모리 복사 최소화  메모리 사용을 최소화하고, 불필요한 메모리 전송을 줄여라! 제한된 자원의 스마트기기 활용 범위 확대 고해상도 디스플레이 등장 (레티나, 4K, …) 애니메이션 효과 일반화 지연 모드 지원  SCENE GRAPH 을 잘 관리하여 효과적인 렌더링을 하자! 윈도우 매니저는 SCENE GRAPH 관리 필수 효율적인 화면 갱신 및 불필요한 렌더링 제거 필수 하드웨어 가속 지원  CPU 대신 GPU 를 적극 활용하자! 3D 가속 지원 게임/서비스 지원 필수 컴포지팅을 위한 OpenGL 확장 기능 활용 필수 효과적인 하드웨어 플레인 활용 필수
ZERO-COPY  윈도우 버퍼 공유 및 복사 최소화 가장 기본적인/필수적인 컴포지팅 최적화!!! 버퍼 중복 제거  클라이언트와 서버가 하나의 버퍼 공유 
■레퍼런스 기반 버퍼 관리 (공유 메모리/DRM 기반 버퍼) 버퍼 복사 제거  화면이 변경된 부분만 갱신 
■SCENE GRAPH 을 이용한 효과적인 데미지/클리핑 관리 
window 
(client) 
buffer 
window (client) 
buffer 
compositor 
(server) 
framebuffer 
buffer 
buffer 
buffer 
damage 
damage 
: 클라이언트 버퍼 공유 
: 수정된 (damaged) 부분만 복사 
copy 
copy 
copy
데미지/클리핑 관리 최소 더블 버퍼링 필요  이전 프레임버퍼에서 변경된 부분만 갱신 
■현재 프레임버퍼  모니터 출력 
■이전 프레임버퍼  수정된 부분 갱신 후 다음 프레임버퍼로 사용 프레임버퍼 히스토리 관리 필수 (이전 프레임버퍼에 대한 정보 유지) 
window 
(client) 
buffer 
window 
(client) 
buffer 
compositor (server) 
framebuffer 
buffer 
buffer 
copy 
copy 
window 
(client) 
buffer 
window (client) 
buffer 
damage 
compositor (server) 
copy 
framebuffer (old) 
buffer 
buffer 
damage 
framebuffer 
buffer 
buffer
지연 모드(retained-mode) vs 즉시 모드(immediate mode) 지연 모드는 클라이언트의 요청을 모아서 한번에 반영 
■모든 그래픽 정보 유지/관리 (즉시 모드는 반대) 윈도우 매니저는 일반적으로 지연 모드를 사용하는 것이 유리 
■화면 갱신 비율에 맞춰서 효율적인 렌더링 가능 (영상 vs 게임) 
■SCENE GRAPH 을 이용하여 불필요한 렌더링 제거 (데미지/클리핑) 
■수정된 부분이 다음 화면 갱신 전에 다시 변경이 된다면 무시 가능 
scanout 
vblank 
scanout 
vblank 
… 
60 hz 
window 
(client) 
buffer 
damage 
(1st) 
window 
(client) 
buffer 
damage 
(2st) 
ignore
기존 하드웨어가속 컴포지팅 기본적인 데미지/클리핑 관리 불필요 텍스처 부분 갱신 미지원 프레임버퍼 부분 렌더링 미지원 향후 하드웨어가속 컴포지팅 텍스처 부분 갱신 지원 
■OpenGL 확장 인터페이스 (SUBIMAGE extension) 데미지/클리핑 관리를 통한 부분 렌더링 지원 
■프레임버퍼 히스토리 관리 
■OpenGL 확장 인터페이스 (BUFFER_AGE/SWAP_BUFFERS_WITH_DAMAGE extension)
2D 기반 컴포지팅에 OpenGL 을 사용할 때의 문제점 더블 버퍼링을 지원하지만 이전 프레임버퍼에 대한 보장 없음 3D 게임을 지원하는 목적으로 개발되었기 때문에 부분 텍스처 갱신과 렌더링에 대한 지원 없음 … 
2D 기반 컴포지팅을 위한 OpenGL 확장 기능 (최신) BUFFER_AGE extension  프레임버퍼 히스토리 관리 지원 SUBIMAGE extension  텍스처 부분 갱신 지원 SWAP_BUFFERS_WITH_DAMAGE extension  부분 렌더링 지원 …
프레임버퍼 히스토리 관리 기능 최근에 추가된 BUFFER_AGE extension 을 이용 이전 프레임버퍼에서 변경된 부분만 갱신하여 다음 프레임버퍼로 활용 가능 
■이전 프레임버퍼에 이전 변경 사항 복사 (이전 프레임버퍼  현재 프레임버퍼로 변경된 영역) 
■이전 프레임버퍼에 이번 변경 사항 복사 (현재 프레임버퍼  다음 프레임버퍼로 변경된 영역) 
framebuffer (prev) 
buffer 
buffer 
framebuffer 
buffer 
buffer 
framebuffer (next) 
buffer 
buffer 
damage 
window (client) 
buffer 
damage 
(1st) 
window (client) 
buffer 
damage (2st) 
damage 
damage
텍스처 부분 갱신 지원 SUBIMAGE extension 이용 GL 렌더러에서 공유 메모리 버퍼를 사용할 때 변경된 부분만 갱신 
■기존에는 텍스처를 부분적으로 업데이트하는 것이 불가능 
window 
(client) 
buffer 
window 
(client) 
buffer 
compositor 
(server) 
framebuffer 
texture 
texture 
texture 
damage 
copy 
damage
부분 렌더링 지원 SWAP_BUFFERS_WITH_DAMAGE extension 이용 BUFFER_AGE extension 과 같이 사용 
■이전 프레임버퍼에서 필요한 부분만 다시 렌더링 할 수 있도록 지원 
■기존에는 전체 프레임버퍼를 한번에 렌더링하는 기능만 제공 
■해당 확장 기능으로 이전 프레임버퍼를 효과적으로 사용 가능 
window 
(client) 
buffer 
window 
(client) 
buffer 
compositor 
(server) 
framebuffer 
texture 
texture 
texture 
damage 
damage 
rendering
AMD Mantle API 공개 (& APPLE Metal API) 범용성을 중요시 하는 DirectX 와 OpenGL 대체 콘솔 게임은 범용성 보다는 성능 중시 
■특정 플랫폼에 최적화된 로우 레벨 API 사용 개별적으로 사용되던 로우 레벨 API 에 대한 표준화 시도 
■PC 뿐 아니라 다양한 콘솔도 적용 가능 DirectX 와 OpenGL 차기 버전 준비 중 MS 는 Mantle 에 대항할 수 있는 성능을 가진 DirectX 12 준비 NVIDIA, AMD, INTEL 등 다양한 회사에서 OpenGL 최적화 진행
wl_subsurface 프로토콜 효과적인 CSD (Client Side Decoration) 지원 클라이언트에서의 불필요한 서페이스 합성 제거 편리한 윈도우 프레임 지원 영상 재생 어플리케이션 개발 지원 … 
APPLICATION 
FRAME 
WINDOW 
APPLICATION 
VIDEO 
CONTROL
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
싱글 스레드 기반 윈도우 매니저/툴킷 엔진 UI 관련 이벤트 처리는 UI 스레드에서 단독으로 처리 입력 이벤트 처리, 렌더링, 애니메이션 등 처리해야 할 작업 증가 관련연구) 리눅스 선점 커널 (2.6), node.js, … 
wl_event_loop_dispatch() 
dispatch idle source 
wait epoll 
dispatch fd source 
destroy needless source 
wl_event_source_fd_dispatch() 
wl_event_source_timer_dispatch() 
wl_event_source_signal_dispatch() 
wl_display_run() 
wl_display_flush_clients() 
animation, rendering, …
두 개 이상의 병렬 GPU 지원 호스트 + 그래픽 메모리 및 주소공간 관리 (PRIME, IOMMU, …) 병렬 디스플레이 동기화 기술 필요 (NVIDIA Mosaic/QuardSync/SwapSync, …) 
RAM 
VRAM 
PAGE 
PAGE 
PAGE 
PAGE 
PAGE 
PAGE 
PAGE 
PAGE 
PAGE 
GPU0 
(GART) 
CPU (MMU) 
physical address 
virtual address 
virtual address 
PAGE 
PAGE 
GPU1 (GART)
전체 화면 모드에서 클라이언트가 렌더링한 화면과 결과 화면이 동일 
WESTON 
CLIENT 
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
마우스 커서 플레인 지원 마우스 커서가 여러 개라면?? 하드웨어 플레인 사용 윈도우 선정 같은 플레인에 존재하는 윈도우에 의해 클리핑 되지 않는 윈도우 비교적 화면 갱신이 많은 윈도우 … 현재 WESTON 동작 방식 화면 앞에서 뒤의 순서로 클리핑 되지 않는 윈도우 선정
더블 버퍼링 vs 트리플 버퍼링 프레임버퍼 렌더링/플리핑/스캔아웃 타이밍 고려 
vblank 
vblank 
vblank 
vblank 
framebuffer0 
framebuffer1 
vblank 
vblank 
vblank 
vblank 
framebuffer0 
framebuffer1 
1. rendering time < vblank 
2. rendering time > vblank (double buffering) 
3. rendering time > vblank (triple buffering) 
vblank 
vblank 
vblank 
vblank 
framebuffer0 
framebuffer1 
framebuffer2 
rendering 
rendering 
rendering 
rendering 
rendering 
rendering 
rendering 
rendering 
rendering 
rendering 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
scan out 
vsync 
vsync 
vsync 
page flip 
page flip 
page flip 
page flip 
page flip 
page flip
윈도우 매니저 기반 디스플레이 동기화 재생률 보장 (영상, …) vs 응답성 보장 (게임, …) { 입력  …  출력 } 불확정 요소 
■스케줄링, 대기 이벤트 처리, … 
■렌더링 대기/소요 시간, VSYNC 대기 시간, … 
window (client) 
compositor 
(server) 
keyboard/mouse 
GPU 
event 
… 
event 
handle event 
redraw surface 
commit surface 
display 
graph 
disp 
renderer (mesa/drm) 
framebuffer 
rendering 
pageflip 
fence 
scanout 
…
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

More Related Content

Similar to 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011
devCAT Studio, NEXON
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
devCAT Studio, NEXON
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
devCAT Studio, NEXON
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
IMQA
 

Similar to 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화 (20)

프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부
 
전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
 
Kgc2013 defense technica_converting_이상윤
Kgc2013 defense technica_converting_이상윤Kgc2013 defense technica_converting_이상윤
Kgc2013 defense technica_converting_이상윤
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
 
20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)
 
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
 
가상화 기반 재해복구 솔루션(Zerto 4.0)
가상화 기반 재해복구 솔루션(Zerto 4.0)가상화 기반 재해복구 솔루션(Zerto 4.0)
가상화 기반 재해복구 솔루션(Zerto 4.0)
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 
Devtree illu
Devtree illuDevtree illu
Devtree illu
 
VMsoft clairview 제품소개서 (2014.03)
VMsoft clairview 제품소개서 (2014.03)VMsoft clairview 제품소개서 (2014.03)
VMsoft clairview 제품소개서 (2014.03)
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
 
Talk it zerto_청담정보기술(20160706)
Talk it zerto_청담정보기술(20160706)Talk it zerto_청담정보기술(20160706)
Talk it zerto_청담정보기술(20160706)
 

윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

  • 2. 컴포지팅 최적화 OPENGL 확장 인터페이스 WAYLAND 확장 프로토콜 소프트웨어 아키텍처 개선
  • 3.
  • 4. 메모리 복사 최소화  메모리 사용을 최소화하고, 불필요한 메모리 전송을 줄여라! 제한된 자원의 스마트기기 활용 범위 확대 고해상도 디스플레이 등장 (레티나, 4K, …) 애니메이션 효과 일반화 지연 모드 지원  SCENE GRAPH 을 잘 관리하여 효과적인 렌더링을 하자! 윈도우 매니저는 SCENE GRAPH 관리 필수 효율적인 화면 갱신 및 불필요한 렌더링 제거 필수 하드웨어 가속 지원  CPU 대신 GPU 를 적극 활용하자! 3D 가속 지원 게임/서비스 지원 필수 컴포지팅을 위한 OpenGL 확장 기능 활용 필수 효과적인 하드웨어 플레인 활용 필수
  • 5. ZERO-COPY  윈도우 버퍼 공유 및 복사 최소화 가장 기본적인/필수적인 컴포지팅 최적화!!! 버퍼 중복 제거  클라이언트와 서버가 하나의 버퍼 공유 ■레퍼런스 기반 버퍼 관리 (공유 메모리/DRM 기반 버퍼) 버퍼 복사 제거  화면이 변경된 부분만 갱신 ■SCENE GRAPH 을 이용한 효과적인 데미지/클리핑 관리 window (client) buffer window (client) buffer compositor (server) framebuffer buffer buffer buffer damage damage : 클라이언트 버퍼 공유 : 수정된 (damaged) 부분만 복사 copy copy copy
  • 6. 데미지/클리핑 관리 최소 더블 버퍼링 필요  이전 프레임버퍼에서 변경된 부분만 갱신 ■현재 프레임버퍼  모니터 출력 ■이전 프레임버퍼  수정된 부분 갱신 후 다음 프레임버퍼로 사용 프레임버퍼 히스토리 관리 필수 (이전 프레임버퍼에 대한 정보 유지) window (client) buffer window (client) buffer compositor (server) framebuffer buffer buffer copy copy window (client) buffer window (client) buffer damage compositor (server) copy framebuffer (old) buffer buffer damage framebuffer buffer buffer
  • 7. 지연 모드(retained-mode) vs 즉시 모드(immediate mode) 지연 모드는 클라이언트의 요청을 모아서 한번에 반영 ■모든 그래픽 정보 유지/관리 (즉시 모드는 반대) 윈도우 매니저는 일반적으로 지연 모드를 사용하는 것이 유리 ■화면 갱신 비율에 맞춰서 효율적인 렌더링 가능 (영상 vs 게임) ■SCENE GRAPH 을 이용하여 불필요한 렌더링 제거 (데미지/클리핑) ■수정된 부분이 다음 화면 갱신 전에 다시 변경이 된다면 무시 가능 scanout vblank scanout vblank … 60 hz window (client) buffer damage (1st) window (client) buffer damage (2st) ignore
  • 8. 기존 하드웨어가속 컴포지팅 기본적인 데미지/클리핑 관리 불필요 텍스처 부분 갱신 미지원 프레임버퍼 부분 렌더링 미지원 향후 하드웨어가속 컴포지팅 텍스처 부분 갱신 지원 ■OpenGL 확장 인터페이스 (SUBIMAGE extension) 데미지/클리핑 관리를 통한 부분 렌더링 지원 ■프레임버퍼 히스토리 관리 ■OpenGL 확장 인터페이스 (BUFFER_AGE/SWAP_BUFFERS_WITH_DAMAGE extension)
  • 9.
  • 10. 2D 기반 컴포지팅에 OpenGL 을 사용할 때의 문제점 더블 버퍼링을 지원하지만 이전 프레임버퍼에 대한 보장 없음 3D 게임을 지원하는 목적으로 개발되었기 때문에 부분 텍스처 갱신과 렌더링에 대한 지원 없음 … 2D 기반 컴포지팅을 위한 OpenGL 확장 기능 (최신) BUFFER_AGE extension  프레임버퍼 히스토리 관리 지원 SUBIMAGE extension  텍스처 부분 갱신 지원 SWAP_BUFFERS_WITH_DAMAGE extension  부분 렌더링 지원 …
  • 11. 프레임버퍼 히스토리 관리 기능 최근에 추가된 BUFFER_AGE extension 을 이용 이전 프레임버퍼에서 변경된 부분만 갱신하여 다음 프레임버퍼로 활용 가능 ■이전 프레임버퍼에 이전 변경 사항 복사 (이전 프레임버퍼  현재 프레임버퍼로 변경된 영역) ■이전 프레임버퍼에 이번 변경 사항 복사 (현재 프레임버퍼  다음 프레임버퍼로 변경된 영역) framebuffer (prev) buffer buffer framebuffer buffer buffer framebuffer (next) buffer buffer damage window (client) buffer damage (1st) window (client) buffer damage (2st) damage damage
  • 12. 텍스처 부분 갱신 지원 SUBIMAGE extension 이용 GL 렌더러에서 공유 메모리 버퍼를 사용할 때 변경된 부분만 갱신 ■기존에는 텍스처를 부분적으로 업데이트하는 것이 불가능 window (client) buffer window (client) buffer compositor (server) framebuffer texture texture texture damage copy damage
  • 13. 부분 렌더링 지원 SWAP_BUFFERS_WITH_DAMAGE extension 이용 BUFFER_AGE extension 과 같이 사용 ■이전 프레임버퍼에서 필요한 부분만 다시 렌더링 할 수 있도록 지원 ■기존에는 전체 프레임버퍼를 한번에 렌더링하는 기능만 제공 ■해당 확장 기능으로 이전 프레임버퍼를 효과적으로 사용 가능 window (client) buffer window (client) buffer compositor (server) framebuffer texture texture texture damage damage rendering
  • 14. AMD Mantle API 공개 (& APPLE Metal API) 범용성을 중요시 하는 DirectX 와 OpenGL 대체 콘솔 게임은 범용성 보다는 성능 중시 ■특정 플랫폼에 최적화된 로우 레벨 API 사용 개별적으로 사용되던 로우 레벨 API 에 대한 표준화 시도 ■PC 뿐 아니라 다양한 콘솔도 적용 가능 DirectX 와 OpenGL 차기 버전 준비 중 MS 는 Mantle 에 대항할 수 있는 성능을 가진 DirectX 12 준비 NVIDIA, AMD, INTEL 등 다양한 회사에서 OpenGL 최적화 진행
  • 15.
  • 16. wl_subsurface 프로토콜 효과적인 CSD (Client Side Decoration) 지원 클라이언트에서의 불필요한 서페이스 합성 제거 편리한 윈도우 프레임 지원 영상 재생 어플리케이션 개발 지원 … APPLICATION FRAME WINDOW APPLICATION VIDEO CONTROL
  • 17. 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
  • 18.
  • 19. 싱글 스레드 기반 윈도우 매니저/툴킷 엔진 UI 관련 이벤트 처리는 UI 스레드에서 단독으로 처리 입력 이벤트 처리, 렌더링, 애니메이션 등 처리해야 할 작업 증가 관련연구) 리눅스 선점 커널 (2.6), node.js, … wl_event_loop_dispatch() dispatch idle source wait epoll dispatch fd source destroy needless source wl_event_source_fd_dispatch() wl_event_source_timer_dispatch() wl_event_source_signal_dispatch() wl_display_run() wl_display_flush_clients() animation, rendering, …
  • 20. 두 개 이상의 병렬 GPU 지원 호스트 + 그래픽 메모리 및 주소공간 관리 (PRIME, IOMMU, …) 병렬 디스플레이 동기화 기술 필요 (NVIDIA Mosaic/QuardSync/SwapSync, …) RAM VRAM PAGE PAGE PAGE PAGE PAGE PAGE PAGE PAGE PAGE GPU0 (GART) CPU (MMU) physical address virtual address virtual address PAGE PAGE GPU1 (GART)
  • 21. 전체 화면 모드에서 클라이언트가 렌더링한 화면과 결과 화면이 동일 WESTON CLIENT 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
  • 22. 마우스 커서 플레인 지원 마우스 커서가 여러 개라면?? 하드웨어 플레인 사용 윈도우 선정 같은 플레인에 존재하는 윈도우에 의해 클리핑 되지 않는 윈도우 비교적 화면 갱신이 많은 윈도우 … 현재 WESTON 동작 방식 화면 앞에서 뒤의 순서로 클리핑 되지 않는 윈도우 선정
  • 23. 더블 버퍼링 vs 트리플 버퍼링 프레임버퍼 렌더링/플리핑/스캔아웃 타이밍 고려 vblank vblank vblank vblank framebuffer0 framebuffer1 vblank vblank vblank vblank framebuffer0 framebuffer1 1. rendering time < vblank 2. rendering time > vblank (double buffering) 3. rendering time > vblank (triple buffering) vblank vblank vblank vblank framebuffer0 framebuffer1 framebuffer2 rendering rendering rendering rendering rendering rendering rendering rendering rendering rendering scan out scan out scan out scan out scan out scan out scan out scan out scan out scan out scan out scan out vsync vsync vsync page flip page flip page flip page flip page flip page flip
  • 24. 윈도우 매니저 기반 디스플레이 동기화 재생률 보장 (영상, …) vs 응답성 보장 (게임, …) { 입력  …  출력 } 불확정 요소 ■스케줄링, 대기 이벤트 처리, … ■렌더링 대기/소요 시간, VSYNC 대기 시간, … window (client) compositor (server) keyboard/mouse GPU event … event handle event redraw surface commit surface display graph disp renderer (mesa/drm) framebuffer rendering pageflip fence scanout …