summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks
diff options
context:
space:
mode:
authorJoão Abecasis <joao.abecasis@nokia.com>2012-02-17 20:09:17 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-22 00:07:31 +0100
commit7bbe79fe5f54ed7542d935600036d3c8b401505f (patch)
treec37504bd357768150ea75b79b947ad570729ca5e /tests/benchmarks
parent9beeb3030be3e0ab6513164b785fca3ade4c90e9 (diff)
Drop file-engine abstraction from public API
This abstraction imposed serious performance penalties and is being dropped from the public API. In particular, by allowing file names to be arbitrarily hijacked by different file engines, and requiring engines to be instantiated in order to decide, it imposed unnecessary overhead on all file operations. Another flaw in the design with direct impact on performance is how engines have no way to provide (or retain) additional information obtained when querying the filesystem. In many places this has meant repeated operations on the file system, where useful information is immediately discarded to be queried again subsequently. For Qt 4.8 a major refactoring of the code base took place to allow bypassing the file-engine abstraction in select places, with considerable performance gains observed. In Qt 5 it is expected we'll be able to take this further, reaping even more benefits, but the abstraction has to go. [Dropping this now does not preclude that virtual file systems make an appearance in Qt at a later point in Qt 5's lifecycle. Hopefully with a new and improved abstraction.] Forward declarations for QFileExtension(Result) were dropped, as the classes were never used or defined. Tests using "internalized" classes will only fully run on developer builds. QFSFileEngine was removed altogether from exception safety test, as it isn't its intent to test internal API. Change-Id: Ie910e6c2628be202ea9e05366b091d6d529b246b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'tests/benchmarks')
-rw-r--r--tests/benchmarks/corelib/io/qfile/main.cpp46
-rw-r--r--tests/benchmarks/corelib/io/qfile/qfile.pro2
2 files changed, 43 insertions, 5 deletions
diff --git a/tests/benchmarks/corelib/io/qfile/main.cpp b/tests/benchmarks/corelib/io/qfile/main.cpp
index 3d16921b7f..02922e0bbd 100644
--- a/tests/benchmarks/corelib/io/qfile/main.cpp
+++ b/tests/benchmarks/corelib/io/qfile/main.cpp
@@ -41,10 +41,11 @@
#include <QDebug>
#include <QTemporaryFile>
-#include <QFSFileEngine>
#include <QString>
#include <QDirIterator>
+#include <private/qfsfileengine_p.h>
+
#include <qtest.h>
#include <stdio.h>
@@ -79,7 +80,9 @@ Q_OBJECT
public:
enum BenchmarkType {
QFileBenchmark = 1,
+#ifdef QT_BUILD_INTERNAL
QFSFileEngineBenchmark,
+#endif
Win32Benchmark,
PosixBenchmark,
QFileFromPosixBenchmark
@@ -173,7 +176,14 @@ void tst_qfile::cleanupTestCase()
}
void tst_qfile::readBigFile_QFile() { readBigFile(); }
-void tst_qfile::readBigFile_QFSFileEngine() { readBigFile(); }
+void tst_qfile::readBigFile_QFSFileEngine()
+{
+#ifdef QT_BUILD_INTERNAL
+ readBigFile();
+#else
+ QSKIP("This test requires -developer-build.");
+#endif
+}
void tst_qfile::readBigFile_posix()
{
readBigFile();
@@ -191,10 +201,15 @@ void tst_qfile::readBigFile_QFile_data()
void tst_qfile::readBigFile_QFSFileEngine_data()
{
+#ifdef QT_BUILD_INTERNAL
readBigFile_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
readBigFile_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
readBigFile_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::NotOpen);
readBigFile_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::Unbuffered);
+#else
+ QTest::addColumn<int>("dummy");
+ QTest::newRow("Test will be skipped") << -1;
+#endif
}
void tst_qfile::readBigFile_posix_data()
@@ -255,6 +270,7 @@ void tst_qfile::readBigFile()
file.close();
}
break;
+#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
QFSFileEngine fse(filename);
fse.open(QIODevice::ReadOnly|textMode|bufferedMode);
@@ -266,6 +282,7 @@ void tst_qfile::readBigFile()
fse.close();
}
break;
+#endif
case(PosixBenchmark): {
QByteArray data = filename.toLocal8Bit();
const char* cfilename = data.constData();
@@ -317,7 +334,9 @@ void tst_qfile::seek_data()
{
QTest::addColumn<tst_qfile::BenchmarkType>("testType");
QTest::newRow("QFile") << QFileBenchmark;
+#ifdef QT_BUILD_INTERNAL
QTest::newRow("QFSFileEngine") << QFSFileEngineBenchmark;
+#endif
QTest::newRow("Posix FILE*") << PosixBenchmark;
#ifdef Q_OS_WIN
QTest::newRow("Win32 API") << Win32Benchmark;
@@ -343,6 +362,7 @@ void tst_qfile::seek()
file.close();
}
break;
+#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
QFSFileEngine fse(filename);
fse.open(QIODevice::ReadOnly);
@@ -353,6 +373,7 @@ void tst_qfile::seek()
fse.close();
}
break;
+#endif
case(PosixBenchmark): {
QByteArray data = filename.toLocal8Bit();
const char* cfilename = data.constData();
@@ -396,7 +417,9 @@ void tst_qfile::open_data()
{
QTest::addColumn<tst_qfile::BenchmarkType>("testType");
QTest::newRow("QFile") << QFileBenchmark;
+#ifdef QT_BUILD_INTERNAL
QTest::newRow("QFSFileEngine") << QFSFileEngineBenchmark;
+#endif
QTest::newRow("Posix FILE*") << PosixBenchmark;
QTest::newRow("QFile from FILE*") << QFileFromPosixBenchmark;
#ifdef Q_OS_WIN
@@ -419,6 +442,7 @@ void tst_qfile::open()
}
}
break;
+#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
QBENCHMARK {
QFSFileEngine fse(filename);
@@ -427,7 +451,7 @@ void tst_qfile::open()
}
}
break;
-
+#endif
case(PosixBenchmark): {
// ensure we don't account toLocal8Bit()
QByteArray data = filename.toLocal8Bit();
@@ -477,7 +501,14 @@ void tst_qfile::open()
void tst_qfile::readSmallFiles_QFile() { readSmallFiles(); }
-void tst_qfile::readSmallFiles_QFSFileEngine() { readSmallFiles(); }
+void tst_qfile::readSmallFiles_QFSFileEngine()
+{
+#ifdef QT_BUILD_INTERNAL
+ readSmallFiles();
+#else
+ QSKIP("This test requires -developer-build.");
+#endif
+}
void tst_qfile::readSmallFiles_posix()
{
readSmallFiles();
@@ -498,10 +529,15 @@ void tst_qfile::readSmallFiles_QFile_data()
void tst_qfile::readSmallFiles_QFSFileEngine_data()
{
+#ifdef QT_BUILD_INTERNAL
readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::NotOpen);
readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::NotOpen, QIODevice::Unbuffered);
readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::NotOpen);
readSmallFiles_data(QFSFileEngineBenchmark, QIODevice::Text, QIODevice::Unbuffered);
+#else
+ QTest::addColumn<int>("dummy");
+ QTest::newRow("Test will be skipped") << -1;
+#endif
}
void tst_qfile::readSmallFiles_posix_data()
@@ -606,6 +642,7 @@ void tst_qfile::readSmallFiles()
}
}
break;
+#ifdef QT_BUILD_INTERNAL
case(QFSFileEngineBenchmark): {
QList<QFSFileEngine*> fileList;
Q_FOREACH(QString file, files) {
@@ -626,6 +663,7 @@ void tst_qfile::readSmallFiles()
}
}
break;
+#endif
case(PosixBenchmark): {
QList<FILE*> fileList;
Q_FOREACH(QString file, files) {
diff --git a/tests/benchmarks/corelib/io/qfile/qfile.pro b/tests/benchmarks/corelib/io/qfile/qfile.pro
index 933469071d..5f7b9af73f 100644
--- a/tests/benchmarks/corelib/io/qfile/qfile.pro
+++ b/tests/benchmarks/corelib/io/qfile/qfile.pro
@@ -1,6 +1,6 @@
TEMPLATE = app
TARGET = tst_bench_qfile
-QT = core testlib
+QT = core core-private testlib
win32: DEFINES+= _CRT_SECURE_NO_WARNINGS
SOURCES += main.cpp