diff options
| author | Frederik Gladhorn <frederik.gladhorn@remarkable.com> | 2026-09-23 16:24:59 +0200 |
|---|---|---|
| committer | Frederik Gladhorn <frederik.gladhorn@remarkable.com> | 2026-09-24 18:59:58 +0000 |
| commit | 2f48bf43f725c34d0fa1da8bb17ccb09fb990531 (patch) | |
| tree | 12d9bd4f7cebb4515207cf72dfecee4d6f9558ea | |
| parent | c2359e4e80ce03cacde243c5f35e204d6c952c94 (diff) | |
qmlpreview: do not reload all files constantly
The logic to reload a file would actually trigger a reload of all files.
In a real application of a slightly bigger size that slows down things a
lot. It triggered rebuilding the entire type registry.
Pick-to: 6.12
Change-Id: Ie484c3514d066b7950f79f4b5bba77a33d2b5213
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
| -rw-r--r-- | src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp | 9 | ||||
| -rw-r--r-- | src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp index 2e5a470248..7ce8835f1a 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.cpp @@ -78,7 +78,14 @@ void QQmlPreviewServiceImpl::messageReceived(const QByteArray &data) ? QUrl(QLatin1String("qrc") + path) : QUrl::fromLocalFile(path); - emit drop(url); + // Only a re-serve of a URL we already saw is an actual edit that needs relinking. The + // first time any file is served (e.g. while the whole app is still starting up) isn't + // dropping anything; treating it as such piles up the entire type registry as "dropped" + // and causes a mass relink storm on the first Load. + if (m_servedUrls.contains(url)) + emit drop(url); + else + m_servedUrls.insert(url); emit file(path, contents); // Remember the first .qml file as the current URL, so that a Load command diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h index 1506b816e0..cccdda619f 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h @@ -20,6 +20,7 @@ #include "qqmlpreviewfileengine.h" #include <private/qqmldebugserviceinterfaces_p.h> +#include <QtCore/qset.h> #include <memory> QT_BEGIN_NAMESPACE @@ -82,6 +83,7 @@ private: QScopedPointer<QQmlPreviewFileLoader> m_loader; std::unique_ptr<QQmlPreviewHandler> m_handler; QUrl m_currentUrl; + QSet<QUrl> m_servedUrls; }; QT_END_NAMESPACE |
