[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