forked from qt-creator/qt-creator
AutoTest: Optimize TestCodeParser::scanForTests
In case of loading a Creator project, after the Scanning For Tests finished, the scanForTests() called by TestCodeParser::onFinished() freezed the main thread for about 1 second. In this case requestRemoval() signal was emitted nearly 1000 times. Optimize the internals: 1. Don't emit requestRemoval() for every single file but emit it just once passing a QSet<FilePath> instead. 2. Adapt some other callees and callers to work on QSet<FilePath> instead on a single FilePath. This change constraints the freeze to about 2 ms. Change-Id: If23b85b495c125d82eb3c8b5a6912349df122745 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -307,24 +307,20 @@ void TestCodeParser::scanForTests(const FilePaths &fileList, const QList<ITestPa
|
||||
TestTreeModel::instance()->updateCheckStateCache();
|
||||
if (isFullParse) {
|
||||
// remove qml files as they will be found automatically by the referencing cpp file
|
||||
list = Utils::filtered(list, [](const FilePath &fn) {
|
||||
return !fn.endsWith(".qml");
|
||||
});
|
||||
list = Utils::filtered(list, [](const FilePath &fn) { return !fn.endsWith(".qml"); });
|
||||
if (!parsers.isEmpty()) {
|
||||
for (ITestParser *parser : parsers) {
|
||||
for (ITestParser *parser : parsers)
|
||||
parser->framework()->rootNode()->markForRemovalRecursively(true);
|
||||
}
|
||||
} else {
|
||||
emit requestRemoveAllFrameworkItems();
|
||||
}
|
||||
} else if (!parsers.isEmpty()) {
|
||||
const auto set = Utils::toSet(list);
|
||||
for (ITestParser *parser: parsers) {
|
||||
for (const FilePath &filePath : std::as_const(list))
|
||||
parser->framework()->rootNode()->markForRemovalRecursively(filePath);
|
||||
parser->framework()->rootNode()->markForRemovalRecursively(set);
|
||||
}
|
||||
} else {
|
||||
for (const FilePath &filePath : std::as_const(list))
|
||||
emit requestRemoval(filePath);
|
||||
emit requestRemoval(Utils::toSet(list));
|
||||
}
|
||||
|
||||
QTC_ASSERT(!(isFullParse && list.isEmpty()), onFinished(true); return);
|
||||
|
||||
Reference in New Issue
Block a user