Open Bug 1746625 Opened 3 years ago Updated 10 months ago

Categories

(Core :: Graphics: WebRender, defect)

defect

Tracking

()

People

(Reporter: jrmuizel, Unassigned)

References

(Blocks 1 open bug)

Details

https://share.firefox.dev/3IVZGNn

We evict a bunch and then create a bunch in the next frame.

Flags: needinfo?(jmuizelaar)

Markus, is this behaviour expected?

Flags: needinfo?(jmuizelaar) → needinfo?(mstange.moz)
Severity: -- → S3
Flags: needinfo?(mstange.moz)
Summary: Bad surface pool behaviour on https://health.mo.gov/living/healthcondiseases/communicable/novel-coronavirus/data/public-health/ → Bad surface pool behaviour during scrolling on https://health.mo.gov/living/healthcondiseases/communicable/novel-coronavirus/data/public-health/

View into the SurfacePool profiler markers: https://share.firefox.dev/3z1Nwy5

We have all kinds of different surface sizes on this page. I'm not sure why - I thought regular WebRender painting went into 1024x512-sized surfaces. Is it canvases?

The surface pool has a limit of 25 unused surfaces, configurable with gfx.webrender.compositor.surface-pool-size. Anything beyond that is evicted at the end of a frame. For this to work well, we need to have good surface reuse. But good surface reuse is only possible if we have only a small set of surface sizes. What seems to happen in this profile is that we require a different set of surface sizes in each frame.

Furthermore, I'm surprised WR asks us to bind so many surfaces each frame. Example: https://share.firefox.dev/3pyJ3Qh
Each "Create" or "Recycle" event in the surface pool is due to a request from WR to bind a surface. I can see some frames with at least 20 of those, but the corresponding "NumPictureCacheInvalidated" marker only says "4" or "5". I'm not sure what this means.

You need to log in before you can comment on or make changes to this bug.