월간 보관물: 2014 8월

ACM ITS 2014에서 NEMOSHELL을 공개합니다.

NEMO-UX 팀이 올해 11월17일-19일에 독일에서 열리는 저명한 학회인
ACM ITS 2014 (Interactive Tabletop and Surfaces) 에서 데모를 진행합니다.

관련 분야 석학들과 회사들이 참여하는 이번 ITS 2014에
터치스크린 기반 윈도우 매니저인 NEMOSHELL을 공개하게 되었습니다.

저희가 선보일 새로운 기술들은 다음과 같습니다.

– 다중 사용자 지원 (Docker 컨테이너 기반 사용자 관리/보안)
– 다중 장치 지원 (DISPLAY, TOUCH, GPU, KEYBOARD/MOUSE)
– 애플리케이션 지원 (GTK/QT, X/Wayland, Chrome/Crosswalk/Android)
– 데스크톱 뿐만 아니라 임베디드/스마트 환경 지원 (X86/ARM)

저희 NEMOSHELL은 전통적인 툴킷 기반의 접근이 아닌,
세계 최초의 윈도우 매니저 기반의 연구 결과로 큰 기대를 받고 있습니다.

좋은 결과 있도록 열심히 준비하겠습니다.

ITS2014_website_teaser

이 글은 NEWS 카테고리에 분류되었고 태그가 있으며 님에 의해 에 작성되었습니다.

ARM talks up Wayland For Mali

http://www.phoronix.com/scan.php?page=news_item&px=MTc3MTE

얼마전에 있었던 SIGGRAPH’14 에서 Collabora 가 ARM Mali 로 WAYLAND 데모를 진행했습니다. (Collabora 가 메인으로 하는 일이 GSTREAMER 라서 그런지 영상 재생에 초점을 맞춰서 진행했습니다.) 아래 링크에 보면 간단한 설명도 있는데, X11 과 비교해서 좋은 점들 몇 가지를 설명하고 있습니다.

http://community.arm.com/groups/arm-mali-graphics/blog/2014/08/14/mali-x11-vs-wayland-at-siggraph-2014

간단히 요약하면 WAYLAND 는 X11 의 원격 지원을 버리고 로컬 지원에만 집중하기 때문에 버퍼 기반 모델을 사용할 수 있고, subsurface 나 presentation 확장 프로토콜을 이용하여 효과적인 비디오 재생을 할 수 있다는 말입니다. 그래서 프레임이 깨지는 일이 발생하지 않고, 전력이나 반응성이 좋아진다는 얘기… (subsurface 확장 프로토콜을 이용하면 클라이언트가 비디오 프레임과 UI 를 합칠 필요가 없어지고, presentation 확장 프로토콜을 이용하면 비디오 동기화를 서버 측에서 보다 효과적으로 할 수 있습니다.)

저희도 NEMOSHELL 을 ARM 으로 포팅하기 위해 준비하고 있었는데, 해당 장비에서 EGL/DRM 이 어느 정도 동작을 하는거같으니 본격적으로 진행을 해도 될꺼같다는 생각이 드네요.

[스터디-공지] WAYLAND 기반 윈도우 매니저 동작 원리 이해

예전에 공지드렸던 스터디를 이제 시작하려고 합니다.

본 스터디는 X 프로토콜을 대체하는 WAYLAND 프로토콜을 기반으로 윈도우 매니저의 동작 원리를 이해하고, 실제 코드레벨에서 분석하는 것이 목적입니다. (최종적으로는 자신이 원하는 형태의 윈도우 매니저를 개발할 수 있는 수준에 이르기를 기대합니다.) 이를 위한 첫 단계로 윈도우 매니저의 전체적인 동작 원리를 알아보는 시간을 우선 가져보려고 합니다.

본 스터디는 하나의 토픽을 선정하여 4~5 주 정도 연속으로 진행하고, 1~2 주 정도 쉬고나서 다음 토픽을 진행하는 방식으로 진행할 계획입니다. 그리고 매주 한번씩 모여 2시간 정도 진행할 계획이고, 1시간은 지난 시간에 했던 내용, 혹은 전반적인 내용에 관해서 자유롭게 얘기를 나누고, 나머지 1시간은 저희가 세미나 형식으로 다음 내용을 발표하는 형태로 진행할 계획입니다.

