compiling and optimizing your own browser with webkit

40
Monday, November 29, 2010

Upload: sencha

Post on 19-May-2015

4.174 views

Category:

Technology


1 download

DESCRIPTION

Webkit is the layout engine behind Safari, Chrome and almost every mobile browser. But did you ever wonder how to build WebKit yourself? In this session, you'll learn the simple steps, along with never-seen-before techniques, on how to experiment with WebKit on your own. You'll learn how to find the root of various performance problems, automate a wide array of regression tests, and see how WebKit works to produce the render tree, resolve complex styling, execute scripts, and more.

TRANSCRIPT

Page 1: Compiling and Optimizing Your Own Browser with WebKit

Monday, November 29, 2010

Page 2: Compiling and Optimizing Your Own Browser with WebKit

Monday, November 29, 2010

Page 3: Compiling and Optimizing Your Own Browser with WebKit

Compiling & Optimizing Your Own Browser with

WebKit

ARIYA HIDAYATENGINEERING DIRECTOR, SENCHA

Monday, November 29, 2010

Page 4: Compiling and Optimizing Your Own Browser with WebKit

whoami

Monday, November 29, 2010

Page 5: Compiling and Optimizing Your Own Browser with WebKit

Overview

Monday, November 29, 2010

Page 6: Compiling and Optimizing Your Own Browser with WebKit

WebKit Everywhere

Browser

Devices

Runtime

Monday, November 29, 2010

Page 7: Compiling and Optimizing Your Own Browser with WebKit

0

10000

20000

30000

40000

50000

60000

70000

80000

0 1 2 3 4 5 6 7 8 9 10

Rev

isio

ns

Years

History

Monday, November 29, 2010

Page 8: Compiling and Optimizing Your Own Browser with WebKit

0

10000

20000

30000

40000

50000

60000

70000

80000

0 1 2 3 4 5 6 7 8 9 10

Rev

isio

ns

Years

History~2000 commits/month

Monday, November 29, 2010

Page 9: Compiling and Optimizing Your Own Browser with WebKit

Extensive Tests

the rest229 MB

tests904 MB≈ 20,000 tests

Monday, November 29, 2010

Page 10: Compiling and Optimizing Your Own Browser with WebKit

Workflow

1Every commit needs to be reviewed

2 Broken commit must be reverted

Monday, November 29, 2010

Page 11: Compiling and Optimizing Your Own Browser with WebKit

Workflow

1Every commit needs to be reviewed

2 Broken commit must be reverted

quality control

zero-regression policy

Monday, November 29, 2010

Page 12: Compiling and Optimizing Your Own Browser with WebKit

Level of Involvement

Contributor

Committer

≈ 130 Reviewer

≈ 80accept or reject patches

checks in reviewed patches

after 10-20 patches

after 80 patches

Monday, November 29, 2010

Page 13: Compiling and Optimizing Your Own Browser with WebKit

WebKit ReviewersApple

39

Google19

Nokia6

RIM6

Misc12

Monday, November 29, 2010

Page 14: Compiling and Optimizing Your Own Browser with WebKit

WebKit ReviewersApple

39

Google19

Nokia6

RIM6

Misc12

1

Monday, November 29, 2010

Page 15: Compiling and Optimizing Your Own Browser with WebKit

Components of WebKit

WebKit Library

JavaScriptCore

WebCore

HTML rendering

SVG

DOM CSS

Monday, November 29, 2010

Page 16: Compiling and Optimizing Your Own Browser with WebKit

Web Browsers

Safari

WebCore + JavaScriptCore

Eclair

WebCore + V8

Chrome Froyo

Monday, November 29, 2010

Page 17: Compiling and Optimizing Your Own Browser with WebKit

How Fresh?

Fall 2010Spring 2010

Chrome 7534.7

Safari 5533.18

Android 2.2533.1

Safari 4528.16

AIR 2.5531.9

mid 2009

Monday, November 29, 2010

Page 18: Compiling and Optimizing Your Own Browser with WebKit

Platform Abstractions

Network Unicode Clipboard

Graphics Theme Events

Thread Geolocation Timer

Monday, November 29, 2010

Page 19: Compiling and Optimizing Your Own Browser with WebKit

Di!erent “Ports”WebCore graphics

Mac Chromium Qt Gtk

CoreGraphics

Skia

QPainter

Cairo

graphics stack

GraphicsContext

Monday, November 29, 2010

Page 20: Compiling and Optimizing Your Own Browser with WebKit

Get + Compile

Monday, November 29, 2010

Page 21: Compiling and Optimizing Your Own Browser with WebKit

Requirements

•Subversion or Git•C++ compiler•Perl•Python•Various SDK

Monday, November 29, 2010

Page 22: Compiling and Optimizing Your Own Browser with WebKit

Using Subversion

svn checkout http://svn.webkit.org/repository/webkit/trunk webkitcd webkit

