aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2019-07-01 19:44:47 +0200
committerMarc Mutz <marc.mutz@kdab.com>2019-07-02 08:29:26 +0000
commit7fb4d91ce7206d3196f4c1444d0dc53fbf558278 (patch)
treefb8b972ea4959d4c1895e69777c1d5c8f45d2f0f
parentb85c2deccae3006468eaf3023d5b3bf802739747 (diff)
QQmlEngine: Hoist some allocating code out of critical sections
... so the lock is held for shorter durations. Add optimistic std::move()s. Change-Id: I9e09e11a6e54b7ac4be3e23f06d65b3b7abc4fc0 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/qml/qml/qqmlengine.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 4d73d72655..e726e0810d 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -1171,8 +1171,9 @@ void QQmlEnginePrivate::registerFinalizeCallback(QObject *obj, int index)
QSharedPointer<QQmlImageProviderBase> QQmlEnginePrivate::imageProvider(const QString &providerId) const
{
+ const QString providerIdLower = providerId.toLower();
QMutexLocker locker(&mutex);
- return imageProviders.value(providerId.toLower());
+ return imageProviders.value(providerIdLower);
}
#if QT_CONFIG(qml_network)
@@ -1264,8 +1265,10 @@ QNetworkAccessManager *QQmlEngine::networkAccessManager() const
void QQmlEngine::addImageProvider(const QString &providerId, QQmlImageProviderBase *provider)
{
Q_D(QQmlEngine);
+ QString providerIdLower = providerId.toLower();
+ QSharedPointer<QQmlImageProviderBase> sp(provider);
QMutexLocker locker(&d->mutex);
- d->imageProviders.insert(providerId.toLower(), QSharedPointer<QQmlImageProviderBase>(provider));
+ d->imageProviders.insert(std::move(providerIdLower), std::move(sp));
}
/*!
@@ -1276,8 +1279,9 @@ void QQmlEngine::addImageProvider(const QString &providerId, QQmlImageProviderBa
QQmlImageProviderBase *QQmlEngine::imageProvider(const QString &providerId) const
{
Q_D(const QQmlEngine);
+ const QString providerIdLower = providerId.toLower();
QMutexLocker locker(&d->mutex);
- return d->imageProviders.value(providerId.toLower()).data();
+ return d->imageProviders.value(providerIdLower).data();
}
/*!
@@ -1288,8 +1292,9 @@ QQmlImageProviderBase *QQmlEngine::imageProvider(const QString &providerId) cons
void QQmlEngine::removeImageProvider(const QString &providerId)
{
Q_D(QQmlEngine);
+ const QString providerIdLower = providerId.toLower();
QMutexLocker locker(&d->mutex);
- d->imageProviders.take(providerId.toLower());
+ d->imageProviders.take(providerIdLower);
}
/*!