On Mon, 23 Mar 2026 15:00:21 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
>
> chuckyschluz has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   split unit tests

Congratulations on your first commit!

-------------

PR Comment: https://git.openjdk.org/jfx/pull/2109#issuecomment-4112513800

Reply via email to