Mercurial > hg > svapp
comparison framework/Document.cpp @ 766:cf4e0f3c2406
Profiling points
author | Chris Cannam |
---|---|
date | Thu, 14 May 2020 16:38:48 +0100 |
parents | 6429a164b7e1 |
children | 83a7b10b7415 |
comparison
equal
deleted
inserted
replaced
765:eae885290abc | 766:cf4e0f3c2406 |
---|---|
62 this, SIGNAL(alignmentFailed(ModelId, QString))); | 62 this, SIGNAL(alignmentFailed(ModelId, QString))); |
63 } | 63 } |
64 | 64 |
65 Document::~Document() | 65 Document::~Document() |
66 { | 66 { |
67 Profiler profiler("Document::~Document"); | |
68 | |
67 //!!! Document should really own the command history. atm we | 69 //!!! Document should really own the command history. atm we |
68 //still refer to it in various places that don't have access to | 70 //still refer to it in various places that don't have access to |
69 //the document, be nice to fix that | 71 //the document, be nice to fix that |
70 | 72 |
71 #ifdef DEBUG_DOCUMENT | 73 #ifdef DEBUG_DOCUMENT |
113 } | 115 } |
114 | 116 |
115 Layer * | 117 Layer * |
116 Document::createLayer(LayerFactory::LayerType type) | 118 Document::createLayer(LayerFactory::LayerType type) |
117 { | 119 { |
120 Profiler profiler("Document::createLayer"); | |
121 | |
118 Layer *newLayer = LayerFactory::getInstance()->createLayer(type); | 122 Layer *newLayer = LayerFactory::getInstance()->createLayer(type); |
119 if (!newLayer) return nullptr; | 123 if (!newLayer) return nullptr; |
120 | 124 |
121 newLayer->setObjectName(getUniqueLayerName(newLayer->objectName())); | 125 newLayer->setObjectName(getUniqueLayerName(newLayer->objectName())); |
122 | 126 |
133 } | 137 } |
134 | 138 |
135 Layer * | 139 Layer * |
136 Document::createMainModelLayer(LayerFactory::LayerType type) | 140 Document::createMainModelLayer(LayerFactory::LayerType type) |
137 { | 141 { |
142 Profiler profiler("Document::createMainModelLayer"); | |
143 | |
138 Layer *newLayer = createLayer(type); | 144 Layer *newLayer = createLayer(type); |
139 if (!newLayer) return nullptr; | 145 if (!newLayer) return nullptr; |
140 setModel(newLayer, m_mainModel); | 146 setModel(newLayer, m_mainModel); |
141 return newLayer; | 147 return newLayer; |
142 } | 148 } |
143 | 149 |
144 Layer * | 150 Layer * |
145 Document::createImportedLayer(ModelId modelId) | 151 Document::createImportedLayer(ModelId modelId) |
146 { | 152 { |
153 Profiler profiler("Document::createImportedLayer"); | |
154 | |
147 LayerFactory::LayerTypeSet types = | 155 LayerFactory::LayerTypeSet types = |
148 LayerFactory::getInstance()->getValidLayerTypes(modelId); | 156 LayerFactory::getInstance()->getValidLayerTypes(modelId); |
149 | 157 |
150 if (types.empty()) { | 158 if (types.empty()) { |
151 SVCERR << "WARNING: Document::importLayer: no valid display layer for model" << endl; | 159 SVCERR << "WARNING: Document::importLayer: no valid display layer for model" << endl; |
178 } | 186 } |
179 | 187 |
180 Layer * | 188 Layer * |
181 Document::createEmptyLayer(LayerFactory::LayerType type) | 189 Document::createEmptyLayer(LayerFactory::LayerType type) |
182 { | 190 { |
191 Profiler profiler("Document::createEmptyLayer"); | |
192 | |
183 if (m_mainModel.isNone()) return nullptr; | 193 if (m_mainModel.isNone()) return nullptr; |
184 | 194 |
185 auto newModel = | 195 auto newModel = |
186 LayerFactory::getInstance()->createEmptyModel(type, m_mainModel); | 196 LayerFactory::getInstance()->createEmptyModel(type, m_mainModel); |
187 if (!newModel) return nullptr; | 197 if (!newModel) return nullptr; |
200 | 210 |
201 Layer * | 211 Layer * |
202 Document::createDerivedLayer(LayerFactory::LayerType type, | 212 Document::createDerivedLayer(LayerFactory::LayerType type, |
203 TransformId transform) | 213 TransformId transform) |
204 { | 214 { |
215 Profiler profiler("Document::createDerivedLayer (type)"); | |
216 | |
205 Layer *newLayer = createLayer(type); | 217 Layer *newLayer = createLayer(type); |
206 if (!newLayer) return nullptr; | 218 if (!newLayer) return nullptr; |
207 | 219 |
208 newLayer->setObjectName(getUniqueLayerName | 220 newLayer->setObjectName(getUniqueLayerName |
209 (TransformFactory::getInstance()-> | 221 (TransformFactory::getInstance()-> |
214 | 226 |
215 Layer * | 227 Layer * |
216 Document::createDerivedLayer(const Transform &transform, | 228 Document::createDerivedLayer(const Transform &transform, |
217 const ModelTransformer::Input &input) | 229 const ModelTransformer::Input &input) |
218 { | 230 { |
231 Profiler profiler("Document::createDerivedLayer (transform)"); | |
232 | |
219 Transforms transforms; | 233 Transforms transforms; |
220 transforms.push_back(transform); | 234 transforms.push_back(transform); |
221 vector<Layer *> layers = createDerivedLayers(transforms, input); | 235 vector<Layer *> layers = createDerivedLayers(transforms, input); |
222 if (layers.empty()) return nullptr; | 236 if (layers.empty()) return nullptr; |
223 else return layers[0]; | 237 else return layers[0]; |
225 | 239 |
226 vector<Layer *> | 240 vector<Layer *> |
227 Document::createDerivedLayers(const Transforms &transforms, | 241 Document::createDerivedLayers(const Transforms &transforms, |
228 const ModelTransformer::Input &input) | 242 const ModelTransformer::Input &input) |
229 { | 243 { |
244 Profiler profiler("Document::createDerivedLayers"); | |
245 | |
230 QString message; | 246 QString message; |
231 vector<ModelId> newModels = | 247 vector<ModelId> newModels = |
232 addDerivedModels(transforms, input, message, nullptr); | 248 addDerivedModels(transforms, input, message, nullptr); |
233 | 249 |
234 if (newModels.empty()) { | 250 if (newModels.empty()) { |
307 Document::LayerCreationAsyncHandle | 323 Document::LayerCreationAsyncHandle |
308 Document::createDerivedLayersAsync(const Transforms &transforms, | 324 Document::createDerivedLayersAsync(const Transforms &transforms, |
309 const ModelTransformer::Input &input, | 325 const ModelTransformer::Input &input, |
310 LayerCreationHandler *handler) | 326 LayerCreationHandler *handler) |
311 { | 327 { |
328 Profiler profiler("Document::createDerivedLayersAsync"); | |
329 | |
312 QString message; | 330 QString message; |
313 | 331 |
314 AdditionalModelConverter *amc = new AdditionalModelConverter(this, handler); | 332 AdditionalModelConverter *amc = new AdditionalModelConverter(this, handler); |
315 | 333 |
316 vector<ModelId> newModels = addDerivedModels | 334 vector<ModelId> newModels = addDerivedModels |
349 | 367 |
350 vector<Layer *> | 368 vector<Layer *> |
351 Document::createLayersForDerivedModels(vector<ModelId> newModels, | 369 Document::createLayersForDerivedModels(vector<ModelId> newModels, |
352 QStringList names) | 370 QStringList names) |
353 { | 371 { |
372 Profiler profiler("Document::createLayersForDerivedModels"); | |
373 | |
354 vector<Layer *> layers; | 374 vector<Layer *> layers; |
355 | 375 |
356 for (int i = 0; in_range_for(newModels, i); ++i) { | 376 for (int i = 0; in_range_for(newModels, i); ++i) { |
357 | 377 |
358 ModelId newModelId = newModels[i]; | 378 ModelId newModelId = newModels[i]; |
398 } | 418 } |
399 | 419 |
400 void | 420 void |
401 Document::setMainModel(ModelId modelId) | 421 Document::setMainModel(ModelId modelId) |
402 { | 422 { |
423 Profiler profiler("Document::setMainModel"); | |
424 | |
403 ModelId oldMainModel = m_mainModel; | 425 ModelId oldMainModel = m_mainModel; |
404 m_mainModel = modelId; | 426 m_mainModel = modelId; |
405 | 427 |
406 emit modelAdded(m_mainModel); | 428 emit modelAdded(m_mainModel); |
407 | 429 |
581 void | 603 void |
582 Document::addAlreadyDerivedModel(const Transform &transform, | 604 Document::addAlreadyDerivedModel(const Transform &transform, |
583 const ModelTransformer::Input &input, | 605 const ModelTransformer::Input &input, |
584 ModelId outputModelToAdd) | 606 ModelId outputModelToAdd) |
585 { | 607 { |
608 Profiler profiler("Document::addAlreadyDerivedModel"); | |
609 | |
586 if (m_models.find(outputModelToAdd) != m_models.end()) { | 610 if (m_models.find(outputModelToAdd) != m_models.end()) { |
587 SVCERR << "WARNING: Document::addAlreadyDerivedModel: Model already added" | 611 SVCERR << "WARNING: Document::addAlreadyDerivedModel: Model already added" |
588 << endl; | 612 << endl; |
589 return; | 613 return; |
590 } | 614 } |
618 } | 642 } |
619 | 643 |
620 void | 644 void |
621 Document::addNonDerivedModel(ModelId modelId) | 645 Document::addNonDerivedModel(ModelId modelId) |
622 { | 646 { |
647 Profiler profiler("Document::addNonDerivedModel"); | |
648 | |
623 if (ModelById::isa<AggregateWaveModel>(modelId)) { | 649 if (ModelById::isa<AggregateWaveModel>(modelId)) { |
624 #ifdef DEBUG_DOCUMENT | 650 #ifdef DEBUG_DOCUMENT |
625 SVCERR << "Document::addNonDerivedModel: Model " << modelId << " is an aggregate model, adding it to aggregates" << endl; | 651 SVCERR << "Document::addNonDerivedModel: Model " << modelId << " is an aggregate model, adding it to aggregates" << endl; |
626 #endif | 652 #endif |
627 m_aggregateModels.insert(modelId); | 653 m_aggregateModels.insert(modelId); |
668 } | 694 } |
669 | 695 |
670 void | 696 void |
671 Document::addAdditionalModel(ModelId modelId) | 697 Document::addAdditionalModel(ModelId modelId) |
672 { | 698 { |
699 Profiler profiler("Document::addAdditionalModel"); | |
700 | |
673 if (m_models.find(modelId) != m_models.end()) { | 701 if (m_models.find(modelId) != m_models.end()) { |
674 SVCERR << "WARNING: Document::addAdditionalModel: Model already added" | 702 SVCERR << "WARNING: Document::addAdditionalModel: Model already added" |
675 << endl; | 703 << endl; |
676 return; | 704 return; |
677 } | 705 } |
704 ModelId | 732 ModelId |
705 Document::addDerivedModel(const Transform &transform, | 733 Document::addDerivedModel(const Transform &transform, |
706 const ModelTransformer::Input &input, | 734 const ModelTransformer::Input &input, |
707 QString &message) | 735 QString &message) |
708 { | 736 { |
737 Profiler profiler("Document::addDerivedModel"); | |
738 | |
709 for (auto &rec : m_models) { | 739 for (auto &rec : m_models) { |
710 if (rec.second.transform == transform && | 740 if (rec.second.transform == transform && |
711 rec.second.source == input.getModel() && | 741 rec.second.source == input.getModel() && |
712 rec.second.channel == input.getChannel()) { | 742 rec.second.channel == input.getChannel()) { |
713 SVDEBUG << "derived model taken from map " << endl; | 743 SVDEBUG << "derived model taken from map " << endl; |
726 Document::addDerivedModels(const Transforms &transforms, | 756 Document::addDerivedModels(const Transforms &transforms, |
727 const ModelTransformer::Input &input, | 757 const ModelTransformer::Input &input, |
728 QString &message, | 758 QString &message, |
729 AdditionalModelConverter *amc) | 759 AdditionalModelConverter *amc) |
730 { | 760 { |
761 Profiler profiler("Document::addDerivedModels"); | |
762 | |
731 vector<ModelId> mm = | 763 vector<ModelId> mm = |
732 ModelTransformerFactory::getInstance()->transformMultiple | 764 ModelTransformerFactory::getInstance()->transformMultiple |
733 (transforms, input, message, amc); | 765 (transforms, input, message, amc); |
734 | 766 |
735 for (int j = 0; in_range_for(mm, j); ++j) { | 767 for (int j = 0; in_range_for(mm, j); ++j) { |
766 } | 798 } |
767 | 799 |
768 void | 800 void |
769 Document::releaseModel(ModelId modelId) | 801 Document::releaseModel(ModelId modelId) |
770 { | 802 { |
803 Profiler profiler("Document::releaseModel"); | |
804 | |
771 // This is called when a layer has been deleted or has replaced | 805 // This is called when a layer has been deleted or has replaced |
772 // its model, in order to reclaim storage for the old model. It | 806 // its model, in order to reclaim storage for the old model. It |
773 // could be a no-op without making any functional difference, as | 807 // could be a no-op without making any functional difference, as |
774 // all the models stored in the ById pool are released when the | 808 // all the models stored in the ById pool are released when the |
775 // document is deleted. But models can sometimes be large, so if | 809 // document is deleted. But models can sometimes be large, so if |
852 } | 886 } |
853 | 887 |
854 void | 888 void |
855 Document::deleteLayer(Layer *layer, bool force) | 889 Document::deleteLayer(Layer *layer, bool force) |
856 { | 890 { |
891 Profiler profiler("Document::deleteLayer"); | |
892 | |
857 if (m_layerViewMap.find(layer) != m_layerViewMap.end() && | 893 if (m_layerViewMap.find(layer) != m_layerViewMap.end() && |
858 m_layerViewMap[layer].size() > 0) { | 894 m_layerViewMap[layer].size() > 0) { |
859 | 895 |
860 if (force) { | 896 if (force) { |
861 | 897 |
912 } | 948 } |
913 | 949 |
914 void | 950 void |
915 Document::setModel(Layer *layer, ModelId modelId) | 951 Document::setModel(Layer *layer, ModelId modelId) |
916 { | 952 { |
953 Profiler profiler("Document::setModel"); | |
954 | |
917 if (!modelId.isNone() && | 955 if (!modelId.isNone() && |
918 modelId != m_mainModel && | 956 modelId != m_mainModel && |
919 m_models.find(modelId) == m_models.end()) { | 957 m_models.find(modelId) == m_models.end()) { |
920 SVCERR << "ERROR: Document::setModel: Layer " << layer | 958 SVCERR << "ERROR: Document::setModel: Layer " << layer |
921 << " (\"" << layer->objectName() | 959 << " (\"" << layer->objectName() |