> Fixes [JDK-8311505](https://bugs.openjdk.org/browse/JDK-8311505) > > This PR uses `set(int index, int end, boolean isSet)` in > `javafx.scene.control.MultipleSelectionModelBase` to avoid excessive calls to > `indexOf` when deselecting continuous ranges of rows. > > `TableView`: > > Item Count | Master Select | Fixed Select | Select Improv. | Master Deselect > | Fixed Deselect | Deselect Improv. > -- | -- | -- | -- | -- | -- | -- > 16,384 | 7ms | 7ms | — | 83ms | 4ms | ~20.8x > 32,768 | 13ms | 12ms | ~1.1x | 331ms | 5ms | ~66.2x > 65,536 | 25ms | 17ms | ~1.5x | 1,283ms | 8ms | ~160.4x > 131,072 | 63ms | 28ms | ~2.3x | 5,142ms | 13ms | ~395.5x > 262,144 | 195ms | 58ms | ~3.4x | 20,526ms | 23ms | ~892.4x > > `TreeTableView`: > > Item Count | Master Select | Fixed Select | Select Improv. | Master Deselect > | Fixed Deselect | Deselect Improv. > -- | -- | -- | -- | -- | -- | -- > 16,384 | 310ms | 313ms | — | 81ms | 1ms | ~81.0x > 32,768 | 1,451ms | 1,448ms | — | 315ms | 3ms | ~105.0x > 65,536 | 6,505ms | 6,629ms | — | 1,247ms | 6ms | ~207.8x > 131,072 | 37,034ms | 39,452ms | — | 5,045ms | 11ms | ~458.6x > 262,144 | 260,019ms | 256,854ms | — | 20,025ms | 22ms | ~910.2x > > Passes all unit tests: > > `.\gradlew.bat :controls:test` > `.\gradlew.bat :systemTests:test` > > Thank you!
chuckyschluz has updated the pull request incrementally with one additional commit since the last revision: Revert "move processContinguousRanges into the main function body" This reverts commit b519d7356de6d5ede3572ebebbd9af434d7f6532. ------------- Changes: - all: https://git.openjdk.org/jfx/pull/2100/files - new: https://git.openjdk.org/jfx/pull/2100/files/b519d735..a68901be Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=2100&range=04 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2100&range=03-04 Stats: 19 lines in 1 file changed: 9 ins; 8 del; 2 mod Patch: https://git.openjdk.org/jfx/pull/2100.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2100/head:pull/2100 PR: https://git.openjdk.org/jfx/pull/2100
