| Summary: | [Model Explorer] General Performance problems | ||
|---|---|---|---|
| Product: | [Modeling] Papyrus | Reporter: | Tristan Faure <faure.tristan> |
| Component: | Core | Assignee: | Mathieu Velten <mathieu.velten> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | major | ||
| Priority: | P3 | CC: | cletavernier, eclipse-bugzilla, jacques.seronievivien, mathieu.velten, raphael.faudou, sebastien.gerard |
| Version: | 0.10.0 | ||
| Target Milestone: | --- | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | backport needed on trunk | ||
| Bug Depends on: | |||
| Bug Blocks: | 365112, 426360 | ||
|
Description
Tristan Faure
Patrick, I thin k you have done some work related this issue. please, could you comment this bug and close it if ok. Thanks, Sébastien. I have worked on this bug about performance Bug 364044. Could you explained exactly what kind of performance problem you have? a drop a move, expand a subtree? we will check it and come back to you The speed of the synchronize option has been improved a lot. Please see the commented code for more infos. commited on branch 0.8, rev 6522, will be backported soon. We identified a really big problem regarding the perf of the model explorer : all the visible elements is refreshed multiple times (like 4-5 times) by calling the content provider when a single modification of the model is done. This is because the global refresh of the viewer is called for each event received in resourceSetChanged : the efficient way is to process the emf events received and only update the relevant elements. This leads to really big improvements (4-5 times faster) when there is a lot of elements displayed. This approach has been implemented in the 0.8.X-EYY branch (commited soon) and will be backported after some testing. On a side note I had to hack EMF Facet to do that because getChildren on LinkItems is cached and is not refreshed if the model has changed. It could have been relatively easy to workaround because a factory exists to create LinkItem/ModelElementItem, unfortunately there is no proper way to override this factory, and all fields of relevant classes are private... So currently my implementation use java reflection with setAccessible to modify private fields, which is more than ugly. bugfix of previous improvement : when using "enable write" on a read only resource the model explorer was not refreshed. Unfortunately there is no EMF event to catch when a resource go into writable mode so the refresh is manually launch after the enable write action. IsTableContainer and IsDiagramContainer queries performances have been improved in 767fe2bde06aad86789a9a5419665b59854e3580 - The scope of these queries has been reduced - These queries do not rely on a CrossReferencer anymore Pushed to master Not sure if this has been backported, but multiple refresh actions should not happen anymore: if multiple refresh are triggered for a single action, only one will be executed. See Bug 409472 for more details. Moreover, optimizations described in Comment 7 greatly reduce the execution time of each refresh action. I close this task. |