On Mon, 16 Mar 2026 18:52:50 GMT, chuckyschluz <[email protected]> wrote:
> Fixes [8202066](https://bugs.openjdk.org/browse/JDK-8202066) > > `selectRows(int, int)` calls `clearSelection(int)` in a loop which is slow. > There are two cases to consider: `minRow == maxRow` and `minRow < maxRow`. > > In both cases, all indices such that `selectedIndex < minRow || selectedIndex > > maxRow` are cleared. `clearSelection(int)` clears the associated bit and > clears the focus and selected index if operation causes the selected indices > to be empty. > > **minRow == maxRow** > > `select(int)` updates the focus and selected index if the input argument is > not already selected. Otherwise, it is a no-up. Therefore, clearing all the > selected indices with `clearSelection(int)` and calling `select(minRow)` is > equivalent to `clearAndSelect(minRow)`. > > **minRow < maxRow** > > `selectRange(int, int)` resolves to `selectIndices(int, int...)`, which > updates the focus and selected index to the last valid index, regardless if > that index was already selected. Therefore, the focus and selected index > prior to `selectRange` is irrelevant. > > > Results are encouraging: > > [StringPlayground3.java](https://github.com/user-attachments/files/26034143/StringPlayground3.java) > > Mainline: > > Starting Benchmark with 5500 elements! > Robot finished in: 85ms > UI Unfroze after: 33108ms > Total Operation: 33193ms > > With change: > > Starting Benchmark with 5500 elements! > Robot finished in: 87ms > UI Unfroze after: 1ms > Total Operation: 88ms This pull request has now been integrated. Changeset: 08e75165 Author: chuckyschluz <[email protected]> Committer: Andy Goryachev <[email protected]> URL: https://git.openjdk.org/jfx/commit/08e75165a466a0f25c74b57d38e694e9e90584d0 Stats: 40 lines in 2 files changed: 26 ins; 11 del; 3 mod 8202066: ListView with large number of rows is extremly slow when changing current multiple selection to a subset Reviewed-by: mhanl, angorya ------------- PR: https://git.openjdk.org/jfx/pull/2109
