> It's "a bit" complicated. > In some situations, getRuns get's called because listeners on bounds are set. > This causes TextFlow to layout to compute the runs. > Afterward, the bounds of the parents get updated. > This triggers a call to compute bounds - which cascades up to the children. > When the geometry of the previous Text gets computed in this big stack - it > throws an nullpointer. > The Text doesn't have its runs, and calling TextFlow.layout is now a noop (it > detects repeated calls in the same stack) > > In the case it happened - it didn't repair and the application kinda crashed. > This bug most likely can also be triggered by ScenicView or similar tools, > which sets listeners to the bounds. > It also can cause unpredictable performance issues. > > Unit test and example stacktrace are in the ticket. > > The suggested fix makes sure that recomputing the geometry of the Text, > doesn't trigger the layout of the TextFlow. > The Textflow should be layouting by the Parent. > This might change the behavior in some cases, but as far as I've tested it > works without issues in TextFlow Heavy applications. > > Benefits: > * Better Tooling Support For ScenicView etc. > * Fixes complicated but reproducible crashes > * Might fix some rare crashes, which are hard to reproduce > * Likely improves performance - might fix some edge cases with unpredictable > bad performance
Florian Kirmaier has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision: - Merge remote-tracking branch 'origjfx/master' into JDK-8269921-textflow-bug - JDK-8269921 Reverted the change to the layout, so we can fix the main-bug without further discussions. - Merge remote-tracking branch 'origjfx/master' into JDK-8269921-textflow-bug - JDK-8269921 Added a copyright header - JDK-8269921 Fixing a crash related to Text and TextFlow with bounds listeners ------------- Changes: - all: https://git.openjdk.org/jfx/pull/564/files - new: https://git.openjdk.org/jfx/pull/564/files/404f7103..8ab38610 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=564&range=04 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=564&range=03-04 Stats: 1144361 lines in 14433 files changed: 643924 ins; 350704 del; 149733 mod Patch: https://git.openjdk.org/jfx/pull/564.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/564/head:pull/564 PR: https://git.openjdk.org/jfx/pull/564