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

Reply via email to