JUCE and macOS Tahoe UI performance issues

Has anyone else noticed and investigated the issues with JUCE UI on macOS Tahoe?
We (and others) have an issue in Pro Tools which I tracked as far as the repaint() requests being stacked up for far too long before actual paint() calls were being made.

So the UI looks really laggy and stutters and it depends on what else the DAW is displaying at the time. MULTIPLE_PAINT_CALLS made no difference. Bypassing all my heavy UI drawing logic made no difference at all.

I’m now seeing something similar in Nuendo but have not done a deep dive yet to look for the bottleneck. Bizarrely on Nuendo it’s only an issue in > 7channel instances. It’s also an issue with the built-in VSTMultiPanner, but I’m not sure if that’s written with JUCE as well. And in Nuendo the entire DAW UI stalls ~every second.

More info when I get time to deep-dive, but this feels like a JUCE vs Tahoe thing and will be an issue for everyone I guess.

Oh - OK, so there’s a known issue in Nuendo where you must disable GPU acceleration.

Still interested to know if this issue has been noticed by anyone else, especially on Pro Tools.

We have two major serious issues with Tahoe.

Modal Dialogs:
If you still have these you should definitely get rid of them, they lag immensely, if you have a Modal Dialog with Text Input for instance the input is very laggy.

Drag & Drop:
When Drag&Drop is performed with drag allowed to external windows the Drag & Drop operation causes intermittent UI stalls. And not only the normal graphics rendering but OpenGL rendering as well. We hack-fixed this limiting the amount of updated to the window being dragged,
We still use JUCE 7 though, JUCE 8 does seem to perform better with this.

Yeah the Modal dialogs thing is a killer for our Desktop app Matchbox. Refactoring is a really major deal and the result will be nasty spaghetti code.

Did not know about drag/drop - thanks, that will affect us too.

For Modal dialog, using lambda probably allows to avoid the spaghetti stuff

Yes although sometimes we rely on the sync nature of the call. Just takes time to tackle each of the cases we use the modal dialog or a modal loop.

I’ve been trying to reproduce this issue but so far I’ve been unsuccessful. including with a plugin that I’m aware exhibits this issue sent to me via email.

My setup
Pro Tools Developer/Ultimate 2025.12.0
macOS 26.0.1/26.2
Xcode 26.1.0/26.2.0
Apple M2 Max (MBP)

If there is anything else you find or can share I’m happy to take a look (although I’ll be out at NAMM most of next week).

FWIW, I’ve seen some UI performance issues with Pro Tools that happen only in the release version, but not in the developer version. That was before Tahoe, but maybe the hint that both versions seem to behave very differently may be valuable. Might not be related at all though.

Actually that specific issue looked like most time is spent inside CoreGraphics or something, not in the JUCE drawing, not in any ProTools graphics code (you can trace that with Instruments). Avid has traces and was able to reproduce, but I haven’t heard back about it for a while. Performance got worse the larger the repainted area got (in my case typically only becomes noticeable when resizing to a larger size, it’s still measurably slow at 100% zoom though).

I’d love to know if someone has a JUCE plugin which does NOT have this issue in Pro Tools on Tahoe. Preferably a surround plugin, but any plugin should reveal this issue from what I’ve seen.

To test if you’re suffering from it:
Make a large session with ~500 tracks.
Sprinkle audio all over it so the PT meters are working most of the time.
Go into continuous scroll and hit play
Reveal your plugin and start adjusting knobs and watching UI components.

If your plugin behaves normally and updates meters/knobs/sliders smoothly, I’d love to know how you organise your repaint() calls.

Are you experiencing this issue with the JUCE plugin demos? If so, perhaps you could create this session that shows the problem and upload it somewhere?

I believe Anthony has a repro case. But you’re right - I’ll try put together a nice clear example without using real customer sessions

I can confirm on the modal problem.