Sharing my silly discovery of the day, just in case it helps someone.
I have some 30 fps visualisations shown above some semitransparent layers that update much less often, so they’re setBufferedToImage. Given the current state of things (and OpenGL’s memory overhead), I’m using the software renderer. The performance was pretty awful, with 60% of CPU time spent on the UI.
It happens that blending ARGB images is dirt slow: 45% was spent in RenderingHelpers::EdgeTableFillers::ImageFill::copyRow, which uses memcpy for RGB, otherwise blends pixel by pixel. So having a fast layer on top of several semitransparent buffered components makes the buffering pointless. After grouping all background layers in a single buffered component, the UI CPU usage went from 60 to 44%, with the row copying from 45 to 23. The more you know!