Reduce loadingtime of XmlMaterialProfiles by 25%

XmlMaterialProfile did a lot of findInstanceContainers() by GUID and base_file. If base_file is always set, matching GUID is superfluous.

This shaved off 20% loading time of the application (43 vs 34 seconds) on a cached load.
This commit is contained in:
fieldOfView 2016-08-26 17:18:35 +02:00
parent 43438dd84f
commit 30a679ddf9

View file

@ -47,7 +47,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
def setReadOnly(self, read_only):
super().setReadOnly(read_only)
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(GUID = self.getMetaDataEntry("GUID")):
basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is none, this is a basefile.
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile):
container._read_only = read_only
## Overridden from InstanceContainer
@ -59,7 +60,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is none, this is a basefile.
# Update all containers that share GUID and basefile
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(GUID = self.getMetaDataEntry("GUID"), base_file = basefile):
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile):
container.setMetaData(copy.deepcopy(self._metadata))
## Overridden from InstanceContainer, similar to setMetaDataEntry.
@ -78,8 +79,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
basefile = self.getMetaDataEntry("base_file", self._id) # if basefile is none, this is a basefile.
# Update the basefile as well, this is actually what we're trying to do
# Update all containers that share GUID and basefile
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=basefile) + UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(
GUID=self.getMetaDataEntry("GUID"), base_file=basefile)
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile)
for container in containers:
container.setName(new_name)
@ -90,7 +90,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
super().setProperty(key, property_name, property_value)
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(GUID = self.getMetaDataEntry("GUID")):
basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is none, this is a basefile.
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile):
container._dirty = True
## Overridden from InstanceContainer
@ -245,6 +246,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
data = ET.fromstring(serialized)
self.addMetaDataEntry("type", "material")
self.addMetaDataEntry("base_file", self.id)
# TODO: Add material verfication
self.addMetaDataEntry("status", "unknown")
@ -341,7 +343,6 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
new_material.setName(self.getName())
new_material.setMetaData(copy.deepcopy(self.getMetaData()))
new_material.setDefinition(definition)
new_material.addMetaDataEntry("base_file", self.id)
for key, value in global_setting_values.items():
new_material.setProperty(key, "value", value, definition)
@ -388,7 +389,6 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
new_hotend_material.setName(self.getName())
new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData()))
new_hotend_material.setDefinition(definition)
new_hotend_material.addMetaDataEntry("base_file", self.id)
new_hotend_material.addMetaDataEntry("variant", variant_containers[0].id)
for key, value in global_setting_values.items():