summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2018-10-02 15:28:19 +0200
committerDavid Faure <david.faure@kdab.com>2018-10-04 01:07:00 +0000
commit80cc6bcec4b204e50d1f2c7460a0b91c7d9ea6f9 (patch)
tree10cc3b7d49dca7eb59a58ddb4421d2ac2f452e72 /src/gui
parent4f4a33196dc37a9405a8dbd20a1e63d36e000d2f (diff)
QIcon::addFile: don't use QMimeDatabase for every PNG being loaded
Commit 710ff392d9 introduced this fallback code for the case where the extension was empty. Let's make it happen only in that case, so that the much more common case of "foo.png" doesn't go through iconEngineFromSuffix twice, nor through QMimeDatabase (which has to load and parse an XML file in order to determine preferredSuffix(), unfortunately). Found using heaptrack. Change-Id: Iab6b71e1fa23916029c9e2ba25447a12d70f88a5 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/image/qicon.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index 14a0248600..5907d69f87 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -1078,11 +1078,12 @@ void QIcon::addFile(const QString &fileName, const QSize &size, Mode mode, State
if (!d) {
QFileInfo info(fileName);
- QIconEngine *engine = iconEngineFromSuffix(fileName, info.suffix());
+ QString suffix = info.suffix();
#ifndef QT_NO_MIMETYPE
- if (!engine)
- engine = iconEngineFromSuffix(fileName, QMimeDatabase().mimeTypeForFile(info).preferredSuffix());
+ if (suffix.isEmpty())
+ suffix = QMimeDatabase().mimeTypeForFile(info).preferredSuffix(); // determination from contents
#endif // !QT_NO_MIMETYPE
+ QIconEngine *engine = iconEngineFromSuffix(fileName, suffix);
d = new QIconPrivate(engine ? engine : new QPixmapIconEngine);
}