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();
m_imageCacheData->cache.clean();
if (target) {
auto clonedTarget = std::make_unique<ProjectExplorer::Target>(
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);

View File

@@ -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<ProjectExplorer::Target> target)
void ImageCacheCollector::setTarget(ProjectExplorer::Target *target)
{
m_target = std::move(target);
m_target = target;
}
} // namespace QmlDesigner

View File

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