Platform/GFX/perf triage
The page contains a breakdown of performance related bugs and tasks for WebRender.
See also, the graphics perf bugs that come out of the performance team's triage process
Bugzilla tree view of the wr-perf bugs: https://bugzilla.mozilla.org/showdependencytree.cgi?id=1477376&hide_resolved=1
To determine in which category a performance issue fits in a good source of information is to set the pref gfx.webrender.debug.profiler-ui to "Frame stats,Time graphs, ,GPU". Also set "gfx.webrender.debug.profiler" and "gfx.webrender.debug.gpu-time-queries" to true. this should be enough to tell in which stage of the rendering pipeline the issue is. Then set the profiler ui pref to more specific counters to continue investigating (see the list of profile counters in profiler.rs).
Contents
High priority bugs
Metabug: wr-perf-p1
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
defect | 1664478 | Blend modes and other effects on a single image force an extra intermediate target | P2 | |
enhancement | 1404477 | Chrome repaints cause rebuilds of the entire browser scene | P3 | |
defect | 1595680 | Slightly different values in display lists causing extra picture cache invalidations. | P3 | |
defect | 1595909 | Image masks with different keys being added during scrolling | P3 |
4 Total; 4 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Alternate query using performance flag set to P1:
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
defect | 1595680 | Slightly different values in display lists causing extra picture cache invalidations. | P3 | |
defect | 1772249 | Jank and checkerboarding when scrolling https://www.waterfox.net/ | -- | |
defect | 1825395 | Janky carousel on Apple India home page on Moto G Pure | -- | |
defect | 1826576 | CSS filter() with invert() and hue-rotate() results in sluggish scrolling on Wikipedia | -- |
4 Total; 4 Open (100%); 0 Resolved (0%); 0 Verified (0%);
CPU time
Frame building
useful prefs:
- gfx.webrender.debug.profiler-ui: "Frame times"
Metabug: wr-frame-building
A few common themes:
- Many vector allocations add up to occupying a lot of the total frame building time.
- HashMap operations are also showing up.
- Removing redundant work or moving it to scene building can help a lot (for example Glenn's work on clipping).
- Some pages have a very high primitive count. Anything that can help amortize how costs scale with prim count helps.
- Timings tend to spike, so it's best to look at maximum times instead of averages. Spikes tend to line up with scene builds.
See also
25 Total; 25 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Scene building
Metabug: wr-scene-building
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
enhancement | 1404477 | Chrome repaints cause rebuilds of the entire browser scene | P3 | |
defect | 1508116 | 4-5ms spent scene building new Gmail (scene building is too slow) | P3 | |
defect | 1582621 | Scene building takes too long (> 7ms) on the MotionMark 1.1 Multiply benchmark | P3 | |
enhancement | 1631756 | Build separate pipelines for the content and UI and stitch them up during frame building | P3 | |
enhancement | 1648091 | A lot of time spent reallocating vectors during scene building | Nicolas Silva [:nical] | P3 |
enhancement | 1720517 | Avoid scene building for JS-controlled transform changes in the browser chrome | P3 | |
defect | 1768368 | scrolling-boxes.html checkerboards a lot | P3 | |
defect | 1493359 | https://lab.hakim.se/domtree/ is slower with WR | P5 |
8 Total; 8 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Renderer (Driver & ANGLE overhead)
Metabug: wr-renderer
Useful prefs:
- gfx.webrender.debug.profiler-ui: "Frame stats,#Renderer,Renderer graphs"
15 Total; 15 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Texture/Buffer uploads
Metabug: texture-upload-perf
Useful prefs:
- gfx.webrender.debug.profiler-ui: "#GPU cache upload,#Texture cache update,#Texture uploads,#Texture uploads mem,#Rasterized glyphs,#Rasterized blob tiles"
See also:
17 Total; 17 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Batching
Metabug: wr-batching
Performance issues caused by high amounts of draw calls. 100 draw calls per frames is a reasonable amount (not a hard limit). Multiple hundreds, however, tend to cause excessive CPU usage in the renderer.
Useful prefs:
- gfx.webrender.debug.profiler-ui: "#Draw calls"
12 Total; 12 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Picture Caching
Metabug: picture-cache-perf
See also: incremental-perf
Useful prefs:
- gfx.webrender.debug.profiler-ui: "#Rendered picture tiles, ,Picture cache slices,Picture tiles,Picture tiles mem"
11 Total; 11 Open (100%); 0 Resolved (0%); 0 Verified (0%);
DisplayList building
Metabug: wr-displaylist-perf
Useful prefs:
- gfx.webrender.debug.profiler-ui: "Transaction times"
17 Total; 17 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Blob image rasterization
Metabug: blob-perf
Blob image performance affect SVG and a few drawing primitives that aren't supported by WebRender.
A few common themes in blob image performance bugs:
- Rasterization performance on the CPU (rasterization itself, malloc contention)
- Overhead of replaying commands on multiple tiles.
- Bad layerization causing many rasterized tiles and a lot of overdraw.
- Rendering very large blobs failing to account for parts that aren't visible.
- SVG filters on the CPU.
See also:
Useful prefs:
- gfx.webrender.blob.paint-flashing: true
- gfx.webrender.debug.profiler-ui: "#Blob rasterization,#Rasterized blob pixels,#Rasterized blob tiles,#Rasterized blobs"
62 Total; 62 Open (100%); 0 Resolved (0%); 0 Verified (0%);
SVG filters metabug: wr-svg-filters
13 Total; 13 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Glyph rasterization
These bugs affect CPU time and texture uploads.
Metabug: 1681339
Useful prefs:
- gfx.webrender.debug.glyph-flashing: true
- gfx.webrender.debug.profiler-ui: "#Rasterized glyphs,#Glyph resolve,#Texture cache update"
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
defect | 1674864 | Slow scrolling on https://stirringabyss.com/ | -- |
1 Total; 1 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Scheduling
Metabug: frame-scheduling
Useful prefs:
- gfx.webrender.debug.profiler-ui: "#Content send,#API send"
9 Total; 9 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Vsync
Metabug: vsync
13 Total; 13 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Preserve-3d
Metabug: bug 1795885
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
defect | 1745050 | https://acko.net/files/slacko/ is very slow when scrolling, much jank | P2 | |
defect | 1821595 | CSS3D Aluminum Oxide molecule demo is janky | P2 | |
enhancement | 1597326 | Avoid separate surfaces in WebRender if preserve-3d children don't intersect | P3 | |
defect | 1768984 | Very slow plane splitting and poor batching on https://themaninblue.com/experiment/slashGlobe/ | Nicolas Silva [:nical] | P3 |
defect | 1493359 | https://lab.hakim.se/domtree/ is slower with WR | P5 | |
defect | 1707845 | Jittery 3D CSS | -- | |
defect | 1800177 | Twisting CSS Cube is slow in Firefox | -- | |
defect | 1800998 | 3D CSS demo is slow in Firefox | -- |
8 Total; 8 Open (100%); 0 Resolved (0%); 0 Verified (0%);
GPU time
Useful prefs:
- gfx.webrender.debug.profiler-ui: "Frame stats, ,#GPU,#Rendered picture tiles,|,GPU time queries"
- gfx.webrender.debug.gpu-time-queries: true
Caching
Metabug: wr-caching
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
enhancement | 1548396 | Support picture caching on child pictures. | P2 | |
defect | 1528376 | High GPU usage on https://pressprogress.ca/jason-kenneys-labour-reforms-are-arbitrary-and-ridiculous-workers-rights-advocates-say/ | P3 | |
defect | 1579977 | Poor scrolling performance on Apple Music Beta | Nicolas Silva [:nical] | P3 |
3 Total; 3 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Too many render passes
Metabug: wr-render-passes
Note, it's likely that most of the bugs below would be fixed by caching the render passes (bucket above).
12 Total; 12 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Overdraw
Metabug: 1613404
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
enhancement | 1485534 | Images that have alpha channels but are actually opaque go in the transparent pass | P2 | |
enhancement | 1558133 | Reducing overdraw with huge semi-transparent images | P3 | |
enhancement | 1597324 | Detect opaque split planes in WebRender | P3 | |
defect | 1733455 | sw-wr: background image scrolling is very choppy on colorpeople.com | P3 | |
defect | 1457683 | servo moire demo is much slower in Firefox + WebRender than in Chrome | P5 | |
enhancement | 1596634 | When blur filter is applied on a large area, it delays the full rendering | -- | |
defect | 1674864 | Slow scrolling on https://stirringabyss.com/ | -- |
7 Total; 7 Open (100%); 0 Resolved (0%); 0 Verified (0%);
GPU times (others)
Metabug: wr-gpu-time
24 Total; 24 Open (100%); 0 Resolved (0%); 0 Verified (0%);
GPU Memory usage
Metabug: wr-gpu-memory
Useful prefs:
- See all profile counters starting with "Texture cache" in addition to "Created targets".
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
enhancement | 1475518 | Commit-space usage investigation | P3 | |
defect | 1615051 | Hangs caused by expensive animations on https://paulstamatiou.com/work/ can freeze Firefox | P3 | |
defect | 1701643 | Webrender per-window memory overhead is high | P3 | |
enhancement | 1701986 | Share and reuse Direct composition surfaces between multiple windows | P3 | |
defect | 1716317 | A lot of GPU memory goes into the render target pool | P3 | |
enhancement | 1716525 | Flush caches and pools from least recently shown windows when under memory pressure | P3 | |
enhancement | 1716579 | Reduce the memory usage of windows that haven't been rendered for a long time | Nicolas Silva [:nical] | P3 |
defect | 1772743 | https://codepen.io/mknadler/pen/WjBJEg OOM's and crashes | P3 | |
defect | 1715957 | Very high gpu memory usage with many windows | -- | |
defect | 1824520 | High GPU memory under gfx/webrender/textures and gpu-committed | -- |
10 Total; 10 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Video playback
Metabug: video-perf
32 Total; 32 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Power usage
Metabug: gfx-power-usage
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
defect | 1732986 | High GPU power usage when scrolling with SWGL | Ashley Hale [:ahale] | P3 |
defect | 1698365 | https://www.digibank.co.il/ causes high CPU and power consumption | -- | |
defect | 1710472 | WebRender Mac: large GPU power use when showing PDF inline | -- |
3 Total; 3 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Android
Metabug: wr-android-perf
12 Total; 12 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Linux
Metabug: wr-linux-perf
7 Total; 7 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Software WebRender (SWGL)
Metabug: sw-wr-perf
28 Total; 28 Open (100%); 0 Resolved (0%); 0 Verified (0%);
See also:
- sw-wr-perf-opacity
- sw-wr-perf-nearest
- sw-wr-perf-alpha
- sw-wr-perf-mix-blend
- sw-wr-perf-clip-rect
- sw-wr-perf-clip-image
Canvas 2D
Metabug: canvas-perf
14 Total; 14 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Tools
Metabug: wr-perf-tools
Type | ID | Summary | Assigned to | Priority |
---|---|---|---|---|
task | 1583884 | Show the number of blob tiles in existence in webrender's builtin profiler HUD | P3 | |
enhancement | 1641101 | Add support for profiling how often the same glyph has been evicted and re-rasterized | P3 | |
task | 1645021 | Reduce the cost of displaying HUD profiling tools in WebRender | P3 | |
task | 1728620 | Add some telemetry for slow frame categories | Nicolas Silva [:nical] | P3 |
enhancement | 1734692 | Improve our ability to measure scroll smoothness | P3 | |
task | 1741739 | Report a few WebRender timings in the C++ PerfStats mechanism | P3 |
6 Total; 6 Open (100%); 0 Resolved (0%); 0 Verified (0%);
General WebRender perf metabug
Metabug: wr-perf
During graphics triage, WebRender performance bugs are added as dependency to the wr-perf meta-bug. The next step is to replace the wr-perf dependency with one of the more specific meta-bugs above.
21 Total; 21 Open (100%); 0 Resolved (0%); 0 Verified (0%);
Other meta-bugs:
- wr-low-end-perf - wr-perf-graveyard - speedometer 3