Bug 101148

Summary: Performance problem with large models
Product: [Applications] umbrello Reporter: Oliver Kellogg <okellogg>
Component: generalAssignee: Umbrello Development Group <umbrello-devel>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:

Description Oliver Kellogg 2005-03-09 08:36:41 UTC
Version:            (using KDE Devel)
Installed from:    Compiled sources

Loading a model containing the main classes of ACE (http://www.cs.wustl.edu/~schmidt/ACE_wrappers/ace/) takes in excess of 20 minutes on a 1GHz Pentium Linux machine.
This is due to the new xmi.id resolution pass which was added for loading foreign XMI files.
We should look into how to make type resolution scale well (e.g. use a dictionary of pointers to unresolved references which is indexed by xmi.id instead of the current linear search.)
Comment 1 Oliver Kellogg 2005-03-19 02:13:58 UTC
CVS commit by okellogg: 

UMLListView::{slotObjectCreated,childObjectAdded}: It turns out the slowdown
was caused by calling ensureItemVisible() during UMLDoc::resolveTypes().
BUG:101148


  M +7 -3      umllistview.cpp   1.150
  M +4 -1      umlobject.cpp   1.71
  M +5 -0      umlobject.h   1.51


--- kdesdk/umbrello/umbrello/umllistview.cpp  #1.149:1.150
@@ -597,4 +597,6 @@ void UMLListView::slotObjectCreated(UMLO
         connectNewObjectsSlots(object);
         newItem = new UMLListViewItem(parentItem, object->getName(), convert_OT_LVT(type), object);
+        if (m_doc->loading())
+                return;
         ensureItemVisible(newItem);
         newItem->setOpen(true);
@@ -686,8 +688,10 @@ void UMLListView::childObjectAdded(UMLOb
                 UMLListViewItem *newItem = new UMLListViewItem(parentItem, text,
                                                                convert_OT_LVT(obj->getBaseType()), obj);
+                if (! m_doc->loading()) {
                 ensureItemVisible(newItem);
                 clearSelection();
                 setSelected(newItem, true);
         }
+        }
         connectNewObjectsSlots(obj);
 }

--- kdesdk/umbrello/umbrello/umlobject.cpp  #1.70:1.71
@@ -63,4 +63,5 @@ void UMLObject::init() {
         m_bStatic = false;
         m_bInPaste = false;
+        m_bCreationWasSignalled = false;
         m_pSecondary = NULL;
 }
@@ -328,9 +329,11 @@ QString UMLObject::getSecondaryId() cons
 
 void UMLObject::maybeSignalObjectCreated() {
-        if (m_BaseType != Uml::ot_Stereotype &&
+        if (!m_bCreationWasSignalled &&
+            m_BaseType != Uml::ot_Stereotype &&
             m_BaseType != Uml::ot_Association &&
             m_BaseType != Uml::ot_Role) {
                 UMLDoc* umldoc = UMLApp::app()->getDocument();
                 umldoc->signalUMLObjectCreated(this);
+                m_bCreationWasSignalled = true;
         }
 }

--- kdesdk/umbrello/umbrello/umlobject.h  #1.50:1.51
@@ -414,4 +414,9 @@ protected:
 
         /**
+         * Auxiliary to maybeSignalObjectCreated().
+         */
+        bool m_bCreationWasSignalled;
+
+        /**
          * Pointer to an associated object.
          * Only a few of the classes inheriting from UMLObject use this.