compiling and optimizing your own browser with webkit
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
Monday, November 29, 2010
Monday, November 29, 2010
Compiling & Optimizing Your Own Browser with
WebKit
ARIYA HIDAYATENGINEERING DIRECTOR, SENCHA
Monday, November 29, 2010
whoami
Monday, November 29, 2010
Overview
Monday, November 29, 2010
WebKit Everywhere
Browser
Devices
Runtime
Monday, November 29, 2010
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
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
Extensive Tests
the rest229 MB
tests904 MB≈ 20,000 tests
Monday, November 29, 2010
Workflow
1Every commit needs to be reviewed
2 Broken commit must be reverted
Monday, November 29, 2010
Workflow
1Every commit needs to be reviewed
2 Broken commit must be reverted
quality control
zero-regression policy
Monday, November 29, 2010
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
WebKit ReviewersApple
39
Google19
Nokia6
RIM6
Misc12
Monday, November 29, 2010
WebKit ReviewersApple
39
Google19
Nokia6
RIM6
Misc12
1
Monday, November 29, 2010
Components of WebKit
WebKit Library
JavaScriptCore
WebCore
HTML rendering
SVG
DOM CSS
Monday, November 29, 2010
Web Browsers
Safari
WebCore + JavaScriptCore
Eclair
WebCore + V8
Chrome Froyo
Monday, November 29, 2010
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
Platform Abstractions
Network Unicode Clipboard
Graphics Theme Events
Thread Geolocation Timer
Monday, November 29, 2010
Di!erent “Ports”WebCore graphics
Mac Chromium Qt Gtk
CoreGraphics
Skia
QPainter
Cairo
graphics stack
GraphicsContext
Monday, November 29, 2010
Get + Compile
Monday, November 29, 2010
Requirements
•Subversion or Git•C++ compiler•Perl•Python•Various SDK
Monday, November 29, 2010
Using Subversion
svn checkout http://svn.webkit.org/repository/webkit/trunk webkitcd webkit
Monday, November 29, 2010
Using git
git clone git://git.webkit.org/WebKit.gitcd WebKit
≈ 1.2 GB .git
Monday, November 29, 2010
Build
WebKitTools/Scripts/build-webkit
--qt for Qt, --gtk for Gtk+--debug for “Debug” mode
Monday, November 29, 2010
Launch
WebKitTools/Scripts/run-launcher
--qt for Qt, --gtk for Gtk+--debug for “Debug” mode
Monday, November 29, 2010
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
Let’s Start the PARTY
Monday, November 29, 2010
Let’s Start the PARTY
Monday, November 29, 2010
Typical Scenario
This is awesome!
Monday, November 29, 2010
forget to run
the tests
REGRESSION
Typical Scenario
This is awesome!
Monday, November 29, 2010
forget to run
the tests
REGRESSION
Typical Scenario
This is awesome!
Monday, November 29, 2010
Using WebView
QWebView webView;webView.show();webView.setUrl(QUrl("http://www.sencha.com"));
Monday, November 29, 2010
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
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
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
Recorder & Replayer
Monday, November 29, 2010
Remote Console for
http://github.com/senchalabs/android-tools
Monday, November 29, 2010
Remote Console for
http://github.com/senchalabs/android-tools
Monday, November 29, 2010
THANK YOU!
ariya @ sencha.com
ariyahidayat
ariya.blogspot.com
Monday, November 29, 2010
THANK YOU!
ariya @ sencha.com
ariyahidayat
ariya.blogspot.com
We’re hiring!
Monday, November 29, 2010