Greetings! Time for issue #13 of your favorite newsletter, where you can follow the progress of WebRender and its integration in Gecko. We are still busy fixing correctness issues (as you can see by the number of times the word “fixed” appears in the lists below), modulo Glenn’s usual big perf optimization.

If you are interested in looking inside of WebRender to understand how it works and/or debug it, check out Kvark’s latest blog post about the frame recording tool he just added to WebRender.

Notable WebRender changes

Glenn optimized box-shadow rendering using the primitive segment infrastructure (a big improvement on large primitives).

Kvark implemented (2, 3) a frame capture infrastructure which is great debugging tool, and wrote a blog post about it.

Nical fixed incorrect border radii with outset box shadows.

Kvark fixed a race-condition in the gpu cache data passed to the renderer.

Kats ensured hit-testing is computed on the most up to date scene.

Glenn fixed a number of small issues with the profiler.

Kvark fixed text UV clamping.

Glenn fixed anti-aliasing issues with border segments.

Glenn added the infrastructure for pre-rendering images to the render-task cache.

Glenn avoided re-rendering intermediate surfaces of a frame that has already been rendered.

Glenn fixed a race-condition when caching render tasks.

Ethan fixed a glitch caused by precision errors with zero-radius box shadows.

Nical converted the rest of the code to use the new transaction-based API and removed the old API.

Notable Gecko changes

Morris completed the support for bevel borders.

Lee implemented support for text writing modes.

Lee fixed tofu glyphs. Well, but of course this is a thing!

Kevin fixed a bug with text shaodw and clipping.

Ethan fixed an incorrect scale applied in nsDisplayZoom.

Lee prevented us from hitting a bad fallback path with widget backgrounds in some cases.

Sotaro fixed some crashes related to incompatible D3D resources when using native-gl.

Morris fixed missing outlines in some widgets.

Kats enabled more tests.

Kats fixed the way we handle stacking context offsets, which was causing issues with position-sticky.

Sotaro fixed a race-condition in the handling of video frames.

Sotaro prevented some over-invalidation of the display list when playing video.

Kats applied scrolling updates in transactions.

Sotaro fixed a crash.

Sotaro fixed a resource management issue happening during tab-switch.

Nical disabled WebRender for some window types, accidentally disabling it for the main window on Mac, and kats fixed it.

Lee fixed a memory leak.

Kats fixed another clipping issue.

Kats fixed some APZ testing issues.

Enabling WebRender in Firefox Nightly

In about:config:

– just set “gfx.webrender.all” to true.

Note that WebRender can only be enabled in Firefox Nightly.