From 7a705e9c6042b3326c9e55d3d1d6e095fd409e81 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 13 Sep 2023 12:06:12 +0200 Subject: [PATCH] QWindowsFontDatabase: avoid multiple map lookups Use the iterator-based API, and avoid a quadruple (!) lookup into a QMap. I'm aggressively cherry-picking to avoid merge clashes with an upcoming fix. Pick-to: 6.5 6.2 Change-Id: I05968f4aec9e42f84f909a1103e43ba323a9544f Reviewed-by: Volker Hilsheimer (cherry picked from commit 2bc475f94ec037890490d8c2592497ba67c87c0b) Reviewed-by: Qt Cherry-pick Bot --- src/gui/text/windows/qwindowsfontdatabase.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/text/windows/qwindowsfontdatabase.cpp b/src/gui/text/windows/qwindowsfontdatabase.cpp index 2de53be6a8a..450b39a8b61 100644 --- a/src/gui/text/windows/qwindowsfontdatabase.cpp +++ b/src/gui/text/windows/qwindowsfontdatabase.cpp @@ -1107,18 +1107,20 @@ bool QWindowsFontDatabase::fontsAlwaysScalable() const void QWindowsFontDatabase::derefUniqueFont(const QString &uniqueFont) { - if (m_uniqueFontData.contains(uniqueFont)) { - if (!m_uniqueFontData[uniqueFont].refCount.deref()) { - RemoveFontMemResourceEx(m_uniqueFontData[uniqueFont].handle); - m_uniqueFontData.remove(uniqueFont); + const auto it = m_uniqueFontData.find(uniqueFont); + if (it != m_uniqueFontData.end()) { + if (!it->refCount.deref()) { + RemoveFontMemResourceEx(it->handle); + m_uniqueFontData.erase(it); } } } void QWindowsFontDatabase::refUniqueFont(const QString &uniqueFont) { - if (m_uniqueFontData.contains(uniqueFont)) - m_uniqueFontData[uniqueFont].refCount.ref(); + const auto it = m_uniqueFontData.find(uniqueFont); + if (it != m_uniqueFontData.end()) + it->refCount.ref(); } QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const