[Buildroot] [RFC PATCH v2 30/30] package/libcef: Add v8 Snapshot option.

Michael Drake michael.drake at codethink.co.uk
Thu Oct 17 15:29:29 UTC 2019


Coauthored-by: Thomas Preston <thomas.preston at codethink.co.uk>
Cc: Patrick Glaser <pglaser at tesla.com>
Cc: Jon duSaint <jdusaint at tesla.com>
Cc: Enis Lavery <elavery at tesla.com>
Signed-off-by: Michael Drake <michael.drake at codethink.co.uk>
Signed-off-by: Thomas Preston <thomas.preston at codethink.co.uk>
---
 package/libcef/Config.in | 22 ++++++++++++++++++++++
 package/libcef/libcef.mk | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+)

diff --git a/package/libcef/Config.in b/package/libcef/Config.in
index c06fc094d3..9e0fa22ad5 100644
--- a/package/libcef/Config.in
+++ b/package/libcef/Config.in
@@ -69,6 +69,28 @@ config BR2_PACKAGE_LIBCEF_CEFCLIENT
 	help
 	  Enables libcef example application cefclient.
 
+config BR2_PACKAGE_LIBCEF_V8_SNAPSHOTS
+	bool "Enable v8 snapshots in libcef"
+	select BR2_PACKAGE_HOST_DBUS
+	select BR2_PACKAGE_HOST_FFMPEG
+	select BR2_PACKAGE_HOST_LIBVPX
+	select BR2_PACKAGE_HOST_LIBXCB
+	select BR2_PACKAGE_HOST_XCB_UTIL
+	select BR2_PACKAGE_HOST_XLIB_LIBXTST
+	help
+	  Enables V8 snapshots.  This is an optimisation for
+	  JavaScript context creation (e.g. opening new tabs).
+	  It avoids needing to execute a whole load of JavaScript
+	  code that gets run on context initialisation.
+	  It works by building a browser for the host, creating
+	  a JavaScript context, and saving the JavaScript heap
+	  to file.  The target browser can then load the recorded
+	  JavaScript heap from file, instead of executing the
+	  JavaScript code.
+	  Note that since this requires building a browser for
+	  the host, it requires a lot of extra host packages
+	  to be built.
+
 config BR2_PACKAGE_LIBCEF_WIDEVINE
 	bool "Enable Widevine support in libcef."
 	select BR2_PACKAGE_WIDEVINE
diff --git a/package/libcef/libcef.mk b/package/libcef/libcef.mk
index 0fa9c61315..63e2e3a767 100644
--- a/package/libcef/libcef.mk
+++ b/package/libcef/libcef.mk
@@ -210,6 +210,27 @@ else
 LIBCEF_GN_DEFINES += use_pulseaudio=false
 endif
 
+ifeq ($(BR2_PACKAGE_LIBCEF_V8_SNAPSHOTS),y)
+LIBCEF_GN_DEFINES += \
+	v8_snapshot_toolchain=\"//build/toolchain/linux/unbundle:host\" \
+	v8_use_snapshot=true
+LIBCEF_DEPENDENCIES += \
+	host-alsa-lib \
+	host-dbus \
+	host-ffmpeg \
+	host-libvpx \
+	host-libxcb \
+	host-xcb-util \
+	host-xlib_libXcomposite \
+	host-xlib_libXcursor \
+	host-xlib_libXrandr \
+	host-xlib_libXScrnSaver \
+	host-xlib_libXtst
+else
+LIBCEF_GN_DEFINES += \
+	v8_use_snapshot=false
+endif
+
 ifeq ($(BR2_PACKAGE_LIBCEF_WIDEVINE),y)
 LIBCEF_GN_DEFINES += enable_widevine=true
 LIBCEF_DEPENDENCIES += widevine
@@ -242,6 +263,17 @@ endef
 LIBCEF_POST_INSTALL_TARGET_HOOKS += LIBCEF_INSTALL_CEFCLIENT
 endif
 
+ifeq ($(BR2_PACKAGE_LIBCEF_V8_SNAPSHOTS),y)
+define LIBCEF_INSTALL_V8_SNAPSHOT_BINARIES
+	# v8 snapshot binaries
+	$(INSTALL) -m 0644 -D -t $(TARGET_DIR)/usr/lib \
+		$(@D)/$(LIBCEF_BUILD_OUTPUT_DIR)/natives_blob.bin \
+		$(@D)/$(LIBCEF_BUILD_OUTPUT_DIR)/snapshot_blob.bin \
+		$(@D)/$(LIBCEF_BUILD_OUTPUT_DIR)/v8_context_snapshot.bin
+endef
+LIBCEF_POST_INSTALL_TARGET_HOOKS += LIBCEF_INSTALL_V8_SNAPSHOT_BINARIES
+endif
+
 define LIBCEF_EXTRACT_CMDS
 	# Extract Chromium source code
 	tar -C $(@D) \
-- 
2.20.1



More information about the buildroot mailing list