[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: Re: RFR: 8290040: Provide simplified deterministic way to manage listeners [v8]
From: John Hendrikx <jhendrikx () openjdk ! org>
Date: 2022-10-26 7:56:52
Message-ID: kzEp5X3Q4h6iGBt8jyX8MH6vdk-Csmjr-rJhU5Jr_WM=.ccd3287a-63a3-46b9-b537-a058590edac6 () github ! com
[Download RAW message or body]
> This PR adds a new (lazy*) property on `Node` which provides a boolean which \
> indicates whether or not the `Node` is currently part of a `Scene`, which in turn \
> is part of a currently showing `Window`.
> It also adds a new fluent binding method on `ObservableValue` dubbed `when` (open \
> for discussion, originally I had `conditionOn` here).
> Both of these together means it becomes much easier to break strong references that \
> prevent garbage collection between a long lived property and one that should be \
> shorter lived. A good example is when a `Label` is bound to a long lived property:
> label.textProperty().bind(longLivedProperty.when(label::isShowingProperty));
>
> The above basically ties the life cycle of the label to the long lived property \
> **only** when the label is currently showing. When it is not showing, the label \
> can be eligible for GC as the listener on `longLivedProperty` is removed when the \
> condition provided by `label::isShowingProperty` is `false`. A big advantage is \
> that these listeners stop observing the long lived property **immediately** when \
> the label is no longer showing, in contrast to weak bindings which may keep \
> observing the long lived property (and updating the label, and triggering its \
> listeners in turn) until the next GC comes along.
> The issue in JBS also describes making the `Subscription` API public, but I think \
> that might best be a separate PR.
> Note that this PR contains a bugfix in `ObjectBinding` for which there is another \
> open PR: https://github.com/openjdk/jfx/pull/829 -- this is because the tests for \
> the newly added method would fail otherwise; once it has been integrated to jfx19 \
> and then to master, I can take the fix out.
> (*) Lazy means here that the property won't be creating any listeners unless \
> observed itself, to avoid problems creating too many listeners on Scene/Window.
John Hendrikx has updated the pull request incrementally with one additional commit \
since the last revision:
Fix javadoc error
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/830/files
- new: https://git.openjdk.org/jfx/pull/830/files/ea546998..46f206aa
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=830&range=07
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=830&range=06-07
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
Patch: https://git.openjdk.org/jfx/pull/830.diff
Fetch: git fetch https://git.openjdk.org/jfx pull/830/head:pull/830
PR: https://git.openjdk.org/jfx/pull/830
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic