Linux: Performance regression in 5.4.4

there is a significant drop in performance on Linux in JUCE 5.4.4 compared to 5.4.3 and 5.4.1. To try it out just run the DemoRunner and select WidgetsDemo.h demo. After this the app becomes very slow with every action taking long seconds to complete and it even cannot be closed, after more than 10 minutes I just killed it. But the CPU load is quite low, just 1 - 2% and fans are not spinning so I guess there is some kind of race condition in the event queue/messaging. None of this is happening with older versions (5.4.3 and 5.4.1). I also tested the develop branch but the problem is still there. I’m currently running KDE Neon (Ubuntu 18.04.3 64-bit) and compiling with g++ 7.4.0. If you need any more information, let me know, thank you.

I’ve made a couple of tweaks on the develop branch here - can you see if this improves things for you?

1 Like

Yes, that improved it a lot, performance now seems to be back where it used to be. Thank you for the fix.

Great, I’ll cherry-pick that commit onto the master branch too. Thanks for reporting.

I upgraded today an application on embedded Linux (Yocto) to 5.4.4 and certain pieces of software using Timer to refresh GUI practically stopped responding. Nothing really blocking happens in a timer callback (like reading a frame from a hardware jpeg decoder and drawing it on the screen). 5.4.3 works perfectly with the same code…

I have to investigate the issue but in the meantime may I ask what was the purpose of the changes in the Linux messaging in 5.4.4?

Indeed. In the course of porting my drag and drop implementation to 5.4.4 I came here to check if it works for anyone. It really feels like it wasn’t even tested as far as starting up the demo applications when tagged. Applications are completely unusable with the 5.4.4 tag on Linux.

Just to check, is this using the master branch or the tagged 5.4.4 release? This commit should have fixed the performance issue that was present in the 5.4.4 release.

I can confirm that DemoRunner is ok after this commit. However on Yocto I see no difference but I have problems in parts of code when interactions with external hardware take place in callbacks. So that can be another issue definitely related to messaging in 5.4.4 as in 5.4.3 it worked ok.

What is a difference between the old and the new messaging models? I am not sure looking into the sources.

The relevant changes are here:

These changes were made to allow an arbitrary number of fds to be registered and unregistered with the event loop, which is required for adding VST3 support on Linux.

OK, thanks.