첫 번째 토픽은 윈도우 매니저를 기반으로 하는 SW 플랫폼의 전체적인 동작 원리를 이해하는 것이 목적입니다. 첫 토픽을 진행하면서 윈도우 매니저의 전반적인 내용에 대해 간략하게나마 이해를 하고, 이후에는 특정 부분에 대한 소스분석이나 최적화와 관련된 토픽들을 진행할 계획입니다.

첫 번째 토픽에 대한 스터디 일정은 다음과 같습니다.

0 주차 (8월 30일 토요일 오후 2-4시) : WAYLAND/WESTON 기반 윈도우 매니저 소개
– 윈도우 매니저 사용 목적, 구성 요소, 기본 동작 과정 소개 (compositor, shell, toolkit, …)
– 필수 오픈소스 소개 (pixman, cairo, pango, drm/egl, …)
– wayland/weston 구성 요소, 기본 동작 과정 소개 (입/출력 동작 과정)

1 주차 (9월 13일 토요일 오후 2-4시) : 출력 과정 이해
– 컴포지팅 동작 원리 이해
– 공유 메모리 기반 컴포지팅 과정 이해 (shm, pixman, …)
– 하드웨어 가속 기반 컴포지팅 과정 이해 (opengl, egl, drm, …)
– wayland/weston 기반 컴포지팅 과정 이해

2 주차 (9월 20일 토요일 오후 2-4시) : 입력 과정 이해
– 입력 장치 관리 이해 (udev, evdev, …)
– 포커스 모델 이해 (마우스, 키보드, 멀티 터치, …)
– wayland/weston 기반 입력 장치 동작 과정 이해
– wayland/weston 기반 가상 키보드/한글 입력 동작 과정 이해

3 주차 (9월 27일 토요일 오후 2-4시) : 렌더링 최적화 기술 분석
– scene graph 동작 과정 분석 (레이어 관리, 데미지/클리핑 관리, …)
– 더블 버퍼핑, 디스플레이 동기화, 하드웨어 플레인 동작 과정 분석
– OpenGL 확장 기능 분석 (buffer_age, unpack_subimage, swap_buffers_with_damage, …)

4 주차 (10월 4일 토요일 오후 2-4시) : WAYLAND 기반 윈도우 매니저 분석
– 서페이스 관리 분석 (윈도우 활성화, 서브서페이스, …)
– 그랩 인터페이스 분석 (윈도우 이동, 크기 변환, …)
– 데이터 인터페이스 분석 (drag & drop, selection, clipboard, …)
– 쉘 인터페이스 분석 (wayland/xdg shell, workspace, …)
– 확장 프로토콜 분석 (subsurface, presentation, …)

5 주차 (10월 11일 토요일 오후 2-4시) : UI/UX 플랫폼 분석
– wayland 기반 UI/UX 플랫폼 구조 분석
– 툴킷 엔진 지원 분석 (GTK, QT, …)
– X 프로토콜 지원 분석 (xwayland)
– 어플리케이션 지원 분석 (브라우저, 동영상 재생, …)
– wayland 기반 윈도우 매니저 소개 (weston, mutter, kwin, hawaii, …)

이렇게 6 주 동안 진행할 계획이고, 다음 주(0 주차)에는 이번 토픽을 시작하기에 앞서 필요한 기본적인 내용을 소개드릴 계획입니다. 그리고 저희가 WAYLAND/WESTON 으로 EGL 까지 실습해 볼 수 있는 환경을 VMWARE 가상 이미지로 만들어서 드릴테니 받아가시기 바랍니다. (압축해서 7기가 정도 됩니다.)

위치는 성균관대학교 자연과학캠퍼스(1호선 성균관대역)이고, 구체적인 장소는 교내에 저희가 세미나실을 예약한 후에 다시 공지하도록 하겠습니다. 그리고 이미 이메일을 통해 참여 신청을 해주신 분들 외에 참여하시고 싶으신 분들은 장소 섭외 문제 때문에 미리 저희에게 이메일로 (nemoux00@gmail.com) 신청해주시기 바랍니다.

