> 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

Reply via email to