SlideShare a Scribd company logo
1 of 59
Download to read offline
/591
브라우저는 VSync 를

어떻게 활용하고 있을까
홍영기

NAVER LABS
/592
컨텐츠
0. 소개

1. 모니터는 어떻게 화면을 업데이트 할까

2. 프레임 타이밍이란

3. 브라우저에서는 어떻게 프레임 타이밍을 구성할까

4. 브라우저에서의 프레임 타이밍 활용

5. Summary

6. Q&A
/59
0. 소개
/594
0. VSync & 브라우저
•서로 다른 계층의 이 두 요소는 어떤 관계를 맺고 있을까

•VSync(Vertical synchronization) - 하드웨어 시그널

•브라우저 - 유저레벨 애플리케이션

•VSync 는 브라우저의 이 API 들과 어떤 연관이 있을까

•requestIdleCallback

•requestAnimationFrame
/595
1. 배경지식
/596
1.1 모니터는 어떻게 화면을 업데이트 할까
•모니터의 화면 업데이트는 그래픽 드라
이버를 통해 이루어짐

•그래픽 드라이버는 그래픽 버퍼에 저장
된 픽셀 데이터(이미지)로 모니터 화면
업데이트
Graphic Driver
Buffer
/597
1.1 모니터는 어떻게 화면을 업데이트 할까
•어플리케이션은 새 픽셀 데이터 생성
을 위한 데이터 또는 커맨드를 그래픽
드라이버에 전달 (ex, OpenGL API)

•그래픽 드라이버는 새 픽셀 데이터를
그래픽 드라이버 메모리 영역에 생성 Graphic Driver
Applications
Buffer
데이터/커맨드
/598
1.1 모니터는 어떻게 화면을 업데이트 할까
•그래픽 드라이버는 애플리케이
션이 만든 데이터를 Back
buffer 메모리 영역에 구성

•모니터 화면은 Front buffer 에
저장된 데이터를 이용하여 업데
이트 (Double buffering)
8
Graphic Driver
Applications
Back
Buffer
데이터/커맨드
Front
Buffer
/599
1.1 모니터는 어떻게 화면을 업데이트 할까
•애플리케이션이 화면을 완성하면 화
면 업데이트를 그래픽 드라이버에 

요청

•Back buffer와 Front buffer를 스
왑(swap)합니다
Graphic Driver
Applications
Back
Buffer
Swap
Front
Buffer
/5910
1.1 모니터는 어떻게 화면을 업데이트 할까
•모니터는 화면은 일정한 시간 간격으로 변경됨 (ex, 60Hz)

•모니터 화면을 업데이트 해야할 때 드라이버는 그래픽 메모리의
front buffer에 저장된 프레임으로 화면 업데이트

•다음 모니터 화면 업데이트 때 새로운 이미지를 보여주고 싶을때는
리프레시 전에 화면 업데이트(Swap) 요청을 해야함
/5911
1.2 Quiz
https://en.wikipedia.org/wiki/Screen_tearing
•Tearing 은 왜 일어날까요?
/5912
1.3 Tearing 방지 - VSync
•Tearing 이 일어나지 않으려면 Monitor
refresh 동안 Front buffer 의 데이터가
변경되지 않아야 함

•VSync (Vertical Synchronization) 동
안 Monitor refresh 가 진행됨 vsync pulse vsync
Monitor
refresh
vertical
blank
interval
/5913
1.3 Tearing 방지 - VSync
•60hz 모니터의 경우 1/60 초 마다
VSync pulse 가 발생

•Tearing 을 방지하기위해 VSync pulse
동안 버퍼 스왑을 금지

•VSync 정보를 통해 Monitor refresh 가
언제 일어나는지 알 수 있음
vsync pulse vsync
Monitor
refresh
vertical
blank
interval
/5914
1.3 Tearing 방지 - VSync
•VSync 를 사용하지 않는 것의 의미

•Monitor refresh 를 신경쓰지 않고 원할 때 버퍼 스왑을 하겠
다는 뜻

•Tearing 이 발생할 수 있음
/5915
1.4 추가 읽기
•“The Illusion of Motion” by Paul Bakaus

• https://paulbakaus.com/tutorials/performance/the-illusion-of-motion/
/5916
2. 프레임 타이밍이란?
/5917
2.1 프레임 타이밍
•매끄러운 애니메이션을 보여주려면 제 때에 보여주고 싶은 이미지
를 만들어야 함

•프레임(Frame)

