From 1b477cbadbbda09cbbb4492008092e60f0d49c93 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 24 Nov 2020 10:16:33 +0100 Subject: [PATCH] QmlDesigner: Don't copy the target It is to costly. It is not thread save but we think there will be no race condition. To improve the code we should capture only the needed data and copy that. Change-Id: Ide9c640a98c2aab6fbf25beedc9f533b695b9f02 Reviewed-by: Tim Jenssen --- .../components/itemlibrary/itemlibraryview.cpp | 8 ++------ .../designercore/imagecache/imagecachecollector.cpp | 6 +++--- .../designercore/imagecache/imagecachecollector.h | 6 +++--- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 2799cc345d6..5360417432a 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -96,12 +96,8 @@ void ItemLibraryView::modelAttached(Model *model) auto target = QmlDesignerPlugin::instance()->currentDesignDocument()->currentTarget(); m_imageCacheData->cache.clean(); - if (target) { - auto clonedTarget = std::make_unique( - target->project(), target->kit()->clone(), ProjectExplorer::Target::_constructor_tag{}); - - m_imageCacheData->collector.setTarget(std::move(clonedTarget)); - } + if (target) + m_imageCacheData->collector.setTarget(target); m_widget->clearSearchFilter(); m_widget->setModel(model); diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp index 55d44d7d49f..fb7367822ba 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp @@ -99,7 +99,7 @@ void ImageCacheCollector::start(Utils::SmallStringView name, m_connectionManager.setCallback(std::move(captureCallback)); - nodeInstanceView.setTarget(m_target.get()); + nodeInstanceView.setTarget(m_target.data()); nodeInstanceView.setCrashCallback(abortCallback); model->setNodeInstanceView(&nodeInstanceView); @@ -115,9 +115,9 @@ void ImageCacheCollector::start(Utils::SmallStringView name, abortCallback(); } -void ImageCacheCollector::setTarget(std::unique_ptr target) +void ImageCacheCollector::setTarget(ProjectExplorer::Target *target) { - m_target = std::move(target); + m_target = target; } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h index d7f19e17a7c..82756c7d22b 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h @@ -27,7 +27,7 @@ #include "imagecachecollectorinterface.h" -#include +#include QT_BEGIN_NAMESPACE class QTextDocument; @@ -57,11 +57,11 @@ public: CaptureCallback captureCallback, AbortCallback abortCallback) override; - void setTarget(std::unique_ptr target); + void setTarget(ProjectExplorer::Target *target); private: ImageCacheConnectionManager &m_connectionManager; - std::unique_ptr m_target; + QPointer m_target; }; } // namespace QmlDesigner