WebRender newsletter #14

Your favorite WebRender newsletter is ready. TL;DR: “fixed […], fixed […], fixed […], Glenn makes things even faster, fixed […], ad-lib”. Still mostly focusing on conformance and stability, although there is some performance work in progress as well.

Without further ado:

Notable WebRender changes

  • Glenn impemented mip-mapping to get high quality down-sampling of large images.
  • Marting cleaned some code up.
  • Martin made some changes to how clip ids are assigned in order to make it possible to reduce the amount of hashing we do and improve performance.
  • Glenn wrote the initial implementation of an image brush shader which allows us to segment some images and improve performance in common cases (when there’s no tiling, spacing and repetition).
  • Lee improved the precision of text shadow with sub-pixel anti-aliasing.
  • Martin improved something about how hit testing and clipping interact (I don’t quite understand the ins and outs of this but it fixed a hit testing issue).
  • Glenn avoided requesting images from the texture cache if they are already present in the pre-render cache (saves wasted work and memory).
  • Kats fixed an issue in the yaml serializer.
  • Lee implemented passing variation dictionaries on CTF font creation.
  • Kvark updated wrench and the sample apps to use an up to date version of glutin instead of an old fork.
  • Glenn implemented partial rendering of off-screen pictures and render tasks.
  • Glenn fixed z-ordering of transformed content inside preserve-3d contexts.
  • Martin made hit testing consistent between frames.
  • Kats avoided rendering frames that are generated only for hit testing.
  • Nical implemented tracking removed pipelines to facilitate managing externally owned memory.
  • eeejay implemented color matrix filters, useful for accessibility and SVG color matrix filters.

Notable Gecko changes

  • Jeff and Gankro enabled blob images by default.
  • Kats enabled WebRender hit testing by default, and it fixed a whole lot of bugs.
  • Lee worked around a sub-pixel glyph positioning issue.
  • Sotaro fixed an issue with windowed plugins such as flash.
  • Sotaro tweaked the swap chain type on Windows, and then fixed an issue with this specific configuration not allowing us to do a graceful compositor fallback when the driver fails.
  • Heftig fixed some text being rendered with the wrong metrics with some OpenType font collections by making sure we pass the proper face index to WebRender.
  • Jamie removed a limitation on the size of recording DrawTargets we use with blob images.
  • Gankro fixed a very bad rendering corruption by ensuring we make the right context current before rendering.
  • Andrew improved the way shared memory is handled to avoid creating many file descriptors (and void running into the limit).
  • Kats fixed a deadlock in the APZ code.
  • Kvark fixed a crash with the capture debugging tool, and another one.
  • Kvark automated including WebRender’s revision hash in the generated captures.
  • Kats fixed an assertion happening when transaction ids don’t increase monotonically (can happen when we reuse a pres context from the back-forward cache).
  • Martin fixed a bug in the way scroll ids are assigned and handled when building the display list for the root scroll frame.
  • Emilio fixed a memory leak.
  • Kats fixed an issue in the frame throttling logic which was messing with hit-testing.
  • Kats auditted the reftests and marked new tests as passing.
  • Lee ensured the ClearType usage setting isn’t ignored when WebRender is enabled.
  • Sotaro fixed a memory leak.

Enabling WebRender in Firefox Nightly

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

Note that WebRender can only be enabled in Firefox Nightly.

19 thoughts on “WebRender newsletter #14

    1. Thanks! We are hoping to enable it in Firefox nightly 63 or 64, for a very limited set of users (a combination of OS/hardware/drivers that represents about 4% of Firefox’s user base) to start with. And then progressively enable WebRender by default for more configurations.

  1. Last time I tried WebRender (a couple of newsletters ago), watching YouTube caused Firefox’s memory-usage to balloon to ridiculous levels; I assume some kind of cache of rendered frames wasn’t expecting to deal with 60 full screen repaints a second. Is (was) that a known issue?

    1. I think that this one is known and was a memory leak that just got fixed. Not related to caching, but rather the complicated way we deal with WebRender using memory that is owned by gecko on multiple threads (and how gecko gets notified when the memory is safe to destroy).

      1. So the goal is for it to be enabled by default in Beta 64. And when will webrender be included in beta?
        Thanks!

  2. I have no problem using gfx.webrender.all on my Firefox Nightly 60 64 bit on my laptop. But my android is another story.
    I use Firefox Nightly on my laptop and on my android. And I have been using on my Firefox Nightly android long before it was on the google play store. Starting on 2/14/2018 and still on going my android only crashes and I can’t get to about:config so I can disable gfx.webrender.all
    Thank You

    1. I don’t think it’s a problem with WebRender that Firefox is crashing on Android. I’m still able to go to about:support and according to that page WebRender is still not available on Firefox for Android.

      1. Thank you I did hit it an are right they did fix it. It took 3days and it is fixed. Again thank you

    2. We haven’t been testing WebRender with Firefox for android much so far (as far as I know), so I wouldn’t be surprised that things don’t work very well there, and I wouldn’t recommend enabling WebRender on this platform for the moment. We’ll work on getting WebRender to work well on android after we have shipped and stabilized things on the desktop.

Leave a comment