•화면 업데이트에 사용될 픽셀 데이터

•프레임 타이밍 컨트롤(Frame timing)

•프레임 생성을 위한 시간 제어
/5918
2.1 프레임 타이밍
•매끄러운 애니메이션을 보이려면 프레임 드랍이 없으면서

애니메이션 구성의 기준이 되는 각 프레임의 시간차이가 작고

일정해야 함

•Consistent fps

•High fps
/5919
2.2 Demo - Smooth vs. Janky
Smooth
Janky
/5920
2.2 Demo - FPS 비교
http://www.testufo.com/
/5921
2.3 프레임 타이밍
Monitor
refresh
시간
Frame 2Frame 1 Frame 3 Frame…
Frame 2Frame 1 Frame 3 Frame 4
VS.
Frame 5 Frame 6
/5922
2.4 Smooth 애니메이션 프레임 타이밍
Monitor
refresh
시간
Frame 2Frame 1 Frame 3 Frame…Idle
•일정한 프레임 간 시간 간격 으로 매끄러운 애니메이션 구현이 가능

•자원 절약 & Idle 타임 활용
/5923
2.3 Janky 애니메이션의 프레임 타이밍
Monitor
refresh
시간
Frame 2Frame 1 Frame 3 Frame 4 Frame 5 Frame 6
X X
•사용자에게 보여지지 않을 프레임 생성으로 인한 자원 낭비

•고르지 않는 프레임 간 시간 간격(Δt)으로 부자연스러운 애니메이션으로 보여질 수 있음
Δt2Δt1
/5924
2.5 정확한 프레임 타이밍을 잡으려면?
/5925
3. 브라우저에서는 어떻게

프레임 타이밍을 구성할까?
/5926
3.1 타이머 사용
•16.6ms 주기의 타이머

•Monitor refresh interval 과 align 이 안되어 프레임 드랍 발생
타이머
시간
Frame 2Frame 1 Frame 3 Frame…
refresh
16.6ms
frame drop
/5927
3.2 Refresh 주기에 맞추려면
•VSync 정보가 필요

• 프레임 시작 시간 (frame time)

• 프레임간 시간 차이(frame interval)
Monitor
refresh
시간
Frame 2Frame 1 Frame 3 Frame…
frame
time
frame
interval
/5928
3.3 VSync 정보 알아내기 - Windows
•DWM 이 사용되는 경우

•Desktop Window Manager (vista 부터 가능)

•DwmGetCompositionTimingInfo()

•DWM 이 사용되지 않는 경우

•MonitorFromWindow()

•GetMonitorInfo()
/5929
3.3 VSync 정보 알아내기 - Android
•Choreographer (since API Level16)

•시스템의 VSync 를 기반으로 animation, input, drawing
task 들의 타이밍을 컨트롤

•프레임 타임의 시작 시점을 알기 위해서는
Choreographer.FrameCallback 을 구현하여 등록

•Choreographer.postFrameCallback()

•등록한 callback 은 새 프레임 타임 시작 시점에 호출
/5930
3.3 VSync 정보 알아내기 - OSX
•CVDisplayLink - Core Video display link

•CVDisplayLinkSetOutputCallback()

•콜백함수는 DisplayLink 가 새 프레임을 원할때 호출됨

•콜백함수에 전달되는 파라미터를 통해 다음 프레임 타임과 인
터벌을 알 수 있음 

•별도의 high-priority 쓰레드에서 동작
/5931
3.3 VSync 정보 알아내기 - iOS
•CADisplayLink

•OS 에서 제공하는 타이머로 디스플레이의 refresh rate 와 동기
화가 필요할 때 사용

•등록한 selector 는 프레임 타임 시작시 호출

•+ displayLinkWithTarget:selector:

•duration/frameInterval 속성을 통해 다음 프레임 타임 시간을
예측할 수 있음
/5932
3.3 vsync 정보 알아내기 - Linux
•X window 그래픽 서버를 이용

•GLX extension- GLX_OML_sync_control,

GLX_SGI_video_sync

•Frame time, frame interval

•XRandR - Resize and Rotate protocol

•신뢰성있는 refresh rate 제공

•정확한 frame interval 을 구할 수 있음
/5933
3.4 VSync 활용하여 프레임 타이밍 구성
•Callback 방식

•안드로이드/iOS/OSX

•시스템에서 프레임 시작시간에 callback 을 호출

