diff options
author | Robin Burchell <robin.burchell@crimson.no> | 2017-01-21 21:13:23 +0100 |
---|---|---|
committer | Robin Burchell <robin.burchell@crimson.no> | 2017-01-24 17:37:40 +0000 |
commit | ff1a728e957c36d566055caf922d160cbbbd7587 (patch) | |
tree | 04dfd632811d46e5e8df7ee04df014f09266d4fc /tests/benchmarks | |
parent | 6d4418243eeb87152ae159eb8e7d45be8a10b6fb (diff) | |
download | qtdeclarative-ff1a728e957c36d566055caf922d160cbbbd7587.tar.gz |
tst_compilation: Add a test for compilation of a large number of types
As I'll be touching QQmlImport, it would be good to ensure it doesn't
regress. This may also be useful for future such changes (e.g. I want to
try play around with how the implicit import is handled).
Results for me on a recent dev snapshot, 2013 rmbp:
********* Start testing of tst_compilation *********
Config: Using QtTest library 5.9.0, Qt 5.9.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 8.0.0 (clang-800.0.42.1) (Apple))
PASS : tst_compilation::initTestCase()
PASS : tst_compilation::bigimport(10, qmldir)
RESULT : tst_compilation::bigimport():"10, qmldir":
3.6 msecs per iteration (total: 59, iterations: 16)
PASS : tst_compilation::bigimport(100, qmldir)
RESULT : tst_compilation::bigimport():"100, qmldir":
54 msecs per iteration (total: 54, iterations: 1)
PASS : tst_compilation::bigimport(1000, qmldir)
RESULT : tst_compilation::bigimport():"1000, qmldir":
558 msecs per iteration (total: 558, iterations: 1)
PASS : tst_compilation::bigimport(10, noqmldir)
RESULT : tst_compilation::bigimport():"10, noqmldir":
5.0 msecs per iteration (total: 80, iterations: 16)
PASS : tst_compilation::bigimport(100, noqmldir)
RESULT : tst_compilation::bigimport():"100, noqmldir":
58 msecs per iteration (total: 58, iterations: 1)
PASS : tst_compilation::bigimport(1000, noqmldir)
RESULT : tst_compilation::bigimport():"1000, noqmldir":
558 msecs per iteration (total: 558, iterations: 1)
PASS : tst_compilation::cleanupTestCase()
Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted, 22400ms
********* Finished testing of tst_compilation *********
Change-Id: I7159e561fb13a3c48e966d5b963dc0ef1ca783e3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests/benchmarks')
-rw-r--r-- | tests/benchmarks/qml/compilation/tst_compilation.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/benchmarks/qml/compilation/tst_compilation.cpp b/tests/benchmarks/qml/compilation/tst_compilation.cpp index 61339c6f60..b28d69332c 100644 --- a/tests/benchmarks/qml/compilation/tst_compilation.cpp +++ b/tests/benchmarks/qml/compilation/tst_compilation.cpp @@ -51,6 +51,9 @@ private slots: void jsparser_data(); void jsparser(); + void bigimport_data(); + void bigimport(); + private: QQmlEngine engine; }; @@ -115,6 +118,74 @@ void tst_compilation::jsparser() } } +void tst_compilation::bigimport_data() +{ + QTest::addColumn<int>("filesToCreate"); + QTest::addColumn<bool>("writeQmldir"); + + QTest::newRow("10, qmldir") + << 10 << true; + QTest::newRow("100, qmldir") + << 100 << true; + QTest::newRow("1000, qmldir") + << 1000 << true; + + QTest::newRow("10, noqmldir") + << 10 << false; + QTest::newRow("100, noqmldir") + << 100 << false; + QTest::newRow("1000, noqmldir") + << 1000 << false; +} + +void tst_compilation::bigimport() +{ + QFETCH(int, filesToCreate); + QFETCH(bool, writeQmldir); + QTemporaryDir d; + //d.setAutoRemove(false); // for debugging + + QString p; + { + for (int i = 0; i < filesToCreate; ++i) { + QFile f(d.path() + QDir::separator() + QString::fromLatin1("Type%1.qml").arg(i)); + QVERIFY(f.open(QIODevice::WriteOnly)); + f.write("import QtQuick 2.0\n"); + f.write("import \".\"\n"); + f.write("Item {}\n"); + } + + QFile qmldir(d.path() + QDir::separator() + "qmldir"); + if (writeQmldir) + QVERIFY(qmldir.open(QIODevice::WriteOnly)); + QFile main(d.path() + QDir::separator() + "main.qml"); + QVERIFY(main.open(QIODevice::WriteOnly)); + p = QFileInfo(main).absoluteFilePath(); + //qDebug() << p; // for debugging + + main.write("import QtQuick 2.0\n"); + main.write("import \".\"\n"); + main.write("\n"); + main.write("Item {\n"); + + for (int i = 0; i < filesToCreate; ++i) { + main.write(qPrintable(QString::fromLatin1("Type%1 {}\n").arg(i))); + if (writeQmldir) + qmldir.write(qPrintable(QString::fromLatin1("Type%1 1.0 Type%1.qml\n").arg(i))); + } + + main.write("}"); + } + + QBENCHMARK { + QQmlEngine e; + QQmlComponent c(&e, p); + QCOMPARE(c.status(), QQmlComponent::Ready); + QScopedPointer<QObject> o(c.create()); + QVERIFY(o->children().count() == filesToCreate); + } +} + QTEST_MAIN(tst_compilation) #include "tst_compilation.moc" |