Graphics Team ships WebRender MVP!

After many months of hard work and preparation, I’m pleased to announce the general availability of WebRender for selected Windows 10 devices. WebRender is a major rewrite of the Firefox rendering architecture using the same kind of GPU-based acceleration techniques used by games.

Until now, our browser rendering pipeline varied depending on the platform and OS. This has a number of drawbacks:

  • In some of those variations, rendering happens on the main CPU, which consumes resources that could otherwise be used to run the rest of the browser.
  • It is costly in terms of time and overhead to maintain and support multiple backends.

WebRender replaces this with a modern, unified architecture which consists of two major elements:

  • The representation of the page in the compositor is no longer a set of rasterized layers, but now an unrasterized display list.
  • The compositing and rasterization steps have been joined into a single GPU-powered rendering step.

For more details, refer to Lin Clark’s excellent Hacks article.

This design provides very fast throughput and eliminates the need for complicated heuristics to guess which parts of the website might change in future frames. Moreover, a single backend that we control means bringing hardware acceleration to more of our users: we run the same code across Windows, Mac, Linux, and Android, and we’re much better-equipped to work around driver bugs and avoid blacklisting. It also moves GPU work out of the content process which will let us have stricter sandboxing in the content process.

We’ve seen significant performance improvements on many websites already, but we’ve only scratched the surface of what’s possible with this architecture. Expect to see even more performance improvements as we begin to take full advantage of our architectural investment in WebRender.

Release Schedule

Since WebRender was quite a large undertaking, we decided to split up the release across a number of smaller targets. The aim of today’s release is to ship a WebRender MVP (minimum viable product) to one target; we plan to learn from that, and then gradually ship WebRender to additional platforms. This release of Firefox 67 will see us roll-out WebRender to users running Windows 10 on desktop machines with NVIDIA graphics cards. This currently represents approximately 4% of Firefox’s desktop population.

The go-live date for Firefox 67 is Tuesday, May 21st at 6am PST. WebRender will ship disabled by default. On May 27th, 25% of the qualified population will have WebRender enabled. We will then increase that rollout to 50% by Thursday, May 30th – assuming that everything is going smoothly. WebRender will then be enabled for 100% of the qualified population by the following week.

We will be keeping a close eye on various health metrics to ensure everything is working as expected. We also plan to conduct an A/B test to compare performance against non-WebRender-enabled Firefox instances in release. We have spent the past several months putting WebRender through its paces in Nightly and Beta and even conducted an experiment in  the Firefox 66 release to help uncover any potential bugs and issues we might face.

This milestone is a significant one, and we are excited to get here! A big congrats goes out to everyone on the Graphics team and all of those who have pitched in to help us get to this point. We are all looking forward to shipping WebRender to more users throughout the rest of this year.

FAQs

So, is WebRender faster/better than non-WebRender?

When it came to performance, our main goal for the MVP was to avoid regressing performance or correctness vs. making it wildly better right away. That said, during our experiments in Nightly and Beta, we’ve observed that users with WebRender experience less jank, and that a number of website performance problems disappear. We will keep a close eye on our metrics as we ship throughout Firefox 67 and will report back on how things are looking in Release.

We are also continuing to prioritize performance work in WebRender. Picture caching 2.0,  various display list improvements, and document splitting are all enhancements that leverage our flexible, new architecture to speed things up further.

How did you decide which hardware you were going to target for the MVP?

There are a couple of reasons why we choose to ship WebRender first on Windows 10 machines with NVIDIA graphics cards. This is the platform where we currently have the best performance with WebRender, and we wanted to compete with our flagship graphics experience to prove that this was a better architecture. Also the percentage of Firefox users with this combination in release (approximately 4%) is a safe number such that we don’t introduce too much risk for this first milestone.

Feels like y’all have been talking about WebRender for a while now. Why has it taken so long?

In short: computers are hard.

WebRender started as an experiment in the Servo research project and as such, only needed to support a small number of use cases. Integrating WebRender into Gecko meant that we had to build on that and account for the multitude of variables possible to encounter in sites on the web today. As I am sure you can imagine, that has been no small feat.

Replacing the browser’s existing rendering engine is a task that required careful consideration, planning and thoughtfulness. We have basically been performing open heart surgery on a living, moving beast (that wasn’t put under anaesthesia).

The good news is that we have learned quite a bit throughout this process and are confident in our plans going forward when it comes to continuing to ship WebRender this year.

I am not on qualified hardware, but I really want to try WebRender! How can I help/test?

We currently have WebRender enabled in Nightly for:

  • Recent Intel and AMD GPUs on Windows 10 desktops
  • Linux users on Intel integrated GPUs with Mesa 18.2 or newer with screens smaller than 4K