•Callback 호출 시 프레임 타이밍을 잡을 수 있음
/5934
3.4 VSync 활용하여 프레임 타이밍 구성
•Querying 방식

•Windows/Linux

•시스템을 통해 VSync 정보를 가져옴

•타이머를 활용하여 예상되는 시간에 프레임 구성 시작
/5935
3.4 VSync 활용하여 프레임 타이밍 구성
•Callback 방식

•Callback 이 호출될 때 interval 을 예측하여 정확한 프레임 타
임을 계산
Callback 실행
시간
Frame 2Frame 1 Frame 3 Frame…
refresh
/5936
3.4 VSync 활용하여 프레임 타이밍 구성
타이머
시간
Frame 2Frame 1 Frame 3 Frame…
refresh
•Querying 방식

•프레임 마다 VSync 정보를 갱신하여 정확한 주기의

타이머 설정
Fetch vsync info &
adjust timer
/5937
3.4 VSync 활용하여 프레임 타이밍 구성
•VSync query 오버헤드

•OSX (CVDisplayLink)는 high-priority thread 가 생성됨

•GPU driver 마다 오버헤드가 다를 수 있음 - 측정이 필요

•일정 주기마다 갱신하는것도 한가지 방법 (ex, 5초에 한번씩)
/5938
3.5 Summary
•브라우저는 VSync 정보를 활용하여 Display refresh 와 매칭되
는 프레임 타이밍을 구성하고 있음

•여러분이 사용하는 툴킷들은 어떻게 프레임 타이밍을 잡고 있을까
요?

•사용중인 다양한 GUI 툴킷/프레임워크들이 어떤 타이밍에 frame
callback 을 호출시키주는 지 알아보는 것도 재밌을것 같습니다.
/5939
4. 브라우저에서는 프레임

타이밍을 어떻게 활용하고

있을까
/5940
4.1 브라우저 내부 태스크 스케줄링
•브라우저는 한번의 프레임 생성을 위해 많은 일을 수행

•정확한 프레임 타임과 deadline 을 통해 효율적으로 처리하도록
노력
Frame Frame
JS
LayoutPaint
CompositeRaster
Input
Raster
deadline
Input
/5941
4.2 웹 애플리케이션 스케줄링
•브라우저는 웹 앱 플랫폼이 되어가고 있음

•안정적인 웹 앱 실행 환경을 제공해야 함
/5942
4.2 웹 애플리케이션 스케줄링
•제 때 호출되는 draw callback 이 있어야 매끄러운 애니메이션
구현이 가능 (타이머로는 힘듬)

•제 때 호출 되는 idle callback 이 제공되면 중요한 일들을 방해하
지 않으면서 idle task 수행이 가능
/5943
4.2 웹 애플리케이션 스케줄링
•브라우저에서의 draw callback

•window.requestAnimationFrame

•브라우저에서의 idle callback

•window.requestIdleCallback (new API)
/5944
4.2 window.requestAnimationFrame
•Animation task 는 언제 실행되고, 화면에 나타나게 될까?
function animate(time) {

document.getElementById("animated").style.left =

(time - animationStartTime) % 2000 / 4 + "px";

window.requestAnimationFrame(animate);

}

(function() {

animationStartTime = window.performance.now();

requestId = window.requestAnimationFrame(animate);

})();
/5945
4.2 window.requestAnimationFrame
“

The expectation is that the user agent will run tasks

from the animation task source at a regular interval
matching the display's refresh rate.

Running tasks at a lower rate can result in animations

not appearing smooth.

Running tasks at a higher rate can cause extra
computation to occur without a user-visible benefit.

“
http://w3c.github.io/animation-timing/
/5946
4.2 window.requestAnimationFrame
•웹앱 개발자는 스펙에 언급된 것처럼 rAF 는 Display refresh 주
기에 맞춰서 호출이 될것이라고 예상

•브라우저 벤더가 이 스펙을 맞추지 못한다면 개발자가 기대하는
결과와는 다른 결과가 보여질 것
/5947
4.2 window.requestAnimationFrame
Monitor
refresh
시간
Frame 2Frame 1 Frame 3 Frame…
frame
time
frame
interval
Frame Frame
JS(rAF) Layout Paint Composite
/5948
4.2 window.requestAnimationFrame
•브라우저가 정확한 프레임 타이밍이 컨트롤 되지 않으면 스펙에
정의된 것처럼 Display refresh rate 에 매칭되게 animation
task 를 실행 할 수 없음
/5949
4.3 window.requestIdleCallback
function myNonEssentialwork(deadline) {

while (deadline.timeRemaining > 0 && tasks.length > 0)

doWorkIfNeeded();

if (tasks.length >0 )

window.requestIdleCallback(myNonEssentialWork);

}

