diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2014-12-09 22:23:41 +0200 |
---|---|---|
committer | hjk <hjk121@nokiamail.com> | 2014-12-15 09:26:28 +0100 |
commit | 2022a18f90e4941535943ed506506537c753c1ae (patch) | |
tree | 942181fbd7c8547dd515e7aa05cd906479dc7438 /src/plugins/debugger/debuggeritemmanager.cpp | |
parent | 025766590180ce00bb659ff87d72eb10046d0d4e (diff) | |
download | qt-creator-2022a18f90e4941535943ed506506537c753c1ae.tar.gz |
Debugger: Improve initialization time
* Avoid QFileInfo where not needed
* Use a more accurate filter for QDir::entryList()
* Remove duplicate paths
* Set filters and filter types only once.
Reduces startup time by ~3%
Change-Id: I8896c08da5281e06672b7bdf6e8305ea394122a3
Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src/plugins/debugger/debuggeritemmanager.cpp')
-rw-r--r-- | src/plugins/debugger/debuggeritemmanager.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index 52f75868c5..5e61af8c51 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -227,7 +227,7 @@ void DebuggerItemManager::autoDetectGdbOrLldbDebuggers() } */ - QFileInfoList suspects; + QList<FileName> suspects; if (HostOsInfo::isMacHost()) { QProcess lldbInfo; @@ -238,32 +238,35 @@ void DebuggerItemManager::autoDetectGdbOrLldbDebuggers() lldbInfo.waitForFinished(); } else { QByteArray lPath = lldbInfo.readAll(); - suspects.append(QFileInfo(QString::fromLocal8Bit(lPath.data(), lPath.size() -1))); + const QFileInfo fi(QString::fromLocal8Bit(lPath.data(), lPath.size() -1)); + if (fi.exists() && fi.isExecutable() && !fi.isDir()) + suspects.append(FileName::fromString(fi.absoluteFilePath())); } } QStringList path = Environment::systemEnvironment().path(); + path.removeDuplicates(); + QDir dir; + dir.setNameFilters(filters); + dir.setFilter(QDir::Files | QDir::Executable); foreach (const QString &base, path) { - QDir dir(base); - dir.setNameFilters(filters); - suspects += dir.entryInfoList(); + dir.setPath(base); + foreach (const QString &entry, dir.entryList()) + suspects.append(FileName::fromString(dir.absoluteFilePath(entry))); } - foreach (const QFileInfo &fi, suspects) { - if (fi.exists() && fi.isExecutable() && !fi.isDir()) { - FileName command = FileName::fromString(fi.absoluteFilePath()); - if (findByCommand(command)) - continue; - DebuggerItem item; - item.createId(); - item.setCommand(command); - item.reinitializeFromFile(); - //: %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path - item.setDisplayName(tr("System %1 at %2") - .arg(item.engineTypeName()).arg(QDir::toNativeSeparators(fi.absoluteFilePath()))); - item.setAutoDetected(true); - addDebugger(item); - } + foreach (const FileName &command, suspects) { + if (findByCommand(command)) + continue; + DebuggerItem item; + item.createId(); + item.setCommand(command); + item.reinitializeFromFile(); + //: %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path + item.setDisplayName(tr("System %1 at %2") + .arg(item.engineTypeName()).arg(command.toUserOutput())); + item.setAutoDetected(true); + addDebugger(item); } } |