Today, we've started an origin trial for the Privacy Sandbox ads relevance and measurement proposals (Topics, FLEDGE and Attribution Reporting APIs) for a limited number of Chrome Beta users. Developers can register and begin to set up their origin trial tests. We will continue to provide regular updates as the origin trial progresses.
***
We’re excited to share that Chrome is starting the next stage of testing for the Privacy Sandbox ads relevance and measurement proposals.
Starting today, developers can begin testing globally the Topics, FLEDGE, and Attribution Reporting APIs in the Canary version of Chrome. We’ll progress to a limited number of Chrome Beta users as soon as possible. Once things are working smoothly in Beta, we’ll make API testing available in the stable version of Chrome to expand testing to more Chrome users.
We recognize that developers will need some time to use the APIs, validate the data flows, and measure performance. We are looking forward to companies providing feedback as they move through the different testing phases, which will allow us to continually improve the APIs. Once we’re confident that the APIs are working as designed, we’ll make them broadly available in Chrome, allowing more developers to integrate, evaluate and provide feedback as we continue to optimize them for their use cases.
Developers can expect support from Chrome in the form of developer guidance, regular updates, and a range of feedback and engagement channels. We strongly encourage developers to share feedback publicly and with Chrome, and we’ll closely monitor progress along the way. We also welcome the role industry associations can play in this process, from facilitating collaborative industry tests to aggregating feedback themes.
Chrome will also begin testing updated Privacy Sandbox settings and controls that allow users to see and manage the interests associated with them, or turn off the trials entirely.
Caption: Chrome will be testing updated Privacy Sandbox settings and controls.
The Privacy Sandbox proposals have already benefited substantially from the thoughtful feedback of early testers, and we’re eager to open up testing for more of our proposals. We’ll continue to gather feedback from the ecosystem and to engage with regulators globally, including through our work with the UK’s Competition and Markets Authority in line with our commitments for the Privacy Sandbox on the web. If you’re interested in learning more about the APIs and how you can participate, please see our detailed developer guidance.
Posted by Vinay Goel, Product Director, Privacy Sandbox, Chrome
Last week we released a blog post about our improvements in Chrome speed over the past year culminating with the M99 release of Chrome. We wanted to follow up by going in depth on how we achieved this milestone in browser performance.
Since the launch of Chrome in 2008, one of our core principles has been to build the fastest browser, whether you're on your phone or laptop. We have never strayed from our performance mission, and are always analyzing and optimizing every part of Chrome. We're proud to announce that Chrome scores over 300 on Apple’s Speedometer 2.0 benchmark suite on the M1 MacBook, the highest score we’ve ever seen. In this The Fast and the Curious post we'll go behind the scenes to share all the work that went into making Chrome blazingly fast.
“If you can’t measure it you can’t improve it” – this sentiment has driven a large part of our work to improve Chrome’s performance since the early days. For measuring browser performance, there has been a long history of various benchmarks that aim to provide test workloads for browsers to track their performance. Making these benchmarks both reflective of the real and ever changing world, while also being consistent, is a challenge. Chrome uses a combination of internal benchmarking infrastructure and public, industry-standard benchmarks, to continuously measure Chrome’s performance. For comparing browsers’ JavaScript performance, Apple’s Speedometer 2.0 benchmark is the most reflective of the real world, and most broadly used today.
We’ve been tracking our performance on Speedometer 2.0 ever since it came out:
Beginning with the M87 release, Chrome shipped on the M1 based Mac and began measuring the speed of Chrome on the new CPU reflected in the red line above.
Since 2015, we’ve been measuring Chrome’s Speedometer scores on a 13-inch MacBook. In the graph above, you can see just some of the many projects that have helped make a dramatic improvement in performance. You can learn about fast lookups, the Ignition + TurboFan compilers, blazingly fast parsing, faster JS calls, Spectre, Pointer Compression, Short builtins, Sparkplug and much more on V8.dev. You’ll notice some projects actually decrease our Speedometer score, as building an entire browser is about managing trade offs. For example, with pointer compression, we were willing to take a small performance hit for the large memory savings it provided. Similarly, when the Spectre CPU exploit hit, we traded off performance to help guarantee the safety of our users.
The result of years of work has been an 83% improvement in Speedometer score, a dramatic improvement we are happy to deliver to our users. With Apple’s introduction of the M1 CPU, combined with Sparkplug and LTO+PGO, Chrome now scores over 300 - the highest score any browser has ever achieved \o/.
We are excited to achieve this milestone in performance and look forward to delivering even more performance improvements with each release. Stay tuned to this blog to stay up to date on all things speed.
Posted by Thomas Nattestad, Chrome Product Manager
Footnote:Data source for M1 MacBook statistics: Speedometer 2.0 comparing Chrome 99.0.4812.0 --enable-features=CanvasOopRasterization --use-cmd-decoder=passthrough vs. Safari 15.2 17612.3.6.1.6 on a MacBook Pro (14", 2021), Apple M1 Max, 10 cores (8 performance, 2 efficiency), 32 GPU cores, 64gb device.
Everyday, billions of people around the world turn to Chrome to get things done quickly on their devices, whether shopping for a new pair of headphones or pulling together a sales report for work. Nothing is more frustrating than having a slow experience while browsing the web. That’s why Chrome has always been focused on building the fastest possible browser since its launch in 2008, without compromising on feature functionality or security. In our first The Fast and the Curious post of 2022, we are thrilled to celebrate how in the M99 release of Chrome we were able to substantially increase the speed of Chrome across all major platforms.
We go deep on every platform where Chrome runs to provide the fastest possible experience. We’re excited to announce that in M99, Chrome on Mac has achieved the highest score to date of any browser – 300 – in Apple’s Speedometer browser responsiveness benchmark.
Building on many performance changes over the last year, we enabled ThinLTO in M99, a build optimization technique that inlines speed-critical parts of the code base, even when they span multiple files or libraries. The result? An additional across-the-board speed bump that makes Chrome 7% faster than current builds of Safari. Combined with recent graphics optimizations (namely, pass-through decoder and out-of-process rasterization), our tests have also shown Chrome’s graphics performance to be 15% faster than Safari. Overall, since launching Chrome on M1-based Macs in late 2020, Chrome is now 43% faster than it was just 17 months ago!
Two of the other recent major contributors to Chrome’s speed are the V8 Sparkplug compiler and short builtin calls. Sparkplug is a new mid-tier JavaScript compiler for V8 that generates efficient code with low compilation overhead. Short builtin calls are used by the V8 JavaScript engine to optimize the placement of generated code inside the device’s memory. This technique boosts performance by avoiding indirect jumps when calling functions and makes a substantial difference on Apple M1-based Macs.
Chrome continues to get faster on Android as well. Loading a page now takes 15% less time, thanks to prioritizing critical navigation moments on the browser user interface thread. Last year we also reduced startup time for Chrome on Android by 13% using Freeze-Dried Tabs. This approach conserves resources across the board by using a lightweight version of tabs on load, while the actual tab loads in the background. Finally, we were able to improve speed and memory usage using Isolated Splits, which improved startup time by preloading the majority of the browser process code on a background thread.
We know that benchmarks are just one of many ways of measuring the speed of a browser. At the end of the day, what matters most is that Chrome is actually faster and more efficient in everyday usage, so we’ll continue to invest in innovative performance improvements that push the envelope of what’s possible in modern computing.
Posted by Max Christoff, Senior Director, Chrome Engineering
Data source for Mac statistics: Speedometer 2.0 comparing Chrome 99.0.4812.0 --enable-features=CanvasOopRasterization --use-cmd-decoder=passthrough vs. Safari 15.2 17612.3.6.1.6 on a MacBook Pro (14", 2021), Apple M1 Max, 10 cores (8 performance, 2 efficiency), 32 GPU cores, 64gb device connected to power.
Data source for Android statistics: Real-world data anonymously aggregated from Chrome clients.
This version of Chrome introduces the origin trials described below. Origin trials allow you to try new features and give feedback on usability, practicality, and effectiveness to the web standards community. To register for any of the origin trials currently supported in Chrome, including the ones described below, visit the Chrome Origin Trials dashboard. To learn more about origin trials in Chrome, visit the Origin Trials Guide for Web Developers. Microsoft Edge runs its own origin trials separate from Chrome. To learn more, see the Microsoft Edge Origin Trials Developer Console.
Continuing Origin Trials
The following origin trial is being extended to the listed version.
Media Source Extensions in Workers
Chrome is continuing an origin trial for making the Media Source Extensions (MSE) API available from dedicated workers. This feature improves performance when buffering playing media in an HTMLMediaElement on the main Window. By creating a MediaSource object in a dedicated worker, an application may then create an ObjectURL for it and call postMessage() to pass that URL to the main thread for attaching to an HTMLMediaElement. The context that created the MediaSource object may then use it to buffer media. Web authors have consistently requested that MSE be available from Worker contexts. This extended origin trial is expected to end in Chrome 103, in late July 2022.
Completed Origin Trials
The following feature, previously in a Chrome origin trial, is now enabled by default.
Digital Goods API
Chrome now provides an API for querying and managing digital products to facilitate in-app purchases from web applications. The new API works with the Payment Request API, which is used for the actual purchases. The API can be linked to a digital distribution service connected through the user agent. In Chromium, this is specifically a web API wrapper around the Android Play Billing API.
This API lets web apps in the Play Store accept purchases for digital goods. (Play policies prevent them from accepting payment via any other method.) Without this, websites that sell digital goods are not installable through the Play Store.
Chrome now throws an AbortSignal object's reason if the signal is aborted. This convenience method allows signal-handling functions to check a signal's abort status and propagate the abort reason. For example, it could be called after asynchronous operations that might change a signal's state.
Abort signal handling functions often need to check the signal's status and propagate the error if the signal has been aborted. This provides a convenient and consistent way to do this. An example is already available on MDN.
Capability Delegation
Capability delegation means allowing a frame to relinquish its ability to call a restricted API and transfer that ability to a (sub) frame it trusts. If an app wants to delegate its ability to call a restricted JavaScript feature (for example, popups, or fullscreen) to a known and trusted third-party frame, this API allows it to transfer this ability to the target frame for a specified period. This is in contrast to static mechanisms such as an iframe's allow attributes.
Many merchant websites host their online store on their own domain but outsource the payment collection and processing infrastructure to a payment service provider (PSP) to comply with security and regulatory complexities around card payments. This workflow is implemented as a "pay" button inside the top (merchant) frame where it can blend better with the rest of the merchant's website, and payment request code inside a cross-origin iframe from the PSP. The Payment Request API used by the PSP code is gated by transient user activation (to prevent malicious attempts like unattended or repeated payment requests). Because the top (merchant) frame's user interaction is not visible to the iframe, the PSP code needs to delegate in response to a click in the top frame before it can start payment processing.
HIDDevice forget()
The HIDDeviceforget() method allows web developers to voluntarily revoke a permission to an HIDDevice that was granted by a user. Some sites may not be interested in retaining long-term permissions to access HID devices. For example, for an educational web application used on a shared computer with many devices, a large number of accumulated user-generated permissions creates a poor user experience.
In addition to user agent mitigations to avoid this problem, such as defaulting to a session scoped permission on the first request or expiring infrequently used permissions, it should be possible for the site itself to clean up user-generated permissions it no longer needs.
mix-blend-mode: "plus-lighter"
The mix-blend-mode property now supports the "plus-lighter" value, which adds the source and destination colors multiplied by their respective alphas. This operation is useful when crossfading between two elements that contain common pixels. In that case, "plus-lighter" ensures that the common pixels do not change in appearance as opacity changes from 0 to 1 on one element and from 1 to 0 on the other.
Sec-CH-UA-WoW64 Client Hint
This hint serves solely as a backwards compatible shim for sites relying on "WoW64-ness" (32-bit apps running in 64-bit Windows) as they transition from the User-Agent string to UA-CH. It returns a boolean value.
SerialPort Integration with WritableStream Controller's Abort Signal
When using WritableStream, serial ports can now be closed without waiting for all write operations to finish. If the port is waiting for the peer device to provide a flow control signal it could be blocked indefinitely. The intent of aborting a WritableStream is to immediately stop writing data to the underlying sink.
TLS ALPN Extension in wss-schemed WebSockets Connections
The TLS ALPN extension is now included when initiating a new connection for wss-schemed WebSockets, offering just the default "http/1.1" protocol. Currently, unlike HTTPS connections, such connections do not offer ALPN at all. Changing this aligns with Firefox and Safari, hardens against cross-protocol attacks (ALPACA, for example), and makes wss eligible for the false start optimization. It also simplifies work on the HTTPS DNS record.
In WebTransport, the serverCertificateHashes option allows a website to connect to a web transport server by authenticating the certificate against the expected certificate hash instead of using the Web public key infrastructure (PKI).
This feature allows Web developers to connect to WebTransport servers that would normally find obtaining a publicly trusted certificate challenging, such as hosts that are not publically routable, or virtual machines that are ephemeral in nature.