From 57ff63bb9609fba98c738bcb2896cd6d73eb1c17 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 30 Jun 2023 11:58:41 +0200 Subject: [PATCH] Device: Don't cache qmlRunCommand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Caching makes the settings page less snappy. Also fixed searching for qml runtime if not set in QmlProjectRunConfiguration Fixes: QTCREATORBUG-29341 Change-Id: Ia3ce72f3e3b857a857f706694794304dcbf1793c Reviewed-by: hjk Reviewed-by: Tim Jenssen Reviewed-by: Robert Löhning --- .../projectexplorer/devicesupport/idevice.cpp | 23 ++++--------------- .../qmlprojectrunconfiguration.cpp | 12 +++++----- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index ebcfeb95afa..ab5eb6df35e 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -141,7 +141,7 @@ public: PortList freePorts; FilePath debugServerPath; FilePath debugDumperPath = Core::ICore::resourcePath("debugger/"); - std::optional qmlRunCommand; + FilePath qmlRunCommand; bool emptyCommandAllowed = false; QList deviceIcons; @@ -482,8 +482,7 @@ void IDevice::fromMap(const QVariantMap &map) d->debugServerPath = FilePath::fromSettings(map.value(QLatin1String(DebugServerKey))); const FilePath qmlRunCmd = FilePath::fromSettings(map.value(QLatin1String(QmlRuntimeKey))); - if (!qmlRunCmd.isEmpty()) - d->qmlRunCommand = qmlRunCmd; + d->qmlRunCommand = qmlRunCmd; d->extraData = map.value(ExtraDataKey).toMap(); } @@ -516,8 +515,7 @@ QVariantMap IDevice::toMap() const map.insert(QLatin1String(VersionKey), d->version); map.insert(QLatin1String(DebugServerKey), d->debugServerPath.toSettings()); - map.insert(QLatin1String(QmlRuntimeKey), - d->qmlRunCommand ? d->qmlRunCommand->toSettings() : FilePath().toSettings()); + map.insert(QLatin1String(QmlRuntimeKey), d->qmlRunCommand.toSettings()); map.insert(ExtraDataKey, d->extraData); @@ -607,23 +605,12 @@ void IDevice::setDebugServerPath(const FilePath &path) FilePath IDevice::qmlRunCommand() const { - if (d->qmlRunCommand) - return *d->qmlRunCommand; - - const FilePath newPath = searchExecutableInPath("qml"); - if (newPath.isEmpty()) - return {}; - - d->qmlRunCommand = newPath; - return *d->qmlRunCommand; + return d->qmlRunCommand; } void IDevice::setQmlRunCommand(const FilePath &path) { - if (path.isEmpty()) - d->qmlRunCommand.reset(); - else - d->qmlRunCommand = path; + d->qmlRunCommand = path; } void IDevice::setExtraData(Id kind, const QVariant &data) diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index e2626402f60..17f44537a15 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -207,15 +207,15 @@ FilePath QmlProjectRunConfiguration::qmlRuntimeFilePath() const // We might not have a full Qt version for building, but the device // might know what is good for running. - if (IDevice::ConstPtr dev = DeviceKitAspect::device(kit)) { + IDevice::ConstPtr dev = DeviceKitAspect::device(kit); + if (dev) { const FilePath qmlRuntime = dev->qmlRunCommand(); if (!qmlRuntime.isEmpty()) return qmlRuntime; } - // The Qt version might know. That's the "build" Qt version, - // i.e. not necessarily something the device can use, but the - // device had its chance above. + // The Qt version might know, but we need to make sure + // that the device can reach it. if (QtVersion *version = QtKitAspect::qtVersion(kit)) { // look for puppet as qmlruntime only in QtStudio Qt versions if (version->features().contains("QtStudio") && @@ -229,13 +229,13 @@ FilePath QmlProjectRunConfiguration::qmlRuntimeFilePath() const } } const FilePath qmlRuntime = version->qmlRuntimeFilePath(); - if (!qmlRuntime.isEmpty()) + if (!qmlRuntime.isEmpty() && (!dev || dev->ensureReachable(qmlRuntime))) return qmlRuntime; } // If not given explicitly by run device, nor Qt, try to pick // it from $PATH on the run device. - return "qml"; + return dev ? dev->filePath("qml").searchInPath() : "qml"; } void QmlProjectRunConfiguration::createQtVersionAspect()