Day 1
Lightning talks!!
haraken@
2019 Apr
(๑>ᴗ<๑)
*
*
*
*
Rule
Let's practice!
It's important to improve
documentation of the code base
50% increase!!
SGTM
(๑˃̵ᴗ˂̵)و
Media Capture�for the Web
BlinkOn 10, April 8, 2019
Rijubrata Bhaumik @riju
{ Generic Sensors, Web NFC, MediaCapture .. }
Web Media Capture
11
Capturing images used to be painful
Then we shipped Image Capture API in M59
Problem solved?
But … we heard you need a more capable API!
12
12
navigator.mediaDevices
.getUserMedia({video: true}) …
videoTrack.applyConstraints({
advanced: [{
focusMode: "manual",
focusDistance: 5
}]
});
For those compelling real-world u$e ca$e$
13
13
Focus Stacking
Remove defocused objects & background
Depth estimation in Augmented Reality
… and more
Then we saw the light
14
navigator.mediaDevices
.getUserMedia({video: true}) …
videoTrack.applyConstraints({
advanced: [{
exposureMode: "manual",
exposureTime: 50
}]
});
15
15
Well, there’s also that High Dynamic Range thing...
-4 stops
-2 stops
+2 stops
+4 stops
Tone-mapped HDR image
Also, we heard y’all like video conferencing too?!
16
Media capture in depth? We have you covered!
17
Demos in depth
18
18
(Thank You!)
mcasas, reillyg, guidou, chfremer, astojilj, slightlyoff, anssiko .. and many many more
19
Oilpan: Concurrent Marking
BlinkOn 10, Toronto, Apr 2019
hpayer@, mlippautz@
2019 Q2++
Motivation
2018-Q3: Latency-aware garbage collection through incremental marking
2019-Q1: Sane architecture across V8 and Blink w/ unified heap
Marking speed =
processed bytes |
time spent on main thread |
V8
dynamic language (JS)
concurrent marking
0.37 MB/ms
Oilpan
static language (C++)
incremental marking
0.19 MB/ms
(UMA; 99%-ile)
Marking (incrementally)
time
main thread
Start
Finish
App
Step
App
Step
Step
Concurrent marking
marking helper
Step
Step
Step
time
main thread
Start
Finish
App
App
Knock knock
Race condition
Who’s there?
▯▯▯segmentation fault
marking helper
Step
time
main thread
App
Step
App
Knock knock
Race condition
Who’s there?
▯▯▯segmentation fault
CPU Profiling: The silent killer
Peter Marshall - V8 Tools & Embedders
Confidential + Proprietary
Confidential + Proprietary
96%
Reduction of peak memory overhead from 32.2 MiB to ~1 MiB
Confidential + Proprietary
2B+
Number of future users of the CPU Profiler
Confidential + Proprietary
Keep GCC running
Chromium & GCC
What we are doing at LG Electronics
Status
Status
WORKING AND MAINTAINED AGAIN
(since 2 weeks ago!)
Thanks
Several efforts, helping with keeping GCC easy to build… Intel, Igalia, LG…
Thanks!
JavaScript Ecosystem
hablich@chromium.org - BlinkOn 10 Lightning Talk
Developer numbers
The estimated number of JavaScript developers world-wide is 10.7M, and it's also the fastest growing community with 3M new developers in just the last year [1].
[1] Developer Economics: State of the Developer Nation (15th Edition)
Graph copied from Developer Economics report - picture taken from report
What about B2B?
57 % of enterprise developers are using JavaScript in their job
[2] Cloud Foundry Foundation Top Languages for Enterprise Application Development 2018 - picture taken from the report
The number one criteria for choice of a programming language is the availability of libraries [3],
and JavaScript has by far the largest number of libraries available with over 650.000 packages [4].
[3] Empirical Analysis of Programming Language Adoption, Princeton, 2013
[4] State of the Union: npm
JavaScript is pervasive, it is popular on servers, edge networks, desktop and IoT.
Or because it is the only language that is supported by browsers. *
* Terms and conditions apply, might change with WebAssembly
Call to action!
Invest in JavaScript Coins now!
Hockey stick growth guaranteed!*
* The guarantee is in a state of volatility. Actually, there is no guarantee.
The End
thread text rendering
a story by fserb@
WhatWG HTML Spec in 2017
WhatWG HTML Spec in 2017
*record scratch*
*freeze frame*
Yep, that’s me. You’re probably wondering how I ended up in this situation.
Can we make text rendering
thread safe in Blink?
TSAN
TSAN happy
==
text rendering was thread safe
in a regression-safe way
Better tools enables us to do things we weren’t able to do before
Perf Testing with Puppeteer, Chrome Tracing and PMUs
Benoit Girard
Software Engineer
How we do perf testing in the industry:
Developer
Perf Server
Send your checkout
How we do perf testing in the industry:
Continuous quantities:
^^ Source of noise
Discrete quantities:
^^ Reproducible, countable, debuggable!
Can we do better!?
Can we do better!? Yes!
Developer
Retired Instruction Counter
Replace Wall/CPU Time with Instruction Counts
Pros:
Cons:
Instruction Counter Math
Run JavaScript
1 second
Execute JavaScript
Download JavaScript
1 second
Download 1 MB of JavaScript
How many instructions can we execute?
Instructions = Time Budget * Frequency * Instructions per cycles * thread parallelism
Modern Desktop CPU ~=
Instructions ~= 1s * 2 Ghz * 1 Instruction / Cycle * 1 thread (web)
Instructions ~= 2,000,000,000 instructions
Each processor will have its own Frequency and Instruction / Cycle.
Collect using Puppeteer + Tracing
CL 1436079: Extend Chrome Tracing to collect instruction count for each block.
No changes to puppeteer.
Collect instruction counts for exactly the execution you want.
Easy to remove sources of noise like GC
Noise
1ms -> 100 μs
Where’s the noise coming from?
Making branching deterministics can drive down noise further!
Record-replay debuggers can find noise sources.
What’s next?
Integrating it in the workflow of web engineers at Facebook
Exploring integration with the React Profiler.
Call to action
More projects using this!
Time
Blinkin’ Views
sadrul@chromium.org
Views: Native toolkit for the UI
Views: Native toolkit for the UI
aura::Window
views::View
views::Widget
Views: Devtools support!
--enable-ui-devtools
chrome://inspect#other
Views
*** Things are somewhat different on ChromeOS. But the margin for this lightning talk is too narrow to explain.
Layer Tree
View Tree
View
View
Layer
Layer
Blink
This is how Web works too!
https://developers.google.com/web/updates/2018/09/inside-browser-part3
Interaction with Compositor (cc)
Views
Compositor (cc)
Browser
Blink
Compositor (cc)
Renderer
Thought experiment: What if ...
Views
Compositor (cc)
Views
[Parts of] Blink
Compositor (cc)
Browser
Browser
Many Unknowns!!
Lightning talk
HTML5 apps on AGL
BlinkOn 10 / April 9th, 2019
(Toronto, Canada)
Julie Jeongeun Kim
jkim@igalia.com
Automotive Grade Linux (AGL)
Executives from Honda, Mazda, Subaru, Suzuki and Toyota on stage together at Automotive Linux Summit 2018.
AGL members
Chromium and WebRuntime in AGL
AGL
Chromium
Web Application
Manager
(Web Runtime)
AGL event handling
Communicating with Wayland
[memory-match]
[youtube]
[web browser]
Current status
Plans
See Jose Dapena Paz’s talk for more details!
April 10 Day 2, 13:50~14:20 Room #315
Web Technologies in Robotics and Automotive
Q&A
Lorenzo Tilve (ltilve@)
Jacobo Aragunde (jaragunde@)
Antia Puentes (apuentes@)
Julie Kim (jkim@)
References
https://www.automotivelinux.org
https://static.sched.com/hosted_files/aglammjapan2019/b8/AMM%20Tokyo%202019%20Intro%20to%20AGL.pdf
https://twitter.com/autogradelinux/status/1103101743158755328
https://twitter.com/VStarWalt/status/1103178939927683072?s=19
https://github.com/webosose/meta-agl-lge/tree/flounder.chromium68
Chrome's Android APK Size
BlinkOn 2019 Lightning Talk
agrieve@chromium.org
APK Breakdown
android-binary-size Trybot
android-binary-size Trybot
Per-milestone size viewer
Command-line Tool for Symbol Size Database
>>> Print(canned_queries.CategorizeGenerated())
Showing 27 symbols (27 unique) with total pss: 8152217 bytes
Sizes: .text=5.89mb .rodata=570kb .data.rel.ro=387kb Index | Running Total | Section@Address | PSS | Path
------------------------------------------------------------
0) 1868914 (22.9%) *@Group 1868914 Blink (bindings)
1) 3718254 (45.6%) *@Group 1849340 Mojo
2) 5008602 (61.4%) *@Group 1290348 V8 Builtins
3) 6118639 (75.1%) *@Group 1110036 C++ Protocol Buffers
4) 6592262 (80.9%) *@Group 473623 DevTools
5) 6914864 (84.8%) *@Group 322601 Blink (Other)
6) 7188328 (88.2%) *@Group 273464 Java Protocol Buffers
7) 7284567 (89.4%) *@Group 96239 gl_bindings_autogen
8) 7374507 (90.5%) *@Group 89940 Metrics-related code
...
Command-line Tool for Symbol Size Database
>>> Print(canned_queries.CategorizeGenerated())
Showing 27 symbols (27 unique) with total pss: 8152217 bytes
Sizes: .text=5.89mb .rodata=570kb .data.rel.ro=387kb Index | Running Total | Section@Address | PSS | Path
------------------------------------------------------------
0) 1868914 (22.9%) *@Group 1868914 Blink (bindings)
1) 3718254 (45.6%) *@Group 1849340 Mojo
2) 5008602 (61.4%) *@Group 1290348 V8 Builtins
3) 6118639 (75.1%) *@Group 1110036 C++ Protocol Buffers
4) 6592262 (80.9%) *@Group 473623 DevTools
5) 6914864 (84.8%) *@Group 322601 Blink (Other)
6) 7188328 (88.2%) *@Group 273464 Java Protocol Buffers
7) 7284567 (89.4%) *@Group 96239 gl_bindings_autogen
8) 7374507 (90.5%) *@Group 89940 Metrics-related code
...
Max Size for Low End (64.6MiB)
Max Size for Low End (64.6MiB)
600KiB of growth each milestone
Max Size for Low End (64.6MiB)
600KiB of growth each milestone
Useful Size Links
Discussion: binary-size@chromium.org
APK Size Breakdowns:
https://storage.googleapis.com/chrome-supersize/index.html
Documentation:
//docs/speed/apk_size_regressions.md
�For Googlers:
Goma is not silver bullet
What made build slow?
Takuto Ikuta (tikuta@chromium.org)
Several 10k lines of .cc files (2019 Q1)
Decoupling some very large src files in v8 utilizes goma's parallelism
made build time of d8 (v8's shell) 1.4 times faster with goma (103s -> 71s)
Unnecessary build dependency (2018 Q2)
v8's code-stub-assembler.o
build trace of chrome, many tasks unnecessarily wait finish of v8's snapshot generation
Slow linker (2018 Q2)
daily compile step time of win7_chromium_rel_ng (aka win7-rel)
link.exe
⬇️
LLD
Slow process creation in ninja (2017 Q3)
From ninja v1.8.0, per process creation overhead was improved by using vfork.
| Per build task�process creation overhead | Total overhead for chrome�(36k build tasks) |
Ninja < v1.8.0 | 3.7ms | 133s |
Ninja >= v1.8.0 | 1ms | 36s |
Summary
Followings made/make build slow
We keep our effort to optimize build performance!
Remove Web Components v0 updates
BlinkOn 10 April 8, 2019
Yoichi Osato(yoichio@chromium.org)
What is Web Components v0?
They’re Chrome only APIs, no other browsers implement, to be ✞removed✞.
Project history
☠ was broken entirely. ☠
and the patch was reverted in a day. [1]
Still many usage in wild (comparing 2018 Q2)
Deprecation message has not inclined web authors even they’re google.
Plans
So many contributors! Thanks!!
chasej@, chrishtr@, dfreedm@, dpapad@, ebidel@, einbinder@, fukino@, groby@, hayato@, iclelland@, jochen@, kenjibaheux@, kochi@, koji@, kschaaf@, lucmult@, lunalu@, mmoss@, msychev@, mwp@, pfeldman@, rbyers@, rbpotter@, tkent@, yoshin@ and more!
We are burying them!
Language Server Protocol for mojom
No editor support for mojom files...
Write clients for each editor?
Mojom plugin
mojom-mode.el
Mojom extension
Language Server Protocol
The idea behind the Language Server Protocol is to generalize how editor/backend communicate, so a single server can be re-used in multiple editors
Language Server Protocol to share logic as much as possible
LSP Server
LSP Client
LSP Client
LSP Client
Mojom LSP
Emacs Demo
VSCode Demo
Chrome Status Summaries for Web Developers
Announcing: Blink Intent Process Crash Course
Yoav Weiss
Joe Medley
Proprietary + Confidential
Proprietary + Confidential
Proprietary + Confidential
Native support for AAT Fonts
Font Matching Improvements
AAT - State Machine
OpenType - GSUB Lookup Tables
html5-full-render on Mac
HarfBuzz AAT Speed-Up (over CoreText backend)
Thanks, @behdad, @ebraminio!
Font Matching Improvements
Family Matching
“Local Matching”
Resolving src: local(<name>)
Google Fonts on Android
Before | After |
Only Roboto Regular selectable for local-speedup ~12 Fonts | All pre-installed fonts precisely selectable ~240 Fonts |
Summary
RTCQuicTransport Web API
Seth Hampson
shampson@chromium.org
Motivation
Overview
File Transfer Demo :)
So, what’s next???
Future
Thanks!
What LUCI gives us?
What is LUCI?
Layered
Universal
Continuous
Integration
Lucy
Swarming
Buildbot is gone!
What is LUCI?
Micro services
before it was cool
Serverless
before it was cool
TL;DR: Scale, lots of it
Blink is a lot of tests
Chromium is a lotter of tests
14 years, per day
On 14 000 workers
Size of tests
binaries last year?
(compressed)
10TiB?
100TiB?
9.3PiB!
300 TiB of I/O per day
Compressed.
Secret sauce?
Reproducible environment
Key points
Users
… and others
Thanks!
Chromium Slack
Why?
Feedback?
If you don’t currently use Slack, but you would if:
Please talk to dcheng@chromium.org!
(๑>ᴗ<๑)
See you tomorrow!
(๑>ᴗ<๑)
*
*
*
*