JDK-8210547[linux] Uncontrolled framerate

Michael Zucchi notzed at gmail.com
Fri Jul 18 11:22:23 UTC 2025


Morning,

I think i've [1], on a couple of systems [2,3] and with no-where else to 
communicate that I'm writing to the list.  If it matters both are using 
the amdgpu driver, xfce4, and X.org with tearfree enabled, with or 
without a compositor.  It manifests itself as the window updating at an 
uncapped framerate, high cpu use, etc.

It was from using a Transition animation with the default frame-rate.

 From what I can tell it's due to PaintCollector.done() calling 
QuantumToolkit.vsyncHint() which always calls postPulse() which usually 
calls the pulse handler for whatever reason (animation is active?) - 
which re-runs the animation, which re-triggers and update, and so on.

If I simply comment out the invocation of postPulse() in vsyncHint() 
then the animation defaults to a sort-of 60hz.  The timing isn't very 
accurate and has fairly regular (bit ugly) jumps - although this also 
happens if I use a rate that matches my screens which don't run at 60.

Looking through QuantumToolkit and related stuff I can't see anything 
obvious, it seems like that's the way it's supposed to work?  Unless 
redraws are being retriggered when they shouldn't be.  Even the trivial 
example below shows it - Hello spins at a wild rate.

I've got a lot of time on my hands so can look into it, if there's 
anything to look into?

Regards,
  Michael

[1] https://bugs.openjdk.org/browse/JDK-8210547
[2] gentoo, liunux 6.12.36, AMD Ryzen 4700U APU.
[3] slackare64-current linux 6.12.29, Ryzen 3900X, Radeon HD7970.


--
simple example :

             Group g = new Group(new Text("Hello"));
             g.setTranslateX(100);
             g.setTranslateY(100);
             root.getChildren().setAll(g);
             Transition anim = new Transition() {
                 double arg = 0;

                 {
                     setCycleCount(INDEFINITE);
                     setCycleDuration(Duration.seconds(1));
                 }

                 @Override
                 protected void interpolate(double frac) {
                     g.setRotate(arg++);
                 }
             };
             anim.play();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-discuss/attachments/20250718/403e2260/attachment.htm>


More information about the openjfx-discuss mailing list