<div dir="ltr">Hi Michael,<div><br></div><div>could you take a look at?</div><div><a href="https://github.com/openjdk/jfx/pull/1929">https://github.com/openjdk/jfx/pull/1929</a><br></div><div><br></div><div>It's based on the assumption that glxSwapIntervalEXT (rather than glxSwapIntervalSGI) works with glFinish() per drawable rather than per application.</div><div>But I'm unsure of it.</div><div><br></div><div>-- Thiago</div><div><br></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">Em ter., 7 de out. de 2025 às 02:47, Michael Zucchi <<a href="mailto:notzed@gmail.com">notzed@gmail.com</a>> escreveu:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><u></u>
<div>
<div>On 4/10/25 01:20, Thiago Milczarek
Sayão wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>Just out of curiosity, I compiled the EGL version. Here:</div>
<a href="https://github.com/tsayao/jfx/releases/tag/test-egl" target="_blank">https://github.com/tsayao/jfx/releases/tag/test-egl</a>
<div><br>
</div>
<div>It does seem to have a difference in frame rate.</div>
<div><br>
</div>
</div>
</blockquote>
<br>
That's a lot better, it's basically the same as if I remove the
makeCurrent() from ES2Pipeline.present and I presume how it behaves
on other systems. I still think it's throttling in the wrong place
and the GlassTimer is terrible, but at least it's throttling. I'll
probably try 25 with the latest mesa and if i still see it file a
bug with them.<br>
<br>
Over the last few days I did a lot of analysis with a more complex
application - one that calculates an image sequence via OpenCL and
displays it in JavaFX. The OpenCL takes from about 3 to 15ms to
complete depending on the scene. I've attached some inter-pulse
timing plots which are a bit more interesting than the previous
ones.<br>
<br>
There's JavaFX 25, my patches (Z), and the with your EGL build (I
also tested with the makeCurrent() change since it's a single
window, and it matches the EGL one).<br>
<br>
From left to right, top to bottom:<br>
<ol>
<li>Transition with no frame-rate, asynchronous rendering that
drops work if a new request comes in while it's busy.</li>
<li>Transition with 60f/s desired frame rate, asynchronous
rendering as 1.</li>
<li>Transition with no frame-rate, synchronous rendering on the
animation thread.</li>
<li>Transition with 60/s desired frame rate, synchronous rendering
as 3.</li>
</ol>
<br>
Setting a desired frame rate on the Transition results in
considerable microstutter even with the egl version. Not setting a
desired frame rate - visually it's ok but there is still more frame
pacing variation than calling glFinish() after all scenes have been
drawn and with a more accurate timer.<br>
<br>
I want to try to do some latency testing if I can work out a
reasonable way to do it.<br>
<br>
For what it's worth i've also attached current patch-in-progress
that includes a more accurate if rather simple timer.<br>
<br>
Regards,<br>
!Z<br>
<br>
<br>
<br>
</div>
</blockquote></div>