RFR: 8324658: Allow animation play/start/stop/pause methods to be called on any thread [v14]

Kevin Rushforth kcr at openjdk.org
Mon Jan 29 22:16:42 UTC 2024


On Mon, 29 Jan 2024 21:35:24 GMT, Nir Lisker <nlisker at openjdk.org> wrote:

>> tests/system/src/test/java/test/com/sun/javafx/animation/SynchronizationTest.java line 87:
>> 
>>> 85:         for (int i = 0; i < 10; i++) {
>>> 86:             executor.submit(runnable);
>>> 87:         }
>> 
>> I did a quick prototype of the idea I mentioned in my last comment, and it looks like it works:
>> 
>> 
>>         Runnable wrappedRunnable = () -> {
>>             try {
>>                 runnable.run();
>>             } catch (Throwable e) {
>>                 thread = Thread.currentThread();
>>                 throwable = e;
>>                 failed.set(true);
>>                 waiter.countDown();
>>             }
>>         };
>> 
>>         for (int i = 0; i < 10; i++) {
>>             executor.submit(wrappedRunnable);
>>         }
>> 
>> 
>> This obviates the need for the `registerExceptionHandler` calls in the two tests themselves (this one in _this_ method is still needed).
>
> I don't think the executor service catches the exception because if it did then the `AnimationTimer` test would also always pass. I do get the AIOOB exceptions from the background thread caught in the handler (which fails the test). This test is rather stable for me. The `Animation` one is more problematic, sometimes failing and sometimes not when it should fail.

Based on the testing I did, the executor service does prevent at least some exceptions that happen on the test thread from reaching the uncaught exception handler. An explicit try/catch will catch those.

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1352#discussion_r1470290986


More information about the openjfx-dev mailing list