diff options
author | Mårten Nordheim <marten.nordheim@qt.io> | 2019-05-21 15:13:39 +0200 |
---|---|---|
committer | Mårten Nordheim <marten.nordheim@qt.io> | 2019-10-21 12:40:49 +0200 |
commit | 399f8151438408894f323927296b458f4fc0b27c (patch) | |
tree | 8f4ef1a8af4a6a8a83de13f35f7b691da34e6ae5 /tests/benchmarks/corelib/io | |
parent | 9294d023956d455f90262b80110bed01c4aeac1d (diff) |
qdiriterator benchmark: test against std::filesystem
If c++17 is available and the header is available (not
experimental/filesystem) then we'll try
std::filesystem::recursive_directory_iterator as well.
Results on my PC (Windows, VS 2019):
PASS : tst_qdiriterator::posix(C:\depot\qt\main/src/corelib)
RESULT : tst_qdiriterator::posix():"C:\depot\qt\main/src/corelib":
23 msecs per iteration (total: 94, iterations: 4)
PASS : tst_qdiriterator::diriterator(C:\depot\qt\main/src/corelib)
RESULT : tst_qdiriterator::diriterator():"C:\depot\qt\main/src/corelib":
17 msecs per iteration (total: 71, iterations: 4)
PASS : tst_qdiriterator::stdRecursiveDirectoryIterator(C:\depot\qt\main/src/corelib)
RESULT : tst_qdiriterator::stdRecursiveDirectoryIterator():"C:\depot\qt\main/src/corelib":
6.7 msecs per iteration (total: 54, iterations: 8)
PASS : tst_qdiriterator::fsiterator(C:\depot\qt\main/src/corelib)
RESULT : tst_qdiriterator::fsiterator():"C:\depot\qt\main/src/corelib":
23 msecs per iteration (total: 92, iterations: 4)
And as a drive-by fix: move the 'data' function out of the private slots
so it is not invoked as a test function (it doesn't cause any problems
but is ultimately pointless).
Change-Id: Ia160ee276423ec51e35e554a4cd63d4d940c0e6a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/benchmarks/corelib/io')
-rw-r--r-- | tests/benchmarks/corelib/io/qdiriterator/main.cpp | 35 | ||||
-rw-r--r-- | tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro | 2 |
2 files changed, 36 insertions, 1 deletions
diff --git a/tests/benchmarks/corelib/io/qdiriterator/main.cpp b/tests/benchmarks/corelib/io/qdiriterator/main.cpp index eae752d99a..60c75ead4d 100644 --- a/tests/benchmarks/corelib/io/qdiriterator/main.cpp +++ b/tests/benchmarks/corelib/io/qdiriterator/main.cpp @@ -44,9 +44,19 @@ #include "qfilesystemiterator.h" +#if QT_HAS_INCLUDE(<filesystem>) && defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L +#define HAS_STD_FILESYSTEM +#endif + +#ifdef HAS_STD_FILESYSTEM +#include <filesystem> +#endif + class tst_qdiriterator : public QObject { Q_OBJECT + + void data(); private slots: void posix(); void posix_data() { data(); } @@ -54,7 +64,8 @@ private slots: void diriterator_data() { data(); } void fsiterator(); void fsiterator_data() { data(); } - void data(); + void stdRecursiveDirectoryIterator(); + void stdRecursiveDirectoryIterator_data() { data(); } }; @@ -235,6 +246,28 @@ void tst_qdiriterator::fsiterator() qDebug() << count; } +void tst_qdiriterator::stdRecursiveDirectoryIterator() +{ +#ifdef HAS_STD_FILESYSTEM + QFETCH(QByteArray, dirpath); + + int count = 0; + + QBENCHMARK { + int c = 0; + for (auto obj : std::filesystem::recursive_directory_iterator(dirpath.data())) { + if (obj.is_directory()) + continue; + c++; + } + count = c; + } + qDebug() << count; +#else + QSKIP("Not supported."); +#endif +} + QTEST_MAIN(tst_qdiriterator) #include "main.moc" diff --git a/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro b/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro index 061b22a5d1..4b28946f18 100644 --- a/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro +++ b/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro @@ -3,6 +3,8 @@ TARGET = tst_bench_qdiriterator QT = core testlib CONFIG += release +# Enable c++17 support for std::filesystem +qtConfig(c++1z): CONFIG += c++17 SOURCES += main.cpp qfilesystemiterator.cpp HEADERS += qfilesystemiterator.h |