window.requestIdleCallback(myNonEssentialWork);
https://developers.google.com/web/updates/2015/08/27/using-requestidlecallback
•Idle task 는 언제 실행이 될까?
/5950
4.3 window.requestIdleCallback
“

Cooperatively schedule background tasks such
that they do not introduce delays to other high
priority tasks that share the same event loop,
such as input processing, animations and
frame compositing

“
http://w3c.github.io/requestidlecallback
/5951
4.3 window.requestIdleCallback
•Idle task 가 high-priority task 를 방해하지 않으려면 현재 프레
임 타임 내에서 정확한 Idle time 이 계산되어야 함

•즉, 다음 프레임이 언제 시작될 지가 정확히 파악이 되어야 Idle
task에게 timeRemaining 정보를 줄 수 있음

•그렇지 않으면 Idle task 로 인해 다른 중요한 task 가 지연 될 수
있음
/5952
4.3 window.requestIdleCallback
Monitor
refresh
시간
Frame 2Frame 1 Frame 3 Frame…
frame
time
frame
interval
Frame Frame
Jobs in main thread
Jobs in other thread
Idle time in main thread
/5953
4.3 window.requestIdleCallback
•Idle time 은 정확한 프레임 타이밍 컨트롤을 통해서만 예측이 가
능
/5954
4.4 프레임 타이밍의 중요성
•브라우저는 정확한 프레임 타이밍이 기반이 되어야 웹 앱이 사용
하는 requestAnimationFrame, requestIdleCallback 의 동작
성을 보장할 수 있음
/5955
5. Summary
/5956
5. Summary
•VSync 란 무엇인가

•애플리케이션에서 VSync 정보는 어떻게 얻을 수 있나

•VSync 정보를 활용하여 Display refresh rate 와 align 되는 프
레임 타이밍을 구성

•브라우저의 requestAnimationFrame, requestIdleCallback
API 는 VSync 를 기반으로 동작
/5957
Q&A
/5958
Resources
• https://en.wikipedia.org/wiki/Chromium_(web_browser)

• https://developers.google.com/web/updates/2015/08/27/using-
requestidlecallback

•http://w3c.github.io/requestidlecallback

•https://developers.google.com/web/updates/2015/08/27/using-
requestidlecallback

•http://w3c.github.io/animation-timing/

•https://pixabay.com/

• http://www.testufo.com/

•https://en.wikipedia.org/wiki/Screen_tearing

•https://paulbakaus.com/tutorials/performance/the-illusion-of-motion/
/5959
Thank You

More Related Content

What's hot

