X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/832e157ecd1a1640b82425358b20fff416a2f8b7..bff373d598c031cb1:/src/tests/kfileitemmodelbenchmark.cpp diff --git a/src/tests/kfileitemmodelbenchmark.cpp b/src/tests/kfileitemmodelbenchmark.cpp index b73485efb..64ad116f6 100644 --- a/src/tests/kfileitemmodelbenchmark.cpp +++ b/src/tests/kfileitemmodelbenchmark.cpp @@ -21,14 +21,11 @@ #include #include -#include #include #include "kitemviews/kfileitemmodel.h" #include "kitemviews/private/kfileitemmodelsortalgorithm.h" -#include "testdir.h" - void myMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg) { Q_UNUSED(context); @@ -62,7 +59,6 @@ public: private slots: void insertAndRemoveManyItems_data(); void insertAndRemoveManyItems(); - void insertManyChildItems(); private: static KFileItemList createFileItemList(const QStringList& fileNames, const QString& urlPrefix = QLatin1String("file:///")); @@ -82,8 +78,7 @@ void KFileItemModelBenchmark::insertAndRemoveManyItems_data() QTest::addColumn("expectedItemsRemoved"); QList sizes; - sizes << 1000 << 4000 << 16000 << 64000 << 256000; - //sizes << 50000 << 100000 << 150000 << 200000 << 250000; + sizes << 100000; foreach (int n, sizes) { QStringList allStrings; @@ -169,8 +164,8 @@ void KFileItemModelBenchmark::insertAndRemoveManyItems() model.m_naturalSorting = false; model.setRoles({"text"}); - QSignalSpy spyItemsInserted(&model, SIGNAL(itemsInserted(KItemRangeList))); - QSignalSpy spyItemsRemoved(&model, SIGNAL(itemsRemoved(KItemRangeList))); + QSignalSpy spyItemsInserted(&model, &KFileItemModel::itemsInserted); + QSignalSpy spyItemsRemoved(&model, &KFileItemModel::itemsRemoved); QBENCHMARK { model.slotClear(); @@ -209,113 +204,6 @@ void KFileItemModelBenchmark::insertAndRemoveManyItems() } } -void KFileItemModelBenchmark::insertManyChildItems() -{ - // TODO: this function needs to be adjusted to the changes in KFileItemModel - // (replacement of slotNewItems(KFileItemList) by slotItemsAdded(KUrl,KFileItemList)) - // Currently, this function tries to insert child items of multiple - // directories by invoking the slot only once. -#if 0 - qInstallMsgHandler(myMessageOutput); - - KFileItemModel model; - - // Avoid overhead caused by natural sorting. - model.m_naturalSorting = false; - - QSet modelRoles = model.roles(); - modelRoles << "isExpanded" << "isExpandable" << "expandedParentsCount"; - model.setRoles(modelRoles); - model.setSortDirectoriesFirst(false); - - // Create a test folder with a 3-level tree structure of folders. - TestDir testFolder; - int numberOfFolders = 0; - - QStringList subFolderNames; - subFolderNames << "a/" << "b/" << "c/" << "d/"; - - foreach (const QString& s1, subFolderNames) { - ++numberOfFolders; - foreach (const QString& s2, subFolderNames) { - ++numberOfFolders; - foreach (const QString& s3, subFolderNames) { - testFolder.createDir("level-1-" + s1 + "level-2-" + s2 + "level-3-" + s3); - ++numberOfFolders; - } - } - } - - // Open the folder in the model and expand all subfolders. - model.loadDirectory(testFolder.url()); - QVERIFY(QTest::kWaitForSignal(&model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout)); - - int index = 0; - while (index < model.count()) { - if (model.isExpandable(index)) { - model.setExpanded(index, true); - - if (!model.data(index).value("text").toString().startsWith("level-3")) { - // New subfolders will appear unless we are on the final level already. - QVERIFY(QTest::kWaitForSignal(&model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout)); - } - - QVERIFY(model.isExpanded(index)); - } - ++index; - } - - QCOMPARE(model.count(), numberOfFolders); - - // Create a list of many file items, which will be added to each of the - // "level 1", "level 2", and "level 3" folders. - const int filesPerDirectory = 500; - QStringList allStrings; - for (int i = 0; i < filesPerDirectory; ++i) { - allStrings << QString::number(i); - } - allStrings.sort(); - - KFileItemList newItems; - - // Also keep track of all expected items, including the existing - // folders, to verify the final state of the model. - KFileItemList allExpectedItems; - - for (int i = 0; i < model.count(); ++i) { - const KFileItem folderItem = model.fileItem(i); - allExpectedItems << folderItem; - - const KUrl folderUrl = folderItem.url(); - KFileItemList itemsInFolder = createFileItemList(allStrings, folderUrl.url(KUrl::AddTrailingSlash)); - - newItems.append(itemsInFolder); - allExpectedItems.append(itemsInFolder); - } - - // Bring the items into random order. - std::random_device rd; - std::mt19937 g(rd()); - std::shuffle(newItems.begin(), newItems.end(), g); - - // Measure how long it takes to insert and then remove all files. - QBENCHMARK { - model.slotNewItems(newItems); - model.slotCompleted(); - - QCOMPARE(model.count(), allExpectedItems.count()); - QVERIFY(model.isConsistent()); - for (int i = 0; i < model.count(); ++i) { - QCOMPARE(model.fileItem(i), allExpectedItems.at(i)); - } - - model.slotItemsDeleted(newItems); - QCOMPARE(model.count(), numberOfFolders); - QVERIFY(model.isConsistent()); - } -#endif -} - KFileItemList KFileItemModelBenchmark::createFileItemList(const QStringList& fileNames, const QString& prefix) { // Suppress 'file does not exist anymore' messages from KFileItemPrivate::init().