Bonsoir ! WebRender’s seventeenth newsletter is here. The biggest highlight of this couple of weeks is without hesitation the landing of Jeff’s blob image invalidation work. Months of hard work went into what grew into a reimplementation of a decent portion of FrameLayerBuilder for blob images and will improve SVG rendering performance quite a bit in WebRender as soon as it will be enabled by default. See the first item in the list of Gecko changes for more details.

Notable WebRender changes

Glenn fixed a shadow clipping bug.

fschutt made compiling the debug render shaders optional to improve startup time.

Josh updated the freetype dependency.

Botond implemented taking backface-visibility into account during hit-testing.

Kvark improved the frame capture tool.

Martin fixed a border clipping issue.

Simon updated serde.

Glenn unified the text-shadow and blur filter implementation.

Glenn implemented handling box shadow stretch modes per-axis to avoid allocating huge render tasks for very long/thin elements.

Kvark prevented incorrectly reusing frame ids from previous frames in render tasks.

Glenn made mipmap generation optional (it can be very slow and it is on the critical path so we are better off downscaling on the image decoder side).

Nical fixed a bug causing elements to disappear under certain conditions.

Martin added hit-testing support in wrench.

fschutt sped up allocating images in wrench.

Nical removed an old scrolling workaround in wrench made unnecessary by the transaction API.

Sotaro fixed the way TEXTURE_RECT sampling is handled in the shader (important for some video code paths).

Glenn removed the brush line shader and converted line decorations to use clip sources (fixes some edge cases and improves batching).

Glenn implemented rendering text shadows in screen space.

TyOverby and Kats updated the bincode dependency.

Notable Gecko changes

Jeff landed blob image invalidation. This gives us the ability to do proper invalidation and layerization for inline SVG with blob images. For example, the animation on http://snapsvg.io/demos/#game can now run asynchronously. It also means that we further avoid some the performance problems that FrameLayerBuilder has (this site runs much better with blob invalidation, and this site as well for example).

Sotaro implemented presenting through direct composition in some cases.

Sotaro enabled skia-gl canvas on Mac.

Sotaro enabled D2D canvas on Windows.

Kats reduced the number of WebRenderScrollLayerData item created for transformed items (perf improvement) and fixed a followup bug.

Kats enabled more tests.

Sotaro fixed a rendering bug when ANGLE is disabled on Windows.

Andrew fixed an intermittent crash happening under memory pressure.

Martin fixed a hit-testing bug with fixed-position elements.

Jeff fixed a crash with zero-sized blob images.

Jeff fixed another crash.

Lee fixed a crash related to the memory management of fonts.

Kats disabled WebRender-side mipmap generation.

Kats disabled QR tests on beta since WebRender isn’t available there yet.

Kats ensured crash reports properly tell whether WebRender is enabled.

Nical improved the memory management of images.

Jeff avoided computing a scale for 3d-transformed elements. and fixed a followup bug.

Jeff fixed uninitialized app-units-per-dev-pixels scale factor.

Enabling WebRender in Firefox Nightly

In about:config, just set “gfx.webrender.all” to true and restart the browser. No need to toggle any other pref.

Note that WebRender can only be enabled in Firefox Nightly. We will make it possible to enable it on other release channels as soon as we consider it stable enough to reach a broader audience.

Reporting bugs

The best place to report bugs related to WebRender in Gecko is the Graphics :: WebRender component in bugzilla. It is possible to log in with a github account.