[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: Re: RFR: JDK-8269921 Text in Textflow and listeners on bounds can cause endless loop/crash and other
From: Florian Kirmaier <fkirmaier () openjdk ! org>
Date: 2023-09-26 8:43:47
Message-ID: dpRt46yKoa-w85ER0x1EelVGAgmFrzEDW47eFhH5EUM=.edd6c1d5-1428-464b-a6d8-8ebd63c4ae71 () github ! com
[Download RAW message or body]
> 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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic