X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9f24c02a752584fc3ef82063d42262f91b493eae..16a3aea6a629a91aab937be5c111b64b3ed6cf86:/src/tests/kfileitemmodelbenchmark.cpp diff --git a/src/tests/kfileitemmodelbenchmark.cpp b/src/tests/kfileitemmodelbenchmark.cpp index 66918b6ee..8dfb4f622 100644 --- a/src/tests/kfileitemmodelbenchmark.cpp +++ b/src/tests/kfileitemmodelbenchmark.cpp @@ -18,37 +18,34 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include +#include +#include + +#include #include "kitemviews/kfileitemmodel.h" #include "kitemviews/private/kfileitemmodelsortalgorithm.h" -#include "testdir.h" - -#include - -void myMessageOutput(QtMsgType type, const char* msg) +void myMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg) { + Q_UNUSED(context) + switch (type) { case QtDebugMsg: break; case QtWarningMsg: break; case QtCriticalMsg: - fprintf(stderr, "Critical: %s\n", msg); + fprintf(stderr, "Critical: %s\n", msg.toLocal8Bit().data()); break; case QtFatalMsg: - fprintf(stderr, "Fatal: %s\n", msg); + fprintf(stderr, "Fatal: %s\n", msg.toLocal8Bit().data()); abort(); default: break; } } -namespace { - const int DefaultTimeout = 5000; -}; - Q_DECLARE_METATYPE(KFileItemList) Q_DECLARE_METATYPE(KItemRangeList) @@ -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; @@ -167,10 +162,10 @@ void KFileItemModelBenchmark::insertAndRemoveManyItems() // Avoid overhead caused by natural sorting // and determining the isDir/isLink roles. model.m_naturalSorting = false; - model.setRoles(QSet() << "text"); + 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,126 +204,19 @@ 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. - KRandomSequence randomSequence(0); - randomSequence.randomize(newItems); - - // 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(). - qInstallMsgHandler(myMessageOutput); + qInstallMessageHandler(myMessageOutput); KFileItemList result; foreach (const QString& name, fileNames) { - const KUrl url(prefix + name); - const KFileItem item(url, QString(), KFileItem::Unknown); + const KFileItem item(QUrl::fromLocalFile(prefix + name), QString(), KFileItem::Unknown); result << item; } return result; } -QTEST_KDEMAIN(KFileItemModelBenchmark, NoGUI) +QTEST_MAIN(KFileItemModelBenchmark) #include "kfileitemmodelbenchmark.moc"