Bonjour everyone! Here comes the twenty third installment of WebRender’s very best newsletter. This time I’m trying something a bit different. Instead of going through each pull request and bugzilla entry that landed since the last post, I’m only sourcing information from the team’s weekly meeting. As a result only the most important items make it to the list and not all items have links to their bug or pull request. Doing this allows me to spend considerably less time preparing the newsletter and will hopefully help with publishing it more often.

Last time I mentioned WebRender being enabled on nightly by default for a small subset of the users, focusing on nVidia desktop GPUs on Windows 10. I’m happy to report that we didn’t set our nightly user population on fire and that WebRender is still enabled in these configurations (as expected, sure, but with a project as large and ambitious as WebRender it isn’t something that could be taken for granted). The choice of this particular configuration of hardware and driver led to a lot of speculation online, so I just want clarify a few things. We did not strike any deal with nVidia. nVidia didn’t send engineers to help us get WebRender to work on their hardware first. No politics, I promise. We learnt from past mistakes and chose to target a small population of Firefox users at first specifically because it is small. Each combination of OS/Vendor/driver exposes its own set of bugs and a progressive and targeted rollout means we’ll be better equipped to react in a timely manner to incoming bugs than we have been with past projects.

Worry not, the end game is for WebRender to be Firefox’s rendering engine for everyone. Until then, are welcome to enable WebRender manually if your OS, hardware or driver isn’t in the initial target.

Notable changes in WebRender and Gecko

Bobby improved the memory reporting infrastructure for WebRender.

Bobby improved memory usage by better managing the lifetime of the render target pool items.

Bobby fixed a crash with clip masks.

Jeff Improved the performance of blob image rasterization.

Chris Fixed some pixels snapping issues.

Kvark Fixed a 3D transform rendering bug and redacted his investigation in the form of a tutorial. It’s a a very entertaining read!

Kvark brought back the use of texelFecth in vertex shaders.

Matt improved the performance of the scene building phase by pre-allocating memory.

Andrew avoided rasterizing vector images many times at similar sizes which caused performance issues on some pages.

Andrew improved the memory reporting of shared surfaces.

Andrew improved memory usage by unmapping the remaining shared surfaces of a pipeline when the latter is removed.

Lee finished implementing font variations for Windows.

Glenn improved gradient rendering performance.

Glenn introduced an interning data structure which will help with caching more resources across display lists.

Glenn improved the performance of clipping when scaling transformations are involved.

Glenn fixed some crashes.

Nical avoided building the frame twice each time a scene is built.

Nical prevented background tabs from blocking the UI in some cases.

Nical integrated the tab switching mechanism with WebRender.

Nical fixed a race condition between blob image rasterization and texture uploads.

Nical fixed some crashes.

Sotaro fixed incorrect ordering of transactions for video frames.

Markus assisted various people with investigating and fixing WebRender bugs.

Jean-Yves added support for 10/12 buts YUV images.

Patrick fixed some artifacts caused by the way we down-scale when blurring.

Emilio fixed a bug with border caching.

Emilio fixed a bug related to snapping and clips.

Enabling WebRender in Firefox Nightly

In about:config set “gfx.webrender.all” to true,

restart Firefox.

Reporting bugs

The best place to report bugs related to WebRender in Gecko is the Graphics :: WebRender component in bugzilla.

Note that it is possible to log in with a github account.