I worked on the Git decorator now for some time and could improve the performance with some minor tweaks. Nevertheless I want to start a discussion about the current implementation of the decorator as there are several bugs open that deal with the bad
performance of the decoration.
From my analyses I see mainly two problems:
- To decorate a single resource, a "full-blown" TreeWalk is created with a filter for this single file. The performance of this decoration thus depends on the size and complexity of the overall repository; decorating a resource in a small repository is fast
while decorating a single file in a huge project becomes slow. Maybe we have to come up with some solution that does not require building a full TreeWalk…
- When a decoration is (re-)triggered, e.g. by opening a folder in the package explorer, each resource affected by this is handled independently. For example, when browsing a folder containing 100 files, 100 TreeWalks are created and traversed (as described
above). This is caused by how Eclipse triggers these decorations, but it would be faster, if a set of resources could be decorated at once or if we could somehow manage to use a TreeWalk for more than a single file (e.g. by loosening the filter and caching
the results somewhere).
Any ideas or proposals are highly appreciated :-)
Cheers,
Philipp