마지막으로 스터디에 대한 문의나 향후 기술적인 논의는 저희가 미리 만들어놓은 페이스북 그룹(https://www.facebook.com/groups/uxcoding/) 을 통해 해주시면 감사하겠습니다.

[WAYLAND] 컴포지팅 최적화 기술 소개 자료

윈도우 매니저에서는 당연히 필수이고, 위젯 엔진이나 기타 그래픽 처리가 필요한 소프트웨어에서도 거의 항상 중요한 부분을 차지하는 컴포지팅 최적화 기술에 대한 자료를 공개합니다. 일단 자료는 WAYLAND 기반의 윈도우 매니저를 기준으로 작성되었지만 대부분의 동작 원리와 적용 기술은 윈도우 매니저와는 크게 상관은 없습니다. 자세한 내용은 slideshare 에 올려놓은 자료를 참고하시고 아래는 간단히 요약한 내용입니다.

우선 컴포지팅이 무언지에 대해 간단히 소개드리겠습니다.

그림1

위 그림은 위젯 엔진과 윈도우 매니저가 동작하는 방식입니다. 위젯 엔진은 여러 위젯을 합쳐서 하나의 윈도우를 만들고, 윈도우 매니저는 여러 윈도우를 합쳐서 하나의 프레임버퍼를 만듭니다. 결국, 우리가 보는 화면은 여러 단계의 컴포지팅을 거쳐서 만들어진 결과물입니다. 이처럼 컴포지팅은 우리가 눈으로 볼 수 있는 대부분의 프로그램에서 중요한 역할을 차지하고 있습니다.

위의 그림을 한눈에 봐도 알겠지만, 컴포지팅은 결국 수많은 메모리 복사를 수반하는 작업입니다. 그래서 이를 최적화하기 위한 다양한 기술들이 오래전부터 연구/개발되어왔습니다. 가장 핵심적인 기술은 SCENE GRAPH 을 이용한 효과적인 데미지/클리핑 관리입니다. 간단히 얘기하면 변경이 필요한 부분만 갱신하고 나머지는 재활용하자는 것입니다.

그림1

위의 그림은 기본적인 데미지 관리를 통해 얻을 수 있는 효과를 보여주고 있습니다. 두 개의 윈도우가 화면에 이미(!) 존재하고, 하나의 윈도우의 특정 부분이 변경되었을 경우를 가정해봅시다. 이때 데미지 관리를 하지 않았다면 다음 프레임버퍼를 만들기 위해, 새로운 프레임버퍼를 만들고 거기에 두 개의 윈도우를 모두 복사해야합니다. 하지만 데미지 관리를 잘 하고 이전 프레임버퍼에 대한 정보를 유지하고 있었다면, 이전 프레임버퍼에 변경된 부분만 복사하여 다음 프레임버퍼를 완성할 수 있습니다. 이처럼 데미지 관리를 효과적으로 하게되면 실제로 몇 십배의 성능 차이를 볼 수 있습니다. (클리핑 기법도 상황은 다르지만 이처럼 불필요한 메모리 복사를 제거하는 효과를 볼 수 있습니다.)

마지막으로 하드웨어 가속을 이용한 컴포지팅에 대한 내용입니다. 현재 대부분의 컴포지팅 기능을 제공하는 소프트웨어는 하드웨어 가속을 사용하고 있지만, OpenGL 은 기본적으로 3D 게임을 위한 것이지 2D 컴포지팅을 위한 인터페이스가 아니기 때문에 불편하고 비효율적인 부분들이 많았습니다. 하지만 최근 이를 개선할 수 있는 다양한 확장 기능들이 OpenGL 에 추가되고 있기 때문에 이러한 기능들을 잘 이해하고 적극 활용하는 것이 굉장히 중요하다고 볼 수 있습니다.

본 자료에서 소개한 컴포지팅 최적화 기술은 특히 제한된 자원을 사용하는 임베디드/스마트 환경에서 유용하기 때문에 관련 업무를 하시는 분들은 반드시 이해하고, 필요한 부분에 적용한다면 큰 효과를 볼 수 있을 것으로 기대됩니다.