To turn on WebRender, go to about:config, enable the gfx.webrender.all pref, and restart the browser.  Note: doing so may cause pages to render incorrectly, your browser to crash, or other problems.  Proceed with caution!

The best place to report bugs related to WebRender in Firefox is the Graphics :: WebRender component in Bugzilla.

Congrats on shipping the MVP! When are you shipping WebRender to more places?

Why, thank you! Our goal is to ship WebRender out to more users throughout the year while continuing to make it more performant. Our top priorities for the next few months will be the following:

  • Monitor the health of Firefox 67 and continue to work on some correctness bugs for Firefox 68
  • Ship WebRender to users running Windows 10 on desktop with AMD graphics cards in Firefox 68
  • We are also currently working on the foundational tasks for getting WebRender performing well on Android/GeckoView and deciding when we can turn that on in GeckoView Nightly
  • We also want to determine potential release targets for hardware with Intel graphics cards

We got together in Toronto in early April and created a high-level roadmap.

We will keep everyone posted as our plans develop.

28 thoughts on “Graphics Team ships WebRender MVP!

  1. Thank you for the amazing work. I’ve force-enabled it in Linux / intel and so far the experience has been flawless.

  2. I’m on a MBP – with an Intel graphics card, running nightly 69.0a1 – can I turn it on via the `about:config` hack?

  3. It will be enabled for older versions of Windows as well in the future? (I personally use 7 and 8.1) and won’t be touching W10 even with a 100 foot pole.

    1. We are discussion options for Windows 7, specific plans are TBD. We will keep everyone posted though!

    1. It seems that that issue only covers anti-aliasing in the about:config page, not sure why this is a blocker for using WebRender?

      1. It happens to all text rendered by the Firefox window in any page, including the Firefox menus.
        about:config is just an example because of its consistent look in all installs so it’s more noticeable.

      2. Maybe you should add that to the report then. An issue affecting all of FF’s interface is a bigger issue than an issue affecting a config page.

  4. Congratulations and thanks so much for your great work! Just installed FF67 on Fedora 30. Turned Webrender on, so now I’m having Wayland + Webrender, awesome!

    I really hope WR can get roled out on Linux by default soon, maybe even this year. It will, beneath many other benefits, finally clear the way for hardware video decoding (until now it didn’t make much sense to work on it as the OpenGL backend on Linux wasn’t turned on by default anywhere AFAIK).
    Also I’m really looking forward for tighter integration with OS compositors to make WR more power efficient (and with Wayland there’re finally compositors on Linux which offer such capabilities; X11 is not suitable for that). See https://pcwalton.github.io/2018/12/07/plans-for-2019.html

  5. sounds like Gnu+Linux is a second class citizen even though it would have been an even safer experiment with less users, has generally more savvy users, and has the users who care the most about an open web (more loyal to FF). who do you think fled firefox as soon as “chrome”(they don’t know what chromium is, only brands) came about? that’s right. all those precious windows users who couldn’t care less if they are being spied on by google. It looks to me that mozilla just wants to pander to windows users anyway. nvidia? i hurl all over your carpet! spare us the condescending “reasons”.

    1. WebRender works fine (in nightly, i.e. 68a1) on my 14 year old Thinkpad T42p running Debian (Sid). Just try to enable it and see if it works. If it doesn’t work try to force-enable it using ‘MOZ_WEBRENDER=1 MOZ_ACCELERATED=1 firefox’ or adding those two variables to your environment (i.e. add them to ~/.bashrc or whatever equivalent is used for your shell). With WebRender enabled FF scrolls almost – but not quite – as fast as Chromium on most sites, faster on some (e.g. FF can smoothly scroll Disqus threads where Chromium stutters)

      As said, tested on a T42p, i.e. an older machine with a single-core Pentium M and a Radeon RV350/M10 GL [Mobility FireGL T2] GPU. I guess you’re using something faster – most people are – so try it out.

    1. Correct. You can still manually enable it using the “gfx.webrender.all” pref in about:config, although you should expect some rough edges if you turn on WebRender on a configuration that we didn’t feel safe to enable by default in the initial release.

      1. I just wanted to give it a try in Nightly (Intel 640, 4k), but I it get “blocked-screen-too-large by env: Screen size too large”. Is there a way to bypass this? Thanks!

      2. Thanks.
        May webrenderer get enable in the future in systems like mine or may be this config won’t get it even after optimization of firefox for intel GPUs?

  6. i enabled it, and now when looking at pictures on facebook, and other places, my gpu voltage goes up all the way, so, it’s making a bit of a temp spike from 35-42c.

  7. We are a group of volunteers andd oprning a new scheme in our community.
    Your site provided us with helpful information to wirk on. You have perrformed an impressive process and our entire neighborhood shall be thankful to you.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s