RFR: 8197991: Selecting many items in a TableView is very slow [v5]

Kevin Rushforth kcr at openjdk.java.net
Thu Jan 6 21:36:23 UTC 2022


On Thu, 6 Jan 2022 08:17:53 GMT, Abhinay Agarwal <duke at openjdk.java.net> wrote:

>> This work improves the performance of `MultipleSelectionModel`  over large data sets by caching some values and avoiding unnecessary calls to `SelectedIndicesList#size`. It further improves the performance by reducing the number of iterations required to find the index of an element in the BitSet.
>> 
>> The work is based on [an abandoned patch](https://github.com/openjdk/jfx/pull/127) submitted by @yososs
>> 
>> There are currently 2 manual tests for this fix.
>
> Abhinay Agarwal has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Remove commented out method. Document constructors.
>  - Add tests

The fix looks good. I left a few comments on the tests.

modules/javafx.controls/src/test/java/test/javafx/scene/control/MultipleSelectionModelImplTest.java line 1427:

> 1425:         assertTrue(model.isSelected(2));
> 1426:         assertTrue(model.isSelected(5));
> 1427:         assertFalse(model.isSelected(0));

I recommend to also check the size.

modules/javafx.controls/src/test/java/test/javafx/scene/control/MultipleSelectionModelImplTest.java line 1436:

> 1434:         model.clearSelection();
> 1435: 
> 1436:         assertTrue(model.getSelectedIndices().isEmpty());

I recommend to also check the size.

tests/manual/controls/SelectTableViewTest.java line 40:

> 38: public class SelectTableViewTest extends Application {
> 39: 
> 40:     final int ROW_COUNT = 700_000;

This count is too large, even with the fix. I recommend changing it to something smaller (no more than `70_000`, which matches what you did for `SelectListViewTest`).

tests/manual/controls/SelectTableViewTest.java line 101:

> 99:         long t = System.currentTimeMillis();
> 100:         tableView.getSelectionModel().selectAll();
> 101:         System.out.println("time:"+ (System.currentTimeMillis() - t));

Minor: space before the `+` here and a few places below (also in the other test as noted).

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

PR: https://git.openjdk.java.net/jfx/pull/673


More information about the openjfx-dev mailing list