Monday, November 29, 2010

Page 23: Compiling and Optimizing Your Own Browser with WebKit

Using git

git clone git://git.webkit.org/WebKit.gitcd WebKit

≈ 1.2 GB .git

Monday, November 29, 2010

Page 24: Compiling and Optimizing Your Own Browser with WebKit

Build

WebKitTools/Scripts/build-webkit

--qt for Qt, --gtk for Gtk+--debug for “Debug” mode

Monday, November 29, 2010

Page 25: Compiling and Optimizing Your Own Browser with WebKit

Launch

WebKitTools/Scripts/run-launcher

--qt for Qt, --gtk for Gtk+--debug for “Debug” mode

Monday, November 29, 2010

Page 26: Compiling and Optimizing Your Own Browser with WebKit

Render Tree

layer at (0,0) size 800x600 RenderView at (0,0) size 800x600layer at (0,0) size 800x600 RenderBlock {HTML} at (0,0) size 800x600 RenderBody {BODY} at (8,8) size 784x576 RenderBlock {P} at (0,0) size 784x18 RenderText {#text} at (0,1) size 117x16 text run at (0,1) width 117: "Hello SenchaCon!"

<html><body><p>Hello SenchaCon!</p></body></html>

paragraph

Monday, November 29, 2010

Page 27: Compiling and Optimizing Your Own Browser with WebKit

Let’s Start the PARTY

Monday, November 29, 2010

Page 28: Compiling and Optimizing Your Own Browser with WebKit

Let’s Start the PARTY

Monday, November 29, 2010

Page 29: Compiling and Optimizing Your Own Browser with WebKit

Typical Scenario

This is awesome!

Monday, November 29, 2010

Page 30: Compiling and Optimizing Your Own Browser with WebKit

forget to run

the tests

REGRESSION

Typical Scenario

This is awesome!

Monday, November 29, 2010

Page 31: Compiling and Optimizing Your Own Browser with WebKit

forget to run

the tests

REGRESSION

Typical Scenario

This is awesome!

Monday, November 29, 2010

Page 32: Compiling and Optimizing Your Own Browser with WebKit

Using WebView

QWebView webView;webView.show();webView.setUrl(QUrl("http://www.sencha.com"));

Monday, November 29, 2010

Page 33: Compiling and Optimizing Your Own Browser with WebKit

Capture to Image

QWebPage page;QImage image(size, QImage::Format_ARGB32_Premultiplied);image.fill(Qt::transparent);QPainter p(&image);page.mainFrame()->render(&p);p.end();image.save(fileName);

Monday, November 29, 2010

Page 34: Compiling and Optimizing Your Own Browser with WebKit

Network Log

28: GET http://www.google.com/m/gp292: Response 200 application/xhtml+xml; charset=UTF-8 0 bytes http://www.google.com/m/gp311: GET data:image/gif;base64,R0lGODlhiA...312: GET data:image/gif;base64,R0lGODlhJA...312: GET data:image/gif;base64,R0lGODlhGA...312: Response 0 image/gif 3611 bytes data:image/gif;base64,R0lGODlhiA...312: Finish fail data:image/gif;base64,R0lGODlhiA...312: Response 0 image/gif 284 bytes data:image/gif;base64,R0lGODlhJA...312: Finish fail data:image/gif;base64,R0lGODlhJA...312: Response 0 image/gif 178 bytes data:image/gif;base64,R0lGODlhGA...312: Finish fail data:image/gif;base64,R0lGODlhGA...317: Response 200 application/xhtml+xml; charset=UTF-8 0 bytes http://www.google.com/m/gp324: Finish fail http://www.google.com/m/gp328: GET http://www.google.com/m/gn/user?...329: Finish success http://www.google.com/m/gn/user?...

Monday, November 29, 2010

Page 35: Compiling and Optimizing Your Own Browser with WebKit

Test Runner

specrunner SpecRunner.html5 specs, 0 failures in 0.013s

specrunner SpecRunner.htmlFAIL: 5 specs, 1 failure in 0.014s

Monday, November 29, 2010

Page 36: Compiling and Optimizing Your Own Browser with WebKit

Recorder & Replayer

Monday, November 29, 2010

Page 37: Compiling and Optimizing Your Own Browser with WebKit

Remote Console for

http://github.com/senchalabs/android-tools

Monday, November 29, 2010

Page 38: Compiling and Optimizing Your Own Browser with WebKit

Remote Console for

http://github.com/senchalabs/android-tools

Monday, November 29, 2010

Page 39: Compiling and Optimizing Your Own Browser with WebKit

THANK YOU!

ariya @ sencha.com

ariyahidayat

ariya.blogspot.com

Monday, November 29, 2010

Page 40: Compiling and Optimizing Your Own Browser with WebKit

THANK YOU!

ariya @ sencha.com

ariyahidayat

ariya.blogspot.com

We’re hiring!

Monday, November 29, 2010