Newsletter number twenty is here, delayed again by a combination of days off and the bi-annual Mozilla AllHands which took place last week in San Francisco.

A big highlight in the WebRender side is the work on porting all primitives to the brush system approaching completion. Individually, porting each primitive doesn’t sound like much but with all of the pieces coming together:

Most complex primitives can be segmented, moving a lot of pixels to the opaque pass and using intermediate targets to render the tricky parts.

The majority of the alpha pass is now using the brush image shader which greatly improves batching. We generate about 2 to 3 times less draw calls on average now than a month ago.

This translates into noticeable performance imporvements on a lot of very complex pages. The most outstanding remaining performance issues are now caused by the CPU fallback which we are working on moving off of the critical path, so things are looking very promiscing especially with the mountain of other performance improvements we are currently holding off on to concentrate on correctness.

Speaking of fixing correctness issues, as usual we can see from the lists below that there is also a lot of progress in this area.

Notable WebRender changes

Kvark fixed an issue with invalid local rect indices.

Hugh Gallagher merged the ResourceUpdates and Transaction types.

Lee implemented rounding off sub-pixel offsets coming from scroll origins.

Kvark fixed a bug in the tracking of image dirty rects.

Glenn ported inset/outset border styles to brush shaders.

Kvark fixed an issue with document placement and scissoring.

Kvark added a way to track display items when debugging.

Glenn ported double, groove and ridge broders to the brush shader system.

Patrick fixed a crash with pathfinder.

Martin improved the API for adding reference frames.

Kats fixed a crash with blob images.

Gankro fixed a cache collision bug.

Glenn ported dots and dashes to the brush shader infrastructure.

Glenn fixed the invalidation of drop shadows when the local rect is animating.

Glenn removed empty batches to avoid empty draw calls and batch breaks.

Kats moved building the hit-test tree to the scene building phase.

Marting improved the clipping documentation.

Glenn removed the transform variant of the text shader.

Lee fixed support for arbitrarily large font sizes.

Glenn fixed box shadows when the inner mask has invalid size.

Glenn fixed a crash with zero-sized borders.

Nical added a debug indicator showing when rendering happens.

Notable Gecko changes

Sotaro enabled DirectComposition to present the window.

Sotaro fixed an issue with device resets on Windows.

Kats enabled a lot of tests and benchmark on the CI (spread over many bugzilla entries).

Kats improved a synchronization mechanism between the content process and WebRender.

Sotaro implemented a shader cache to improve startup times.

Kats improved hit-testing correctness with respect to touch action.

Kats fixed a bug related to position-sticky.

Jeff fixed the invalidation of blob images with changing transforms.

Lee fixed an issue with very large text.

Sotaro improved the way we reset the EGL state.

Kats fixed some async scene building bugs.

Kats avoided a crash with iframes referring to missing pipelines.

Kats prevented blob images from allocaitng huge surfaces.

Kats fixed a shutdown issue.

Jeff fixed some issue with fractional transforms and blob images.

Bob Owen improved the way memory is allocated when recording blob images.

Kats fixed a race condition with async image pipelines and display list flattening.

Kats fixed an APZ issue that affected youtube.

Kats fixed an issue causing delayed canvas updates under certain conditions.

Kats fixed some hit testing issues.

Sotaro fixed a startup issue when WebRender initialization fails.

Markus removed a needless blob image fallback caused by invisible outlines which was causing performance issues.

Kats fixed a crash.

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.

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.