Chromium Embedded Framework
Integration
Presented by
Zoltan Kuscsik, PhD
Contact: [email protected]
Date
July 2015
●Linaro is #3 company contributor Top Linux Contributors by Company: Kernels 3.11-3.18
●Kernel
. maintainers from Linaro 1 None 11,968 (12.4%)
○Coresight framework
2 Intel 10,108 (10.5%)
○Backlight Class
○Clocksource and Clocksource Core 3 Red Hat 8,078 (8.4%)
○CPU Frequency drivers
○CPU Idle drivers 4 Linaro 5,415 (5.6%)
○ARM big.LITTLE
5 Samsung 4,290 (4.4%)
○DMA Buffer sharing framework
○Generic PM domain 6 Unknown 3,842 (4.0%)
○GPIO Subsystem
○KVM for ARM and ARM64 7 IBM 3,081 (3.2%)
○Multifunction devices (MFD)
8 SUSE 2,980 (3.0%)
○MMC/SD/SDIO Subsystem
○Open firmware and flattened device tree 9 Consultants 2,451 (2.5%)
○Pin control subsystem
10 TI 2,269 (2.4%)
Source: https://www.kernel.org/doc/linux/MAINTAINERS `
Linaro Home Group
● Linux Kernel Upstreaming
● LSK - Linaro Stable Kernel
● Energy Aware Scheduling
● Open Portable TEE
● LHG - Digital Home Group
● LMG - Mobile Group
● LCG - Community Board Group
● LAVA - Linaro Automated
Validation Architecture
● Landing Team and Premium
Services
Linaro Home Group
.
HTML5 on Embedded Linux
.
Hot topics:
● How to embed a browser into native applications?
○ CEF, WebKit, QtWebengine, Opera, Android WebView (Chromium).
● HW accelerated video playback.
○ Everyone has a hack for this.
● Encrypted Media Extensions
○ Adding DRM to the video playback hack
Why Chromium?
.
● It has GPU accelerated rendering.
● Uncertain future of WebKit.
● Various abstraction layers, plugin support: Ozone, Wayland
support, PPAPI and NaCL.
● Sandboxing support
Chromium internals
. Blink - is the layout engine of Chromium based on webkit.
Content Module - is the code base that enables to render a page using
Blink. It includes all the HTML5 platform features, GPU acceleration.
Content Shell - simple browser implementation on the top of the Content
API
Aura - Is the newly introduced window manager in Chromium. Historically,
the Content Module was directly depending on the GTK2 and Windows
HWND.
Ozone - is an abstraction layer for input events and graphics below the
Aura window manager. Its purpose is to abstract away the OS specific
windowing systems..
Chromium/CEF on ARM/Linux based Set-Top-Boxes
Gstreamer
interface using
a PPAPI plugin
Adding DMABuf / DRM
support without the need
of interfacing GBM/Mesa
Chromium Embedded Framework
.
Small library wrapping the chromium into a library libcef.
Native
Application
- Allows embedding browser window into third party applications.
The goal is to provide a stable API on the changing Content API.
- Enables native JavaScript CEF extensions. LibCEF
Upstream CEF supports only X86 builds with GTK/X11 backends.
We added support for ARM, Aura based window system and Ozone
interfaces: Content API
https://github.com/OSSystems/meta-browser
https://github.com/kuscsik/chromiumembedded
Graphics/Input system hardware abstraction: Ozone
● Better support for out-of-tree Chromium sub-projects.
● Support for hardware overlay based view composition!!!
● Provides abstract interfaces Platform Window, Cursor and Surfaces.
Running chromium with a selected Ozone implementation:
# ./chromium --ozone-platform=egl
Ozone implementations: x11-egl, DRM (Mesa/GBM), Wayland, Fullscreen EGL
(Linaro), test (png output), caca (text based).
GPU acceleration
● Requires EGL extensions for Fence sync
● Various workarounds in the Chromium tree for different embedded GPUs.
● Fallback to CPU based rendering if startup GPU test fails.
● Improves the speed of CSS2 animations - able to get around 40FPS for full
screen animations at 1080p on a set-top-box.
No dedicated benchmark to measure improvements. Benchmarks are
focusing are mostly exercising CPU based rendering and arithmetic
operations.
Building Chromium using OE/Yocto
● OE recipes are provided by meta-browser:
https://github.com/OSSystems/meta-browser
The layer OE layer depends on openembedded-core and meta-openembedded
available from http://git.openembedded.org/.
meta-browser supports X11 or Wayland enabled OE builds and x86, x86-64,
ARMv6, ARMv7 targets.
Video playback
FFMPEG - works on all platforms, but SW decoding
is not an option on Linux embedded systems.
VAAPI - GPU accelerated video playback. Compile
time option, not enabled in Chrome builds.
PPAPI - Video playback using a PPAPI plugin
Linaro PPAPI/Gstreamer
● Rationale - concerns about the performance of non-tunneled video playback
and lack of secure video data path.
● Using hole punching - chromium MUST be launched on fullscreen.
● The approach works only with sandboxing disabled.
Wayland - Ozone Composition
Demo time
Chromium - overlay support
GPU
HW Overlay SoC’s compositor.
Blink Overlay
1
DRM/KMS (Linux)
Chromium System HWC (Android)
Compositor Compositor
HW Overlay
Blink Overlay Composit
Display
2 or HW
Video Video Layer
Overlay