Lazy initialize library paths

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>
This commit is contained in:
Harald Fernengel 2012-07-27 11:53:46 +02:00 committed by Qt by Nokia
parent 39df773eb5
commit 8fb040b6c0

View 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