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