Lazy initialize library paths
authorHarald Fernengel <harald.fernengel@nokia.com>
Fri, 27 Jul 2012 09:53:46 +0000 (11:53 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 31 Jul 2012 22:14:41 +0000 (00:14 +0200)
For a lot of command line tools, library loading is not required, so
don't waste a lot of time computing them. According to callgrind, this
makes the QCoreApplication constructor factor 6 faster, and also removes
a lot of stat() calls and other file system access.

Change-Id: I0211f5303712fa0dcfc4168cce7025283c63c9d1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/corelib/kernel/qcoreapplication.cpp

index 58d8957..4c1f159 100644 (file)
@@ -403,8 +403,9 @@ void QCoreApplicationPrivate::appendApplicationPathToLibraryPaths()
 {
 #ifndef QT_NO_LIBRARY
     QStringList *app_libpaths = coreappdata()->app_libpaths;
-    Q_ASSERT(app_libpaths);
-    QString app_location( QCoreApplication::applicationFilePath() );
+    if (!app_libpaths)
+        coreappdata()->app_libpaths = app_libpaths = new QStringList;
+    QString app_location = QCoreApplication::applicationFilePath();
     app_location.truncate(app_location.lastIndexOf(QLatin1Char('/')));
     app_location = QDir(app_location).canonicalPath();
     if (QFile::exists(app_location) && !app_libpaths->contains(app_location))
@@ -589,12 +590,8 @@ void QCoreApplication::init()
     d->threadData->eventDispatcher = QCoreApplicationPrivate::eventDispatcher;
 
 #ifndef QT_NO_LIBRARY
-    if (!coreappdata()->app_libpaths) {
-        // make sure that library paths is initialized
-        libraryPaths();
-    } else {
+    if (coreappdata()->app_libpaths)
         d->appendApplicationPathToLibraryPaths();
-    }
 #endif
 
 #ifdef QT_EVAL