[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들강 민우
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기 [122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기 NAVER D2
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기NAVER Engineering
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호NAVER Engineering
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기MinGeun Park
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현MinGeun Park
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)MinGeun Park
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능Yongha Kim
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
 
유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기Jungsoo Park
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationamscanne
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integrationdrluckyspin
 

What's hot (20)

[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기 [122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
Testing Angular
Testing AngularTesting Angular
Testing Angular
 
날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 

Viewers also liked

[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기NAVER D2
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhereNAVER D2
 
[134] immersive sound vr
[134] immersive sound vr[134] immersive sound vr
[134] immersive sound vrNAVER D2
 
[142] how riot works
[142] how riot works[142] how riot works
[142] how riot worksNAVER D2
 
[153] apache reef
[153] apache reef[153] apache reef
[153] apache reefNAVER D2
 
[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생NAVER D2
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나NAVER D2
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기NAVER D2
 
[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법NAVER D2
 
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝NAVER D2
 
[113] lessons from realm
[113] lessons from realm[113] lessons from realm
[113] lessons from realmNAVER D2
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearchNAVER D2
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍NAVER D2
 
[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩NAVER D2
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
[114] DRC hubo technical review
[114] DRC hubo technical review[114] DRC hubo technical review
[114] DRC hubo technical reviewNAVER D2
 
[132] rust
[132] rust[132] rust
[132] rustNAVER D2
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
[122] line on apple watch
[122] line on apple watch[122] line on apple watch
[122] line on apple watchNAVER D2
 

Viewers also liked (20)

[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhere
 
[134] immersive sound vr
[134] immersive sound vr[134] immersive sound vr
[134] immersive sound vr
 
[142] how riot works
[142] how riot works[142] how riot works
[142] how riot works
 
[153] apache reef
[153] apache reef[153] apache reef
[153] apache reef
 
[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생[124] mit cheetah 로봇의 탄생
[124] mit cheetah 로봇의 탄생
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기
 
[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법[144]mobile앱에서 효율적인 storage 접근 방법
[144]mobile앱에서 효율적인 storage 접근 방법
 
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
[151] 영상 인식을 통한 오프라인 고객분석 솔루션과 딥러닝
 
[113] lessons from realm
[113] lessons from realm[113] lessons from realm
[113] lessons from realm
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍
 
[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩[161] 데이터사이언스팀 빌딩
[161] 데이터사이언스팀 빌딩
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
[114] DRC hubo technical review
[114] DRC hubo technical review[114] DRC hubo technical review
[114] DRC hubo technical review
 
[132] rust
[132] rust[132] rust
[132] rust
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
[122] line on apple watch
[122] line on apple watch[122] line on apple watch
[122] line on apple watch
 

Similar to [133] 브라우저는 vsync를 어떻게 활용하고 있을까

고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화Byung Ho Lee
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화NAVER D2
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구Jae Sung Park
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)Cloud-Barista Community
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화NHN FORWARD
 
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Wonseok Jang
 
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화nemoux
 
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...Cloud-Barista Community
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것NAVER Engineering
 
섀도우프로텍트 소개
섀도우프로텍트 소개섀도우프로텍트 소개
섀도우프로텍트 소개성호 윤
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개
(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개
(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개nemoux
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...
Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...
Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...Cloud-Barista Community
 
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]정호 최
 
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력nemoux
 

Similar to [133] 브라우저는 vsync를 어떻게 활용하고 있을까 (20)

고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 통합 관리 (CB-Tumblebug)
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
 
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
 
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
 
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
 
섀도우프로텍트 소개
섀도우프로텍트 소개섀도우프로텍트 소개
섀도우프로텍트 소개
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개
(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개
(NEMO-UX) WAYLAND 기반 컴포지팅 최적화 기술 소개
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 글로벌 서비스를 위한 인프라 구축방법(남용현 클라우드 솔루션 아키텍트)
 
Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...
Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...
Cloud-Barista 제1차 오픈세미나 : CB-Dragonfly-멀티 클라우드 통합 모니터링 프레임워크(1st Open Seminar...
 
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

[133] 브라우저는 vsync를 어떻게 활용하고 있을까

  • 1. /591 브라우저는 VSync 를 어떻게 활용하고 있을까 홍영기 NAVER LABS
  • 2. /592 컨텐츠 0. 소개 1. 모니터는 어떻게 화면을 업데이트 할까 2. 프레임 타이밍이란 3. 브라우저에서는 어떻게 프레임 타이밍을 구성할까 4. 브라우저에서의 프레임 타이밍 활용 5. Summary 6. Q&A
  • 4. /594 0. VSync & 브라우저 •서로 다른 계층의 이 두 요소는 어떤 관계를 맺고 있을까 •VSync(Vertical synchronization) - 하드웨어 시그널 •브라우저 - 유저레벨 애플리케이션 •VSync 는 브라우저의 이 API 들과 어떤 연관이 있을까 •requestIdleCallback •requestAnimationFrame
  • 6. /596 1.1 모니터는 어떻게 화면을 업데이트 할까 •모니터의 화면 업데이트는 그래픽 드라 이버를 통해 이루어짐 •그래픽 드라이버는 그래픽 버퍼에 저장 된 픽셀 데이터(이미지)로 모니터 화면 업데이트 Graphic Driver Buffer
  • 7. /597 1.1 모니터는 어떻게 화면을 업데이트 할까 •어플리케이션은 새 픽셀 데이터 생성 을 위한 데이터 또는 커맨드를 그래픽 드라이버에 전달 (ex, OpenGL API) •그래픽 드라이버는 새 픽셀 데이터를 그래픽 드라이버 메모리 영역에 생성 Graphic Driver Applications Buffer 데이터/커맨드
  • 8. /598 1.1 모니터는 어떻게 화면을 업데이트 할까 •그래픽 드라이버는 애플리케이 션이 만든 데이터를 Back buffer 메모리 영역에 구성 •모니터 화면은 Front buffer 에 저장된 데이터를 이용하여 업데 이트 (Double buffering) 8 Graphic Driver Applications Back Buffer 데이터/커맨드 Front Buffer
  • 9. /599 1.1 모니터는 어떻게 화면을 업데이트 할까 •애플리케이션이 화면을 완성하면 화 면 업데이트를 그래픽 드라이버에 
 요청 •Back buffer와 Front buffer를 스 왑(swap)합니다 Graphic Driver Applications Back Buffer Swap Front Buffer
  • 10. /5910 1.1 모니터는 어떻게 화면을 업데이트 할까 •모니터는 화면은 일정한 시간 간격으로 변경됨 (ex, 60Hz) •모니터 화면을 업데이트 해야할 때 드라이버는 그래픽 메모리의 front buffer에 저장된 프레임으로 화면 업데이트 •다음 모니터 화면 업데이트 때 새로운 이미지를 보여주고 싶을때는 리프레시 전에 화면 업데이트(Swap) 요청을 해야함
  • 12. /5912 1.3 Tearing 방지 - VSync •Tearing 이 일어나지 않으려면 Monitor refresh 동안 Front buffer 의 데이터가 변경되지 않아야 함 •VSync (Vertical Synchronization) 동 안 Monitor refresh 가 진행됨 vsync pulse vsync Monitor refresh vertical blank interval
  • 13. /5913 1.3 Tearing 방지 - VSync •60hz 모니터의 경우 1/60 초 마다 VSync pulse 가 발생 •Tearing 을 방지하기위해 VSync pulse 동안 버퍼 스왑을 금지 •VSync 정보를 통해 Monitor refresh 가 언제 일어나는지 알 수 있음 vsync pulse vsync Monitor refresh vertical blank interval
  • 14. /5914 1.3 Tearing 방지 - VSync •VSync 를 사용하지 않는 것의 의미 •Monitor refresh 를 신경쓰지 않고 원할 때 버퍼 스왑을 하겠 다는 뜻 •Tearing 이 발생할 수 있음
  • 15. /5915 1.4 추가 읽기 •“The Illusion of Motion” by Paul Bakaus • https://paulbakaus.com/tutorials/performance/the-illusion-of-motion/
  • 17. /5917 2.1 프레임 타이밍 •매끄러운 애니메이션을 보여주려면 제 때에 보여주고 싶은 이미지 를 만들어야 함 •프레임(Frame) •화면 업데이트에 사용될 픽셀 데이터 •프레임 타이밍 컨트롤(Frame timing) •프레임 생성을 위한 시간 제어
  • 18. /5918 2.1 프레임 타이밍 •매끄러운 애니메이션을 보이려면 프레임 드랍이 없으면서
 애니메이션 구성의 기준이 되는 각 프레임의 시간차이가 작고
 일정해야 함 •Consistent fps •High fps
  • 19. /5919 2.2 Demo - Smooth vs. Janky Smooth Janky
  • 20. /5920 2.2 Demo - FPS 비교 http://www.testufo.com/
  • 21. /5921 2.3 프레임 타이밍 Monitor refresh 시간 Frame 2Frame 1 Frame 3 Frame… Frame 2Frame 1 Frame 3 Frame 4 VS. Frame 5 Frame 6
  • 22. /5922 2.4 Smooth 애니메이션 프레임 타이밍 Monitor refresh 시간 Frame 2Frame 1 Frame 3 Frame…Idle •일정한 프레임 간 시간 간격 으로 매끄러운 애니메이션 구현이 가능 •자원 절약 & Idle 타임 활용
  • 23. /5923 2.3 Janky 애니메이션의 프레임 타이밍 Monitor refresh 시간 Frame 2Frame 1 Frame 3 Frame 4 Frame 5 Frame 6 X X •사용자에게 보여지지 않을 프레임 생성으로 인한 자원 낭비 •고르지 않는 프레임 간 시간 간격(Δt)으로 부자연스러운 애니메이션으로 보여질 수 있음 Δt2Δt1
  • 24. /5924 2.5 정확한 프레임 타이밍을 잡으려면?
  • 26. /5926 3.1 타이머 사용 •16.6ms 주기의 타이머 •Monitor refresh interval 과 align 이 안되어 프레임 드랍 발생 타이머 시간 Frame 2Frame 1 Frame 3 Frame… refresh 16.6ms frame drop
  • 27. /5927 3.2 Refresh 주기에 맞추려면 •VSync 정보가 필요 • 프레임 시작 시간 (frame time) • 프레임간 시간 차이(frame interval) Monitor refresh 시간 Frame 2Frame 1 Frame 3 Frame… frame time frame interval
  • 28. /5928 3.3 VSync 정보 알아내기 - Windows •DWM 이 사용되는 경우 •Desktop Window Manager (vista 부터 가능) •DwmGetCompositionTimingInfo() •DWM 이 사용되지 않는 경우 •MonitorFromWindow() •GetMonitorInfo()
  • 29. /5929 3.3 VSync 정보 알아내기 - Android •Choreographer (since API Level16) •시스템의 VSync 를 기반으로 animation, input, drawing task 들의 타이밍을 컨트롤 •프레임 타임의 시작 시점을 알기 위해서는 Choreographer.FrameCallback 을 구현하여 등록 •Choreographer.postFrameCallback() •등록한 callback 은 새 프레임 타임 시작 시점에 호출
  • 30. /5930 3.3 VSync 정보 알아내기 - OSX •CVDisplayLink - Core Video display link •CVDisplayLinkSetOutputCallback() •콜백함수는 DisplayLink 가 새 프레임을 원할때 호출됨 •콜백함수에 전달되는 파라미터를 통해 다음 프레임 타임과 인 터벌을 알 수 있음 •별도의 high-priority 쓰레드에서 동작
  • 31. /5931 3.3 VSync 정보 알아내기 - iOS •CADisplayLink •OS 에서 제공하는 타이머로 디스플레이의 refresh rate 와 동기 화가 필요할 때 사용 •등록한 selector 는 프레임 타임 시작시 호출 •+ displayLinkWithTarget:selector: •duration/frameInterval 속성을 통해 다음 프레임 타임 시간을 예측할 수 있음
  • 32. /5932 3.3 vsync 정보 알아내기 - Linux •X window 그래픽 서버를 이용 •GLX extension- GLX_OML_sync_control,
 GLX_SGI_video_sync •Frame time, frame interval •XRandR - Resize and Rotate protocol •신뢰성있는 refresh rate 제공 •정확한 frame interval 을 구할 수 있음
  • 33. /5933 3.4 VSync 활용하여 프레임 타이밍 구성 •Callback 방식 •안드로이드/iOS/OSX •시스템에서 프레임 시작시간에 callback 을 호출 •Callback 호출 시 프레임 타이밍을 잡을 수 있음
  • 34. /5934 3.4 VSync 활용하여 프레임 타이밍 구성 •Querying 방식 •Windows/Linux •시스템을 통해 VSync 정보를 가져옴 •타이머를 활용하여 예상되는 시간에 프레임 구성 시작
  • 35. /5935 3.4 VSync 활용하여 프레임 타이밍 구성 •Callback 방식 •Callback 이 호출될 때 interval 을 예측하여 정확한 프레임 타 임을 계산 Callback 실행 시간 Frame 2Frame 1 Frame 3 Frame… refresh
  • 36. /5936 3.4 VSync 활용하여 프레임 타이밍 구성 타이머 시간 Frame 2Frame 1 Frame 3 Frame… refresh •Querying 방식 •프레임 마다 VSync 정보를 갱신하여 정확한 주기의
 타이머 설정 Fetch vsync info & adjust timer
  • 37. /5937 3.4 VSync 활용하여 프레임 타이밍 구성 •VSync query 오버헤드 •OSX (CVDisplayLink)는 high-priority thread 가 생성됨 •GPU driver 마다 오버헤드가 다를 수 있음 - 측정이 필요 •일정 주기마다 갱신하는것도 한가지 방법 (ex, 5초에 한번씩)
  • 38. /5938 3.5 Summary •브라우저는 VSync 정보를 활용하여 Display refresh 와 매칭되 는 프레임 타이밍을 구성하고 있음 •여러분이 사용하는 툴킷들은 어떻게 프레임 타이밍을 잡고 있을까 요? •사용중인 다양한 GUI 툴킷/프레임워크들이 어떤 타이밍에 frame callback 을 호출시키주는 지 알아보는 것도 재밌을것 같습니다.
  • 39. /5939 4. 브라우저에서는 프레임
 타이밍을 어떻게 활용하고
 있을까
  • 40. /5940 4.1 브라우저 내부 태스크 스케줄링 •브라우저는 한번의 프레임 생성을 위해 많은 일을 수행 •정확한 프레임 타임과 deadline 을 통해 효율적으로 처리하도록 노력 Frame Frame JS LayoutPaint CompositeRaster Input Raster deadline Input
  • 41. /5941 4.2 웹 애플리케이션 스케줄링 •브라우저는 웹 앱 플랫폼이 되어가고 있음 •안정적인 웹 앱 실행 환경을 제공해야 함
  • 42. /5942 4.2 웹 애플리케이션 스케줄링 •제 때 호출되는 draw callback 이 있어야 매끄러운 애니메이션 구현이 가능 (타이머로는 힘듬) •제 때 호출 되는 idle callback 이 제공되면 중요한 일들을 방해하 지 않으면서 idle task 수행이 가능
  • 43. /5943 4.2 웹 애플리케이션 스케줄링 •브라우저에서의 draw callback •window.requestAnimationFrame •브라우저에서의 idle callback •window.requestIdleCallback (new API)
  • 44. /5944 4.2 window.requestAnimationFrame •Animation task 는 언제 실행되고, 화면에 나타나게 될까? function animate(time) { document.getElementById("animated").style.left = (time - animationStartTime) % 2000 / 4 + "px"; window.requestAnimationFrame(animate); } (function() { animationStartTime = window.performance.now(); requestId = window.requestAnimationFrame(animate); })();
  • 45. /5945 4.2 window.requestAnimationFrame “ The expectation is that the user agent will run tasks from the animation task source at a regular interval matching the display's refresh rate. Running tasks at a lower rate can result in animations not appearing smooth. Running tasks at a higher rate can cause extra computation to occur without a user-visible benefit. “ http://w3c.github.io/animation-timing/
  • 46. /5946 4.2 window.requestAnimationFrame •웹앱 개발자는 스펙에 언급된 것처럼 rAF 는 Display refresh 주 기에 맞춰서 호출이 될것이라고 예상 •브라우저 벤더가 이 스펙을 맞추지 못한다면 개발자가 기대하는 결과와는 다른 결과가 보여질 것
  • 47. /5947 4.2 window.requestAnimationFrame Monitor refresh 시간 Frame 2Frame 1 Frame 3 Frame… frame time frame interval Frame Frame JS(rAF) Layout Paint Composite
  • 48. /5948 4.2 window.requestAnimationFrame •브라우저가 정확한 프레임 타이밍이 컨트롤 되지 않으면 스펙에 정의된 것처럼 Display refresh rate 에 매칭되게 animation task 를 실행 할 수 없음
  • 49. /5949 4.3 window.requestIdleCallback function myNonEssentialwork(deadline) { while (deadline.timeRemaining > 0 && tasks.length > 0) doWorkIfNeeded(); if (tasks.length >0 ) window.requestIdleCallback(myNonEssentialWork); } window.requestIdleCallback(myNonEssentialWork); https://developers.google.com/web/updates/2015/08/27/using-requestidlecallback •Idle task 는 언제 실행이 될까?
  • 50. /5950 4.3 window.requestIdleCallback “ Cooperatively schedule background tasks such that they do not introduce delays to other high priority tasks that share the same event loop, such as input processing, animations and frame compositing “ http://w3c.github.io/requestidlecallback
  • 51. /5951 4.3 window.requestIdleCallback •Idle task 가 high-priority task 를 방해하지 않으려면 현재 프레 임 타임 내에서 정확한 Idle time 이 계산되어야 함 •즉, 다음 프레임이 언제 시작될 지가 정확히 파악이 되어야 Idle task에게 timeRemaining 정보를 줄 수 있음 •그렇지 않으면 Idle task 로 인해 다른 중요한 task 가 지연 될 수 있음
  • 52. /5952 4.3 window.requestIdleCallback Monitor refresh 시간 Frame 2Frame 1 Frame 3 Frame… frame time frame interval Frame Frame Jobs in main thread Jobs in other thread Idle time in main thread
  • 53. /5953 4.3 window.requestIdleCallback •Idle time 은 정확한 프레임 타이밍 컨트롤을 통해서만 예측이 가 능
  • 54. /5954 4.4 프레임 타이밍의 중요성 •브라우저는 정확한 프레임 타이밍이 기반이 되어야 웹 앱이 사용 하는 requestAnimationFrame, requestIdleCallback 의 동작 성을 보장할 수 있음
  • 56. /5956 5. Summary •VSync 란 무엇인가 •애플리케이션에서 VSync 정보는 어떻게 얻을 수 있나 •VSync 정보를 활용하여 Display refresh rate 와 align 되는 프 레임 타이밍을 구성 •브라우저의 requestAnimationFrame, requestIdleCallback API 는 VSync 를 기반으로 동작