Hi there, your 12th WebRender newsletter has arrived. As I mentioned in the previous newsletter, the biggest theme in the last two weeks has been fixing correctness bugs and adding missing features. I keep learning new and scary things about text while Lee digs up more and more features that we need to add support for.

If you are testing on Windows and WebRender makes rendering flicker horribly, worry not Kvark has landed a fix in WebRender that will make it in nightly soon.

Notable WebRender changes

Glenn is making progress (1),(2) in the conversion to segmented primitives which lets us move more content to the opaque pass and improves batching.

Glenn removed the need to re-build the scene when a dynamic property changes. This saves a lot of CPU time during scrolling and animations.

Glenn added support for caching render tasks across frames and display lists, and added support for it in box shadows. This nice because it will let us avoid re-doing some of the same potentially expensive things every frame (like blurs).

Morris fixed a drop-shadow rendering issues (#2243 and #2261).

Lee fixed/implemented various text rendering features (1) (2).

Kvark fixed edge mask decoding in the shaders.

Martin fixed/improved the clipping logic (1) (2) (3).

Nical added the concept of transactions to the API (allows us to express certain constraints important for correctness and avoid redundant work).

Ethan fixed some glitches when box-shadow parameters are close to zero.

Glenn switched travis off for mac builds, we are now using taskcluster. Travis is great but it couldn’t sustain the load on Mac. Testing turnaround times are going to be much better now!

Kats resurrected support for non-premultiplied images (We need it for canvas).

Glenn ported line primitives to the brush infrastructure.

Martin implemented a more expressive API for clipping.

Ethan fixed a glitch when mixing edges with and without borders.

Lee implemented support for glyph transforms for writing modes.

Markus fixed a bug in the calculation of corner radius overlap.

Ethan fixed a bug in with inset box-shadow offsets.

Glenn moved alpha targets from using the A8 format to R8 on all platforms which avoids slow paths on ANGLE and some drivers.

Notable Gecko changes

Lee implemented the plumbing for synthetic italic.

Nical updated the gecko integration to use the transaction API and take advantage of it.

Nical implemented a simple shared memory recycling scheme for blob images and fonts (improves the performance of display list building).

Gankro fixed sub-pixel aa for some bullet display items.

Andrew fixed a bug causing images to disappear after dragging a tab to a different window.

Kats sped up display list building by removing duplicated work for adjacent items with equivalent clip chains.

Ethan fixed a text rendering issue.

Milan added the “gfx.webrender.all” pref to simplify enabling the most up to date WebRender prefs on all platforms.

Sotaro fixed a memory leak and a lot of smaller things (too many for me to link them here).

Vincent and Jerry fixed a bug with video on unfocused tabs freezing.

Enabling WebRender in Firefox Nightly

In about:config:

– just set “gfx.webrender.all” to true (no other prefs needed anymore \o/)

Note that WebRender can only be enabled in Firefox Nightly.