SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
안드로이드 웹뷰의 모든 것
NAVER 웨일 이형욱 (TL)
발표자 소개
• 이형욱 (hyungwook.lee@navercorp.com)
• NAVER 웨일팀
• Tech Leader
• 웨일 브라우저 (데탑, 모바일) 개발
• 네이버앱 크로스워크 엔진 개발
• WebKit Committer
• Chromium Contributor
목차
Chapter 1. Android WebView overview
1. 안드로이드 웹뷰란 무엇인가?
2. 안드로이드 웹뷰의 역사
3. 안드로이드 웹뷰와 파편화
4. WebKit 브라우저 엔진의 역사
5. 안드로이드 웹뷰의 구조
6. 크롬과 크로미움의 차이점
Chapter 2. How chromium works
1. 브라우저는 어떻게 동작 하는가?
2. HTML Parser
3. CSS Parser
4. Java Script Engine
5. Render Tree
6. Layout
7. Paint
8. VSync 기반 멀티 쓰레드 렌더링
Chapter 3. How chromium powered WebView works
1. 안드로이드에서 크로미움은 어떻게 동작 하는가?
2. 웨일 브라우저의 뷰 구조
3. 크로미움 웹뷰의 구조적 차이점
4. 안드로이드 렌더링 파이프 라인 (KitKat 4.4 이하)
5. 크로미움 웹뷰 렌더링 파이프 라인 (KitKat 4.4 이하)
6. 안드로이드 렌더링 파이프 라인 (Lollipop 5.0 이상)
7. 크로미움 웹뷰 렌더링 파이프 라인 (Lollipop 5.0 이상)
Chapter 1. Android WebView overview
[Source: http://chittagongit.com//images/android-icon-transparent-background/android-icon-transparent-background-16.jpg]
Web content in a box
 Powers browsers such as AOSP Browser
 Displays almost all mobile banner ads
 Can be used to create portable HTML-based apps
 Often intermixed imperceptibly with native Views
<- Android View
<- Android WebView
1. 안드로이드 웹뷰란 무엇인가?
Android <= J: custom WebKit-based “classic” WebView
Android K: Chromium 30 / 33-based WebView
Android L: Unbundled Evergreen WebView
http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&tag=ODROID-U3&bid=214 http://www.ibtimes.co.uk/moto-g-finally-tastes-android-5-0-lollipop-via-cyanogenmod-12-unofficial-build-1475895
2. 안드로이드 웹뷰의 역사
• 안드로이드 제조사에서 경쟁적으로 WebKit을 Customization
• 안드로이드 버전별 서로 다른 WebKit을 사용하고 있음
1) Android 4.3 이전 버전은 WebKit 기반의 렌더링 엔진을 사용
2) Android 4.4 부터는 Blink 기반의 렌더링 엔진으로 교체
• 현재는 사용자 웹뷰 업데이트 유무에 따라 서로 다른 버전을 사용
HTML5 Test.com CSS3 Test.com
삼성 갤럭시 S4 472 59%
삼성 갤럭시 노트 2 404 47%
엘지 옵티머스 G 395 45%
엘지 옵티머스 뷰 395 45%
팬택 베가 No 6 318 45%
갤럭시 넥서스 (AOSP) 267 45%
3. 안드로이드 웹뷰와 파편화
4. WebKit 브라우저 엔진의 역사
KHTML, KJS (1999.05 ~)
Blink (2013.04 ~)
WebKit (2001 ~)
Open Source in 2005
Apple Forks KHTML, KJS in 2001
Google Forks WebKit in 2013
5. 안드로이드 웹뷰의 구조
Blink
(웹엔진)
Content
(멀티 프로세스 지원 레이어)
Content API
Blink
Chromium
Android
WebView
Framework
Browser
Framework
Google Chrome Chromium
Logo Colorful Blue
Crash reporting Yes, if you turn it on None
User metrics Yes, if you turn it on No
Video and audio tags AAC, MP3, Vorbis and Theora Vorbis and Theora by default
Adobe Flash
custom (non-free) plugin
included in release
supports NPAPI plugins,
including the one from Adobe
PDF support
custom (non-free) plugin
included in release
downloads and displays with
system PDF viewer
Code Tested by Chrome developers May be modified by distributions
Sandbox Always on Depending on the distribution
Quality Assurance
New releases are tested before
sending to users
Depending on the distribution
6. 크롬과 크로미움의 차이점
Chapter 2. How chromium works
[Source: http://alien.slackbook.org/blog/watch-netflix-video-in-your-chromium-browser-this-time-for-real/]
1. 브라우저는 어떻게 동작 하는가?
DOM: Document Object Model
• Document = HTML, well-formed XML
• Object Model = Data + Method
Standard way for accessing and manipulating
2. HTML Parser
CSSOM: CSS Object Model
• DOM과 비슷하게 CSS도 CSSOM이 있음
• CSS는 HTML Element의 스타일을 정의
• 외부 링크로 정의된 경우 렌더링이 블로킹 됨
• Cascade down 개념을 구현하기 위해 트리 구조
3. CSS Parser
4. Java Script Engine
Recalculate Style의 결과
• Render Tree = DOM Tree + CSSOM Tree
• DOM Tree와 Render Tree는 1:1 관계가 아님
• 화면에 보이는 요소들을 중심으로 구성
5. Render Tree (1/2)
5. Render Tree (2/2)
DOM CSSOM
Render Tree
[Source: Critical Rendering Path By llya Grigorik]
Layout 알고리즘
• 각 박스의 넓이는 viewport (ICB)기준
• 각 박스의 높이는 contents (fonts)를 기준
• 윈도우 사이즈를 변경 하거나 폰트 변경 시 Global Layout
• Dirty bit system으로 incremental layout
6. Layout
1024
768
7. Paint
8. VSync 기반 멀티 쓰레드 렌더링 (1/6)
[Source: Chrome Graphics - BlinkOn 1]
[Source: Chrome Graphics - BlinkOn 1]
8. VSync 기반 멀티 쓰레드 렌더링 (2/6)
[Source: Chrome Graphics - BlinkOn 1]
8. VSync 기반 멀티 쓰레드 렌더링 (3/6)
Scrolling
Animation
Pinch Zoom
[Source: Life of a pixel 2018]
8. VSync 기반 멀티 쓰레드 렌더링 (4/6)
[Source: Chrome Graphics - BlinkOn 1]
8. VSync 기반 멀티 쓰레드 렌더링 (5/6)
A modern 2D graphics library
SkPicture, SkPicturePlayBack:
Records and replay draw operations.
[http://www.dorothybrowser.com/parallelizing-canvas-rendering/]
8. VSync 기반 멀티 쓰레드 렌더링 (6/6)
Chapter 3. How chromium powered WebView works
[Source: https://play.google.com/apps/testing/com.google.android.webview ]
앱 프로세스
서비스 프로세스
SurfaveView
서비스 프로세스
1. 안드로이드에서 크로미움은 어떻게 동작 하는가?
[Source: Chrome Graphics - BlinkOn 1]
2. 웨일 브라우저의 뷰 구조
SurfaveView
FrameLayout
FrameLayout
Whale (Chrome)
 SurfaceView
 Vsync based rendering
 Async uploads using
EGLImage and
glTexSubImage2D()
Chromium powered webview
 “Draw functor”: inject draw calls into
system GL context.
 Android based rendering
 Private API. The WebView injects a
callback onto the display list.
3. 크로미움 웹뷰의 구조적 차이점 (1/2)
[Source: Android WebView rendering BlinkOn 3]
Graphics components
Whale (Chrome)
- Multi-process
 UI thread
 GPU Process
 Texture upload thread
 Per renderer process:
o Blink thread
o Compositor thread
o Raster thread
Chromium WebView
- Single-process (Multi-process)
 Combined UI + Compositor thread
 Android RenderThread (+in-process
GPU thread)
 Canvas/WebGL GPU thread
 Blink thread
 Raster thread
[Source: Android WebView rendering BlinkOn 3]
Architecture
3. 크로미움 웹뷰의 구조적 차이점 (2/2)
4. Android Rendering Pipeline <= Kit
[Source: http://www.slideshare.net/deview/1d6review-of-android-l-developer-preview]
[MainThread]
4. 안드로이드 렌더링 파이프 라인 (KitKat 4.4 이하)
5. 크로미움 웹뷰 렌더링 파이프 라인 (KitKat 4.4 이하)
6. 안드로이드 렌더링 파이프 라인 (Lollipop 5.0 이상)
[Source: http://www.slideshare.net/deview/1d6review-of-android-l-developer-preview]
7. 크로미움 웹뷰 렌더링 파이프 라인 (Lollipop 5.0 이상)
[Source: http://mail.cfanz.cn/index.php?c=article&a=read&id=210306]
8. 크로미움 웹뷰 렌더링 파이프 라인 (Lollipop 5.0 이상)
Thank You.

Más contenido relacionado

La actualidad más candente

전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 

La actualidad más candente (20)

Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
안드로이드 윈도우 마스터 되기
안드로이드 윈도우 마스터 되기안드로이드 윈도우 마스터 되기
안드로이드 윈도우 마스터 되기
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
WebAssembly Fundamentals
WebAssembly FundamentalsWebAssembly Fundamentals
WebAssembly Fundamentals
 
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
 
오픈소스GIS 개론 과정 - OpenLayers 기초
오픈소스GIS 개론 과정 - OpenLayers 기초오픈소스GIS 개론 과정 - OpenLayers 기초
오픈소스GIS 개론 과정 - OpenLayers 기초
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.js
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
심성환 개발자 포트폴리오
심성환 개발자 포트폴리오심성환 개발자 포트폴리오
심성환 개발자 포트폴리오
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
200531 jandi
200531 jandi200531 jandi
200531 jandi
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.js
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
Intro to vue.js
Intro to vue.jsIntro to vue.js
Intro to vue.js
 

Similar a [24]안드로이드 웹뷰의 모든것

Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Channy Yun
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
NAVER D2
 
드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
draghome
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
Joone Hur
 

Similar a [24]안드로이드 웹뷰의 모든것 (20)

Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
Web os 전략 0912
Web os 전략 0912Web os 전략 0912
Web os 전략 0912
 
드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
 
W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017W3C HTML5 표준 기술 동향 - 2017
W3C HTML5 표준 기술 동향 - 2017
 
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료
 
Front end engineer
Front end engineerFront end engineer
Front end engineer
 
웹스트리밍동영상보안자료
웹스트리밍동영상보안자료웹스트리밍동영상보안자료
웹스트리밍동영상보안자료
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
Social game and windows azure platform (final)
Social game and windows azure platform (final)Social game and windows azure platform (final)
Social game and windows azure platform (final)
 

Más de NAVER Engineering

Más de NAVER Engineering (20)

React vac pattern
React vac patternReact vac pattern
React vac pattern
 
디자인 시스템에 직방 ZUIX
디자인 시스템에 직방 ZUIX디자인 시스템에 직방 ZUIX
디자인 시스템에 직방 ZUIX
 
진화하는 디자인 시스템(걸음마 편)
진화하는 디자인 시스템(걸음마 편)진화하는 디자인 시스템(걸음마 편)
진화하는 디자인 시스템(걸음마 편)
 
서비스 운영을 위한 디자인시스템 프로젝트
서비스 운영을 위한 디자인시스템 프로젝트서비스 운영을 위한 디자인시스템 프로젝트
서비스 운영을 위한 디자인시스템 프로젝트
 
BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호BPL(Banksalad Product Language) 무야호
BPL(Banksalad Product Language) 무야호
 
이번 생에 디자인 시스템은 처음이라
이번 생에 디자인 시스템은 처음이라이번 생에 디자인 시스템은 처음이라
이번 생에 디자인 시스템은 처음이라
 
날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기날고 있는 여러 비행기 넘나 들며 정비하기
날고 있는 여러 비행기 넘나 들며 정비하기
 
쏘카프레임 구축 배경과 과정
 쏘카프레임 구축 배경과 과정 쏘카프레임 구축 배경과 과정
쏘카프레임 구축 배경과 과정
 
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
 
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
 
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
 
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
 
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
 
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
 
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
 
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
 
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
 
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
 
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
 

[24]안드로이드 웹뷰의 모든것

  • 1.
  • 2. 안드로이드 웹뷰의 모든 것 NAVER 웨일 이형욱 (TL)
  • 3. 발표자 소개 • 이형욱 (hyungwook.lee@navercorp.com) • NAVER 웨일팀 • Tech Leader • 웨일 브라우저 (데탑, 모바일) 개발 • 네이버앱 크로스워크 엔진 개발 • WebKit Committer • Chromium Contributor
  • 4. 목차 Chapter 1. Android WebView overview 1. 안드로이드 웹뷰란 무엇인가? 2. 안드로이드 웹뷰의 역사 3. 안드로이드 웹뷰와 파편화 4. WebKit 브라우저 엔진의 역사 5. 안드로이드 웹뷰의 구조 6. 크롬과 크로미움의 차이점 Chapter 2. How chromium works 1. 브라우저는 어떻게 동작 하는가? 2. HTML Parser 3. CSS Parser 4. Java Script Engine 5. Render Tree 6. Layout 7. Paint 8. VSync 기반 멀티 쓰레드 렌더링 Chapter 3. How chromium powered WebView works 1. 안드로이드에서 크로미움은 어떻게 동작 하는가? 2. 웨일 브라우저의 뷰 구조 3. 크로미움 웹뷰의 구조적 차이점 4. 안드로이드 렌더링 파이프 라인 (KitKat 4.4 이하) 5. 크로미움 웹뷰 렌더링 파이프 라인 (KitKat 4.4 이하) 6. 안드로이드 렌더링 파이프 라인 (Lollipop 5.0 이상) 7. 크로미움 웹뷰 렌더링 파이프 라인 (Lollipop 5.0 이상)
  • 5. Chapter 1. Android WebView overview [Source: http://chittagongit.com//images/android-icon-transparent-background/android-icon-transparent-background-16.jpg]
  • 6. Web content in a box  Powers browsers such as AOSP Browser  Displays almost all mobile banner ads  Can be used to create portable HTML-based apps  Often intermixed imperceptibly with native Views <- Android View <- Android WebView 1. 안드로이드 웹뷰란 무엇인가?
  • 7. Android <= J: custom WebKit-based “classic” WebView Android K: Chromium 30 / 33-based WebView Android L: Unbundled Evergreen WebView http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&tag=ODROID-U3&bid=214 http://www.ibtimes.co.uk/moto-g-finally-tastes-android-5-0-lollipop-via-cyanogenmod-12-unofficial-build-1475895 2. 안드로이드 웹뷰의 역사
  • 8. • 안드로이드 제조사에서 경쟁적으로 WebKit을 Customization • 안드로이드 버전별 서로 다른 WebKit을 사용하고 있음 1) Android 4.3 이전 버전은 WebKit 기반의 렌더링 엔진을 사용 2) Android 4.4 부터는 Blink 기반의 렌더링 엔진으로 교체 • 현재는 사용자 웹뷰 업데이트 유무에 따라 서로 다른 버전을 사용 HTML5 Test.com CSS3 Test.com 삼성 갤럭시 S4 472 59% 삼성 갤럭시 노트 2 404 47% 엘지 옵티머스 G 395 45% 엘지 옵티머스 뷰 395 45% 팬택 베가 No 6 318 45% 갤럭시 넥서스 (AOSP) 267 45% 3. 안드로이드 웹뷰와 파편화
  • 9. 4. WebKit 브라우저 엔진의 역사 KHTML, KJS (1999.05 ~) Blink (2013.04 ~) WebKit (2001 ~) Open Source in 2005 Apple Forks KHTML, KJS in 2001 Google Forks WebKit in 2013
  • 10. 5. 안드로이드 웹뷰의 구조 Blink (웹엔진) Content (멀티 프로세스 지원 레이어) Content API Blink Chromium Android WebView Framework Browser Framework
  • 11. Google Chrome Chromium Logo Colorful Blue Crash reporting Yes, if you turn it on None User metrics Yes, if you turn it on No Video and audio tags AAC, MP3, Vorbis and Theora Vorbis and Theora by default Adobe Flash custom (non-free) plugin included in release supports NPAPI plugins, including the one from Adobe PDF support custom (non-free) plugin included in release downloads and displays with system PDF viewer Code Tested by Chrome developers May be modified by distributions Sandbox Always on Depending on the distribution Quality Assurance New releases are tested before sending to users Depending on the distribution 6. 크롬과 크로미움의 차이점
  • 12. Chapter 2. How chromium works [Source: http://alien.slackbook.org/blog/watch-netflix-video-in-your-chromium-browser-this-time-for-real/]
  • 13. 1. 브라우저는 어떻게 동작 하는가?
  • 14. DOM: Document Object Model • Document = HTML, well-formed XML • Object Model = Data + Method Standard way for accessing and manipulating 2. HTML Parser
  • 15. CSSOM: CSS Object Model • DOM과 비슷하게 CSS도 CSSOM이 있음 • CSS는 HTML Element의 스타일을 정의 • 외부 링크로 정의된 경우 렌더링이 블로킹 됨 • Cascade down 개념을 구현하기 위해 트리 구조 3. CSS Parser
  • 16. 4. Java Script Engine
  • 17. Recalculate Style의 결과 • Render Tree = DOM Tree + CSSOM Tree • DOM Tree와 Render Tree는 1:1 관계가 아님 • 화면에 보이는 요소들을 중심으로 구성 5. Render Tree (1/2)
  • 18. 5. Render Tree (2/2) DOM CSSOM Render Tree [Source: Critical Rendering Path By llya Grigorik]
  • 19. Layout 알고리즘 • 각 박스의 넓이는 viewport (ICB)기준 • 각 박스의 높이는 contents (fonts)를 기준 • 윈도우 사이즈를 변경 하거나 폰트 변경 시 Global Layout • Dirty bit system으로 incremental layout 6. Layout
  • 21. 8. VSync 기반 멀티 쓰레드 렌더링 (1/6) [Source: Chrome Graphics - BlinkOn 1]
  • 22. [Source: Chrome Graphics - BlinkOn 1] 8. VSync 기반 멀티 쓰레드 렌더링 (2/6)
  • 23. [Source: Chrome Graphics - BlinkOn 1] 8. VSync 기반 멀티 쓰레드 렌더링 (3/6)
  • 24. Scrolling Animation Pinch Zoom [Source: Life of a pixel 2018] 8. VSync 기반 멀티 쓰레드 렌더링 (4/6)
  • 25. [Source: Chrome Graphics - BlinkOn 1] 8. VSync 기반 멀티 쓰레드 렌더링 (5/6)
  • 26. A modern 2D graphics library SkPicture, SkPicturePlayBack: Records and replay draw operations. [http://www.dorothybrowser.com/parallelizing-canvas-rendering/] 8. VSync 기반 멀티 쓰레드 렌더링 (6/6)
  • 27. Chapter 3. How chromium powered WebView works [Source: https://play.google.com/apps/testing/com.google.android.webview ]
  • 28. 앱 프로세스 서비스 프로세스 SurfaveView 서비스 프로세스 1. 안드로이드에서 크로미움은 어떻게 동작 하는가? [Source: Chrome Graphics - BlinkOn 1]
  • 29. 2. 웨일 브라우저의 뷰 구조 SurfaveView FrameLayout FrameLayout
  • 30. Whale (Chrome)  SurfaceView  Vsync based rendering  Async uploads using EGLImage and glTexSubImage2D() Chromium powered webview  “Draw functor”: inject draw calls into system GL context.  Android based rendering  Private API. The WebView injects a callback onto the display list. 3. 크로미움 웹뷰의 구조적 차이점 (1/2) [Source: Android WebView rendering BlinkOn 3] Graphics components
  • 31. Whale (Chrome) - Multi-process  UI thread  GPU Process  Texture upload thread  Per renderer process: o Blink thread o Compositor thread o Raster thread Chromium WebView - Single-process (Multi-process)  Combined UI + Compositor thread  Android RenderThread (+in-process GPU thread)  Canvas/WebGL GPU thread  Blink thread  Raster thread [Source: Android WebView rendering BlinkOn 3] Architecture 3. 크로미움 웹뷰의 구조적 차이점 (2/2)
  • 32. 4. Android Rendering Pipeline <= Kit [Source: http://www.slideshare.net/deview/1d6review-of-android-l-developer-preview] [MainThread] 4. 안드로이드 렌더링 파이프 라인 (KitKat 4.4 이하)
  • 33. 5. 크로미움 웹뷰 렌더링 파이프 라인 (KitKat 4.4 이하)
  • 34. 6. 안드로이드 렌더링 파이프 라인 (Lollipop 5.0 이상) [Source: http://www.slideshare.net/deview/1d6review-of-android-l-developer-preview]
  • 35. 7. 크로미움 웹뷰 렌더링 파이프 라인 (Lollipop 5.0 이상)
  • 36. [Source: http://mail.cfanz.cn/index.php?c=article&a=read&id=210306] 8. 크로미움 웹뷰 렌더링 파이프 라인 (Lollipop 5.0 이상)