On Mon, 22 May 2023 15:52:55 GMT, Kevin Rushforth <[email protected]> wrote:
>>> could you please help me in understanding how `Util.runAndWait(() -> { });`
>>> help in this case
>>
>> After discussing the issue with @kevinrushforth it probably won't.
>>
>> The idea was to replace Thread.sleep() with something that can work reliably
>> even when the process takes a long time (i.e. cold boot). Simply increasing
>> the sleep time to 1000 ms may not be sufficient, I think.
>>
>> What we need is an equivalent of java.awt.Robot.waitForIdle() which we don't
>> have in FX. The problem here is that all the processing involving CSS,
>> layout may take several pulses, and it certainly not guaranteed to be over
>> when the next event is processed in `Util.runAndWait()`.
>>
>> We could still use Toolkit.firePulse(), but this apparently is a hack, and
>> it alters the normal control flow - that is something we are trying to avoid.
>>
>> Another variant is to add something like that to Util and use that in place
>> of Thread.sleep(). This method will trigger and wait for an arbitrary
>> number of pulses (currently 10, but we can pick any reasonable number):
>>
>>
>> /**
>> * Triggers and waits for 10 pulses to complete in the specified scene.
>> */
>> public static void waitForIdle(Scene scene) {
>> int count = 10;
>> CountDownLatch latch = new CountDownLatch(count);
>> Runnable pulseListener = () -> {
>> latch.countDown();
>> Platform.requestNextPulse();
>> };
>>
>> runAndWait(() -> {
>> scene.addPostLayoutPulseListener(pulseListener);
>> });
>>
>> try {
>> Platform.requestNextPulse();
>> waitForLatch(latch, 30, "waitForIdle timeout");
>> } finally {
>> runAndWait(() -> {
>> scene.removePostLayoutPulseListener(pulseListener);
>> });
>> }
>> }
>>
>>
>> I am not sure why we have Scene.addPulseListener() and not a static
>> equivalent of Robot.waitForIdle(), but here is some earlier work on the
>> pulse listener:
>>
>> https://bugs.openjdk.org/browse/JDK-8097917
>
> @andy-goryachev-oracle Do you think this needs a second reviewer, or are you
> satisfied that a single review is sufficient?
I don't mind someone else take a look at this, @kevinrushforth .
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1091#issuecomment-1557477810