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 <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2020-11-24 10:16:33 +01:00
committed by Tim Jenssen
parent b243a794aa
commit 1b477cbadb
3 changed files with 8 additions and 12 deletions

View File

@@ -96,12 +96,8 @@ void ItemLibraryView::modelAttached(Model *model)
auto target = QmlDesignerPlugin::instance()->currentDesignDocument()->currentTarget(); auto target = QmlDesignerPlugin::instance()->currentDesignDocument()->currentTarget();
m_imageCacheData->cache.clean(); m_imageCacheData->cache.clean();
if (target) { if (target)
auto clonedTarget = std::make_unique<ProjectExplorer::Target>( m_imageCacheData->collector.setTarget(target);
target->project(), target->kit()->clone(), ProjectExplorer::Target::_constructor_tag{});
m_imageCacheData->collector.setTarget(std::move(clonedTarget));
}
m_widget->clearSearchFilter(); m_widget->clearSearchFilter();
m_widget->setModel(model); m_widget->setModel(model);

View File

@@ -99,7 +99,7 @@ void ImageCacheCollector::start(Utils::SmallStringView name,
m_connectionManager.setCallback(std::move(captureCallback)); m_connectionManager.setCallback(std::move(captureCallback));
nodeInstanceView.setTarget(m_target.get()); nodeInstanceView.setTarget(m_target.data());
nodeInstanceView.setCrashCallback(abortCallback); nodeInstanceView.setCrashCallback(abortCallback);
model->setNodeInstanceView(&nodeInstanceView); model->setNodeInstanceView(&nodeInstanceView);
@@ -115,9 +115,9 @@ void ImageCacheCollector::start(Utils::SmallStringView name,
abortCallback(); abortCallback();
} }
void ImageCacheCollector::setTarget(std::unique_ptr<ProjectExplorer::Target> target) void ImageCacheCollector::setTarget(ProjectExplorer::Target *target)
{ {
m_target = std::move(target); m_target = target;
} }
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -27,7 +27,7 @@
#include "imagecachecollectorinterface.h" #include "imagecachecollectorinterface.h"
#include <memory> #include <QPointer>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QTextDocument; class QTextDocument;
@@ -57,11 +57,11 @@ public:
CaptureCallback captureCallback, CaptureCallback captureCallback,
AbortCallback abortCallback) override; AbortCallback abortCallback) override;
void setTarget(std::unique_ptr<ProjectExplorer::Target> target); void setTarget(ProjectExplorer::Target *target);
private: private:
ImageCacheConnectionManager &m_connectionManager; ImageCacheConnectionManager &m_connectionManager;
std::unique_ptr<ProjectExplorer::Target> m_target; QPointer<ProjectExplorer::Target> m_target;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner