Bonsoir! Another week, another newsletter. I stealthily published WebRender on crates.io this week. This doesn’t mean anything in terms of API stability and whatnot, but it makes it easier for people to use WebRender in their own rust projects. Many asked for it so there it is. Everyone is welcome to use it, find bugs, report them, submit fixes and improvements even!

In other news we are initiating a notable workflow change: WebRender patches will land directly in Firefox’s mozilla-central repository and a bot will automatically mirror them on github. This change mostly affects the gfx team. What it means for us is that testing webrender changes becomes a lot easier as we don’t have to manually import every single work in progress commit to test it against Firefox’s CI anymore. Also Kats won’t have to spend a considerable amount of his time porting WebRender changes to mozilla-central anymore.

We know that interacting with mozilla-central can be intimidating for external contributors so we’ll still accept pull requests on the github repository although instead of merging them from there, someone in the gfx team will import them in mozilla-central manually (which we already had to do for non-trivial patches to run them against CI before merging). So for anyone who doesn’t work everyday on WebRender this workflow change is pretty much cosmetic. You are still welcome to keep following and interacting with the github repository.

Notable WebRender and Gecko changes

Jeff fixed a recent regression that was causing blob images to be painted twice.

Kats the work to make the repository transition possible without losing any of the tools and testing we have in WebRender. He also set up the repository synchronization.

Kvark completed the clipping API saga.

Matt added some new telemetry for paint times, that take vsync into account.

Matt fixed a bug with a telemetry probe that was mixing content and UI paint times.

Andrew fixed an image flickering issue.

Andrew fixed a bug with image decode size and pixel snapping.

Lee fixed a crash in DWrite font rasterization.

Lee fixed a bug related to transforms and clips.

Emilio fixed a bug with clip path and nested clips.

Glenn fixed caching fixed position clips.

Glenn improved the cached tile eviction heuristics (2).

Glenn fixed an intermittent test failure.

Glenn fixed caching with opacity bindings that are values.

Glenn avoided caching tiles that always change.

Glenn fixed a cache eviction issue.

Glenn added a debugging overlay for picture caching.

Nical reduced the overdraw when rendering dashed corners, which was causing freezes in extreme cases.

Nical added the possibility to run wrench/scripts/headless.py (which lets us run CI under os-mesa) inside gdb, cgdb, rust-gdb and rr both with release and debug builds (see Debugging WebRender on wiki for more info about how to set this up).

Nical fixed a blob image key leak.

Sotaro fixed the timing of async animation deletion which addressed bug 1497852 and bug 1505363.

Sotaro fixed a cache invalidation issue when the number of blob rasterization requests hits the per-transaction limit.

Doug cleaned up WebRenderLayaerManager’s state management.

Doug fixed a lot of issues in WebRender when using multiple documents at the same time.

Ongoing work

The team keeps going through the remaining blockers (19 P2 bugs and 34 P3 bugs at the time of writing).

Enabling WebRender in Firefox Nightly

In about:config, set the pref “gfx.webrender.all” to true and restart the browser.

Reporting bugs

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

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