aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@remarkable.com>2026-09-23 16:24:59 +0200
committerFrederik Gladhorn <frederik.gladhorn@remarkable.com>2026-09-24 18:59:58 +0000
commit2f48bf43f725c34d0fa1da8bb17ccb09fb990531 (patch)
tree12d9bd4f7cebb4515207cf72dfecee4d6f9558ea
parentc2359e4e80ce03cacde243c5f35e204d6c952c94 (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.cpp9
-rw-r--r--src/plugins/qmltooling/qmldbg_preview/qqmlpreviewservice.h2
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