Bug 539724 - ContainerCheckedTreeViewer performance is bad

The performance of ContainerCheckedTreeViewer is very bad, when updating
the checked state of many of the items at the same time. If a single
checkbox is set checked or unchecked, all the parents and all the
children of that checkbox are updated. Therefore when setting the
checked state of all checkboxes (due to restoring the state of the
viewer after some filtering or similar), many of the parents and many of
the children are updated multiple times.

This change improves performance in multiple ways:
* use setRedraw() to disable repainting while multiple items are updated
in loops
* shorten the traversal over parents and children by detecting when
there will be no changes anymore to the state of the further parents or
children
* reimplement the update loop for setting the state of multiple items,
and calculate all the affected children and parents which need to be
updated once, such that their windows controls are updated only once
overall, and not once per modified item.

Overall, this makes the target platform editor content tab way more
responsive.

Change-Id: I63aa467bf875738af919a748bb33a8e22bd9cf49
Also-by: Karsten Thoms <karsten.thoms@itemis.de>
Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
1 file changed
tree: 3116023ce2e6bd8c12bb481518a424036153ac77
  1. .mvn/
  2. bundles/
  3. examples/
  4. features/
  5. releng/
  6. tests/
  7. .gitignore
  8. CONTRIBUTING
  9. CONTRIBUTING.md
  10. LICENSE
  11. NOTICE
  12. pom.xml
  13. README.md
README.md

Contributing to Eclipse Platform UI project

Thanks for your interest in this project.

Project description:

Platform UI provides the basic building blocks for user interfaces built with Eclipse.

Some of these form the Eclipse Rich Client Platform (RCP) and can be used for arbitrary rich client applications, while others are specific to the Eclipse IDE. The Platform UI codebase is built on top of the Eclipse Standard Widget Toolkit (SWT), which is developed as an independent project.

Website: http://www.eclipse.org/platform/ui/

For more information, refer to the Platform UI wiki page.

How to contribute:

Contributions to Platform UI are most welcome. There are many ways to contribute, from entering high quality bug reports, to contributing code or documentation changes. For a complete guide, see the Platform UI - How to contribute wiki page page on the team wiki.

Test dependencies

Several test plug-ins have a dependency to the Mockito and Hamcrest library. Please install them from the Orbit Download page

Currently the following versions are required:

  • org.hamcrest;bundle-version=“1.1.0”,
  • org.mockito;bundle-version=“1.8.4”,

How to build on the command line

You need Maven 3.3.1 installed. After this you can run the build via the following command:

mvn clean verify -Pbuild-individual-bundles

Developer resources:

Information regarding source code management, builds, coding standards, and more.

Contributor License Agreement:

Before your contribution can be accepted by the project, you need to create and electronically sign the Eclipse Foundation Contributor License Agreement (CLA).

Search for bugs:

This project uses Bugzilla to track ongoing development and issues.

Create a new bug:

Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome!

Contact:

Contact the project developers via the project's “dev” list.

License

[Eclipse Public License (EPL) v1.0][4]