Skip to content

st-label: Keep labels fully pre-rendered on the GPU

Daniel van Vugt requested to merge vanvugt/gnome-shell:offscreen-labels into master

The performance of the icon grid was being hindered by a large number of primitives (a few hundred) being copied from the CPU to the GPU on each frame. This was first noticed in mutter#971 (closed) but we failed to investigate all the issues at the time.

You can also see the high number using COGL_DEBUG=batching or COGL_DEBUG=disable-texturing. So now it's obvious that high number is every letter of every label being uploaded as a separate quad. Let's not do that and instead treat the whole label as a single quad/texture.

Measured performance on an i7-7700 at UHD 3840x2160:

Journal entries per frame on the icon grid:

  • Before: 288 (18 KB copied from CPU to GPU)
  • After: 73 ( 4 KB copied from CPU to GPU)

Spring animation:

  • Before: 20-30 FPS, avg 22/peak 45 milliseconds per frame
  • After: 30-40 FPS, avg 14/peak 28 milliseconds per frame

Scrolling the icon grid:

  • Before: 15 FPS, 50 milliseconds per frame
  • After: 30 FPS, 28 milliseconds per frame
Edited by Jeff Fortin

Merge request reports