diff options
author | Knud Dollereder <knud.dollereder@qt.io> | 2022-02-08 12:59:50 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-02-09 17:50:13 +0000 |
commit | b36bba03ba260afc2d117f3a9ae84067f250a2ee (patch) | |
tree | 24018f53a7b190fadb6865204365fca044b20fc9 | |
parent | cea31a2c4f16a8cdba279b2834cc3f795b22cf13 (diff) |
QmlDesigner: Improve performance of ConnectionManager
This is a pertial cherry-pick from master.
See commit: b9d59edeb16675c3c1442b36c63c156cd8236d04
I removed the changes to the process deletion.
This requires an extra cleanup patch in master.
Change-Id: If845ea44f483c5d3c646595ff9298bcdd3dfd59a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
4 files changed, 17 insertions, 19 deletions
diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp b/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp index 7db7913c56..eb994376ea 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp @@ -53,17 +53,18 @@ void ConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServerPro { BaseConnectionManager::setUp(nodeInstanceServerProxy, qrcMappingString, target, view); - m_localServer = std::make_unique<QLocalServer>(); - QString socketToken(QUuid::createUuid().toString()); - m_localServer->listen(socketToken); - m_localServer->setMaxPendingConnections(3); - PuppetCreator puppetCreator(target, view->model()); puppetCreator.setQrcMappingString(qrcMappingString); puppetCreator.createQml2PuppetExecutableIfMissing(); for (Connection &connection : m_connections) { + + QString socketToken(QUuid::createUuid().toString()); + connection.localServer = std::make_unique<QLocalServer>(); + connection.localServer->listen(socketToken); + connection.localServer->setMaxPendingConnections(1); + connection.qmlPuppetProcess = puppetCreator.createPuppetProcess( connection.mode, socketToken, @@ -71,10 +72,11 @@ void ConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServerPro [&](int exitCode, QProcess::ExitStatus exitStatus) { processFinished(exitCode, exitStatus, connection.name); }); + } - const int second = 1000; + const int second = 1000; + for (Connection &connection : m_connections) { int waitConstant = 8 * second; - if (!connection.qmlPuppetProcess->waitForStarted(waitConstant)) { closeSocketsAndKillProcesses(); showCannotConnectToPuppetWarningAndSwitchToEditMode(); @@ -84,11 +86,11 @@ void ConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServerPro waitConstant /= 2; bool connectedToPuppet = true; - if (!m_localServer->hasPendingConnections()) - connectedToPuppet = m_localServer->waitForNewConnection(waitConstant); + if (!connection.localServer->hasPendingConnections()) + connectedToPuppet = connection.localServer->waitForNewConnection(waitConstant); if (connectedToPuppet) { - connection.socket.reset(m_localServer->nextPendingConnection()); + connection.socket.reset(connection.localServer->nextPendingConnection()); QObject::connect(connection.socket.get(), &QIODevice::readyRead, this, [&] { readDataStream(connection); }); @@ -97,9 +99,8 @@ void ConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServerPro showCannotConnectToPuppetWarningAndSwitchToEditMode(); return; } + connection.localServer->close(); } - - m_localServer->close(); } void ConnectionManager::shutDown() @@ -107,11 +108,6 @@ void ConnectionManager::shutDown() BaseConnectionManager::shutDown(); closeSocketsAndKillProcesses(); - - m_localServer.reset(); - - for (Connection &connection : m_connections) - connection.clear(); } void ConnectionManager::writeCommand(const QVariant &command) diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanager.h b/src/plugins/qmldesigner/designercore/instances/connectionmanager.h index 4f25724adb..604f787ede 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanager.h +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanager.h @@ -70,8 +70,6 @@ private: void closeSocketsAndKillProcesses(); private: - std::unique_ptr<QLocalServer> m_localServer; - std::vector<Connection> m_connections; quint32 m_writeCommandCounter = 0; }; diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp index 43ff7f48a2..a0d578aa4d 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp @@ -26,6 +26,7 @@ #include "connectionmanagerinterface.h" #include <QLocalSocket> +#include <QLocalServer> #include <QTimer> namespace QmlDesigner { @@ -45,6 +46,7 @@ void ConnectionManagerInterface::Connection::clear() { qmlPuppetProcess.reset(); socket.reset(); + localServer.reset(); blockSize = 0; lastReadCommandCounter = 0; timer.reset(); diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h index ce4206ca98..1edaf7f730 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h @@ -30,6 +30,7 @@ QT_BEGIN_NAMESPACE class QLocalSocket; +class QLocalServer; QT_END_NAMESPACE namespace ProjectExplorer { @@ -59,6 +60,7 @@ public: QString mode; QProcessUniquePointer qmlPuppetProcess; std::unique_ptr<QLocalSocket> socket; + std::unique_ptr<QLocalServer> localServer; quint32 blockSize = 0; quint32 lastReadCommandCounter = 0; std::unique_ptr<QTimer> timer; |