<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Hi Michael,<br>
    <br>
    Welcome to the openjfx-dev list. We've not ever been able to
    reproduce this on any of our systems. It seems likely that it is
    specific to certain graphics drivers. We do all our testing on
    Ubuntu Linux and Oracle Linux (which is based on RHEL), so it's also
    possible we are testing with different drivers even for the same
    card.<br>
    <br>
    If you have a reliable patch for the bug, you can submit a PR
    although we will need to find a way to test it. See the CONTRIBUTING
    [1] guidelines for what you will need to do in order to contribute.<br>
    <br>
    Ambarish or Lukasz might have some additional comments.<br>
    <br>
    Thanks.<br>
    <br>
    -- Kevin<br>
    <br>
    [1] <a class="moz-txt-link-freetext" href="https://github.com/openjdk/jfx/blob/master/CONTRIBUTING.md">https://github.com/openjdk/jfx/blob/master/CONTRIBUTING.md</a><br>
    <br>
    <div class="moz-cite-prefix">On 9/22/2025 8:21 AM, Kevin Rushforth
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:ee44ba34-b227-4d1d-b648-1886a642fdc4@oracle.com">
      
      Redirecting to openjfx-dev which is the right list to discuss
      technical issues such as this.<br>
      <br>
      -- Kevin<br>
      <br>
      <br>
      <div class="moz-cite-prefix">On 9/20/2025 8:02 PM, Michael Zucchi
        wrote:<br>
      </div>
      <blockquote type="cite" cite="mid:e66e87f7-1eca-44ee-8189-2dce95cfbe0b@gmail.com"> <br>
        <font face="DejaVu Sans">Morning list!<br>
          <br>
          I hit the above bug[1] a little while ago while using a
          Transition for timing on a couple of GNU/Linux systems [2,3]. 
          Basically it runs flat-chat because each interpolation call
          makes changes which triggers a new render pass which then
          re-runs the animators if they're active, which retriggers
          another render pass and so on.  Trivial example that
          demonstrated is below.  If you set a specific frame-rate in
          the constructor then it doesn't occur.  </font><font face="DejaVu Sans">None of the related system properties seem
          to have any effect.  Tracing through the code I couldn't see
          how this doesn't always happen with X11/OpenGL, plus there
          seems to be a bunch of stale/unfinished frame throttling code
          that never gets run.</font><font face="DejaVu Sans">  I also
          noticed that gdk_timer was used for frame timing, but this is
          documented as not being suitable for this task - it lacks
          suitable resolution and must be reset each call guaranteeing
          drift.  And in any event timing unlinked from the display will
          never be accurate.  <br>
          <br>
          I developed a small patch to use GLX_SGI_video_sync to
          synchronise to the actual video frame-rate.  It's probably
          hooked into the wrong place but i'm not very familiar with the
          code and couldn't find much documentation on the internals of
          prism and quantum toolkit; I've attached it as a matter of
          interest.  With this patch enabled multiple windows will
          render smoothly matching the video frame rate exactly and the
          animation calculations are only invoked once per frame apart
          from wrap-around of cyclic animations (I've only tested with
          simple scenes).<br>
          <br>
          The main drawback is added latency for low-frame rate monitors
          (I've tested with a system that can do anything from 25 to
          150), and the 'animation now timestamp' is calculated ad-hoc
          rather than syncing to the expected presentation time.  Having
          to call glXMakeContext extra times isn't very cheap either,
          but it's already being called a lot.<br>
          <br>
          With some guidance/pointers I can look further if it would be
          of use to the project.<br>
          <br>
          Regards,<br>
           Michael Z<br>
          <br>
        </font><font face="DejaVu Sans">[1] <a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-8210547" moz-do-not-send="true">https://bugs.openjdk.org/browse/JDK-8210547</a><br>
          [2] gentoo, liunux 6.12.36, AMD Ryzen 4700U APU.<br>
          [3] slackare64-current linux 6.12.29, Ryzen 3900X, Radeon
          HD7970.</font><br>
        <font face="DejaVu Sans"><br>
          --<br>
        </font><font face="DejaVu Sans">            Group g = new
          Group(new Text("Hello"));<br>
                      g.setTranslateX(100);<br>
                      g.setTranslateY(100);<br>
                      root.getChildren().setAll(g);<br>
                      Transition anim = new Transition() {<br>
                          double arg = 0;<br>
          <br>
                          {<br>
                              setCycleCount(INDEFINITE);<br>
                              setCycleDuration(Duration.seconds(1));<br>
                          }<br>
          <br>
                          @Override<br>
                          protected void interpolate(double frac) {<br>
                              g.setRotate(arg++);<br>
                          }<br>
                      };<br>
                      anim.play();</font> </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>