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()