On Mon, 2 Mar 2020 11:47:03 GMT, Nir Lisker <nlis...@openjdk.org> wrote:

>>> 
>>> 
>>> I think that a starting point would be to decide on a spec for the listener 
>>> notification order: is it specified by their registration order, or that is 
>>> it unspecified, in which case we can take advantage of this for better 
>>> performance. Leaving is unspecified and restricting ourselves to having it 
>>> ordered is losing on both sides.
>> 
>> technically true - but the implementation was linear with a fixed sequence 
>> since-the-beginning-of-java-desktop-time (and sometimes, for good ol' beans 
>> properties, even exposed as api to access the array of listeners). So 
>> technically, we could go the path of explicitely spec'ing that the order is 
>> unspecified. Pretty sure that doing so and implementing it will break tons 
>> of application code that's subtly relying on fifo notification (f.i. 
>> register before or after skin has its own is a simple wide-spread trick) .. 
>> which all did it wrong and might deserve it ;-) But then if even internal 
>> code does it ..
>
>> technically true - but the implementation was linear with a fixed sequence 
>> since-the-beginning-of-java-desktop-time (and sometimes, for good ol' beans 
>> properties, even exposed as api to access the array of listeners). So 
>> technically, we could go the path of explicitely spec'ing that the order is 
>> unspecified. Pretty sure that doing so and implementing it will break tons 
>> of application code that's subtly relying on fifo notification (f.i. 
>> register before or after skin has its own is a simple wide-spread trick) .. 
>> which all did it wrong and might deserve it ;-) But then if even internal 
>> code does it ..
> 
> So we can choose to specify it as ordered.
> 
> These are the 2 options I mentioned:
> 1. Not specify the behavior and change the implementation in favor of 
> performance. This could break applications as you've mentioned.
> 2. Specify that the order is preserved and keep the ordered implementation 
> behavior. This will allow applications to rely on the behavior safely.
> 
> Right now we're losing on both sides. We keep a promise and we don't tell 
> anyone about it. The only reason for this is if we intend to change the 
> behavior in the future, in which case we should add a doc comment saying that 
> the order is unspecified and is planned to change in the future, so there 
> will be at least some warning.
> 
> Once we choose what to do here it will make sense to continue to review the 
> code with that decision in mind.

In a minimal test I wrote (not a microbenchmark that removes listeners), I 
tried this PR code, but did not reproduce the performance improvement. I have 
attached a test program in my PR(#125)

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

PR: https://git.openjdk.java.net/jfx/pull/108

Reply via email to