[PATCH] QLibraryInfo: speed up checking if ":/qt/etc/qt.conf" resource exists
authorThiago Macieira <thiago.macieira@intel.com>
Fri, 24 Jan 2025 19:07:58 +0000 (11:07 -0800)
committerPatrick Franz <deltaone@debian.org>
Sat, 1 Mar 2025 11:21:39 +0000 (12:21 +0100)
Go straight for QResource, because this is run very early in Qt's
initialization, usually as a result of some debug message, via
QLoggingRegistry::initializeRules(). This bypasses the need to create
QResourceFileEnginePrivate, QResourceFileEngine, QFileInfoPrivate, and
QFileInfo, all of which would end up in this .isValid() call.

Additionally, I'm making it query in the C locale, which will also avoid
initializing the system & default QLocales. If a resource exists in any
language, the C locale query will find it.

Task-number: QTBUG-133206
Change-Id: I434b498903d793c12d35fffd3e297bfdbdc1b6fe
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit d59e640c868f3db2d661970f3d34a22013d49053)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit ae2502b4ad3d1215211bf4ed44037a40f52a313d)

Gbp-Pq: Name upstream_qlibraryinfo_speedup.patch

src/corelib/global/qlibraryinfo.cpp

index 94f3e60deba52b880e21ac01134a9446e89535e1..5f6042be29dffff6fb3934ed0ec116f5d0d94911 100644 (file)
@@ -6,6 +6,7 @@
 #include "qstringlist.h"
 #include "qfile.h"
 #if QT_CONFIG(settings)
+#include "qresource.h"
 #include "qsettings.h"
 #endif
 #include "qlibraryinfo.h"
@@ -103,7 +104,7 @@ static std::unique_ptr<QSettings> findConfiguration()
         return std::make_unique<QSettings>(*qtconfManualPath, QSettings::IniFormat);
 
     QString qtconfig = QStringLiteral(":/qt/etc/qt.conf");
-    if (QFile::exists(qtconfig))
+    if (QResource(qtconfig, QLocale::c()).isValid())
         return std::make_unique<QSettings>(qtconfig, QSettings::IniFormat);
 #ifdef Q_OS_DARWIN
     CFBundleRef bundleRef = CFBundleGetMainBundle();