Hi,
I found the class that is refreshing all the diagram [1] (There is a TODO suggesting to refresh only a part of the diagram)
ð
I removed this method and didn’t see obvious regressions. What is the catch?
I also found a class that seems to call refresh on label too many times [2]
ð
Is there a reason for calling the refresh label many times ? (In a Requirement creation, it will call refresh label 3 times for each property)
Regards,
Benoit
1:
org.eclipse.papyrus.infra.gmfdiag.css.engine.ExtendedCSSEngineImpl
/**
*
{@inheritDoc}
*
* Handles a notification that an Element has changed.
*
* Source: GMFElementAdapter
*/
@Override
public
void notifyChange(Element
elementAdapter) {
resetCache();
//
TODO: We should only refresh a subset of the cache
// FIXME: It seems the refresh can create
a deadlock in some cases
Diagram
diagram =
AdapterUtils.adapt(elementAdapter,
Diagram.class,
null);
Set<?
extends DiagramEditPart>
diagramEditParts = PapyrusDiagramEditPart.getDiagramEditPartsFor(diagram);
if (!diagramEditParts.isEmpty())
{
//
TODO: Contextual refresh more specific than the diagram?
for (DiagramEditPart
next :
diagramEditParts) {
DiagramHelper.scheduleRefresh(next);
}
}
else {
DiagramHelper.scheduleRefresh();
}
}
2:
org.eclipse.papyrus.uml.diagram.stereotype.edition.editpart.AppliedStereotypeMultilinePropertyEditPart
L820
protected
void handleNotificationEvent(Notification
event) {
refreshLabel();
Object
feature =
event.getFeature();
if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature))
{
Integer
c = (Integer)
event.getNewValue();
setFontColor(DiagramColorRegistry.getInstance().getColor(c));
}
else
if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature))
{
refreshUnderline();
}
else
if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature))
{
refreshStrikeThrough();
}
else
if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature)
|| NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature)
|| NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature)
|| NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature))
{
refreshFont();
}
else {
if (getParser() !=
null && getParser().isAffectingEvent(event,
getParserOptions().intValue())) {
refreshLabel();
}
if (getParser()
instanceof
ISemanticParser) {
ISemanticParser modelParser = (ISemanticParser)
getParser();
if (modelParser.areSemanticElementsAffected(null,
event)) {
removeSemanticListeners();
if (resolveSemanticElement() !=
null) {
addSemanticListeners();
}
refreshLabel();
}
}
}
super.handleNotificationEvent(event);
}
Hi everyone,
I’m having some performance issues in SysML 1.4. The basic use case is creating some SysML 1.4 stereotypes elements.
I used jvm monitor [1] to make a sample analyze [4]
It seems that most of the time is lost in StereotypeDisplayUtil [2] (either it’s called to often, either there is something wrong inside)
I looked in the code, and know I have some questions:
-
A diagram seems to be refreshed for each element creation. Is it expected (“normal”)? (seems a lot of useless refresh in most use cases)
-
Is there tests for StereotypeDisplayUtil? (I didn’t find a StereotypeDisplayUtilTest class)
-
A stereotype Compartment seems to be linked to stereotype. Why isn’t it directly linked to a stereotype application?
-
The monitor report didn’t show any sysml14 classes in the
Hot spots. But I may probably have a bad configuration in SysML 1.4, any ideas/suggestions?
-
Is there a recommended way to add performance tests/benchmark in Papyrus? (for example using [3])
Regards,
Benoit
1 :
http://jvmmonitor.org/
2 : org.eclipse.papyrus.uml.diagram.common.stereotype.display.helper.StereotypeDisplayUtil
3 :http://openjdk.java.net/projects/code-tools/jmh/
4 :
