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