From f8b89fa50725a8d25c76bbf96e622e061d3417a4 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Mon, 10 Oct 2011 14:33:56 +0200 Subject: Add benchmarks for QMetaType::construct() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia5883c5712e5d634b0e62189b639209eb3d5cd93 Reviewed-by: Jędrzej Nowacki --- .../corelib/kernel/qmetatype/tst_qmetatype.cpp | 49 ++++++++++++++++++++++ .../gui/kernel/qguimetatype/tst_qguimetatype.cpp | 49 ++++++++++++++++++++++ 2 files changed, 98 insertions(+) (limited to 'tests/benchmarks') diff --git a/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp index 413feba2e2..f58365b9df 100644 --- a/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -76,6 +76,11 @@ private slots: void constructCoreType(); void constructCoreTypeCopy_data(); void constructCoreTypeCopy(); + + void constructInPlace_data(); + void constructInPlace(); + void constructInPlaceCopy_data(); + void constructInPlaceCopy(); }; tst_QMetaType::tst_QMetaType() @@ -281,5 +286,49 @@ void tst_QMetaType::constructCoreTypeCopy() } } +void tst_QMetaType::constructInPlace_data() +{ + constructCoreType_data(); +} + +void tst_QMetaType::constructInPlace() +{ + QFETCH(int, typeId); + int size = QMetaType::sizeOf(typeId); + void *storage = qMallocAligned(size, 2 * sizeof(qlonglong)); + QCOMPARE(QMetaType::construct(typeId, storage, /*copy=*/0), storage); + QMetaType::destruct(typeId, storage); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) { + QMetaType::construct(typeId, storage, /*copy=*/0); + QMetaType::destruct(typeId, storage); + } + } + qFreeAligned(storage); +} + +void tst_QMetaType::constructInPlaceCopy_data() +{ + constructCoreType_data(); +} + +void tst_QMetaType::constructInPlaceCopy() +{ + QFETCH(int, typeId); + int size = QMetaType::sizeOf(typeId); + void *storage = qMallocAligned(size, 2 * sizeof(qlonglong)); + void *other = QMetaType::create(typeId); + QCOMPARE(QMetaType::construct(typeId, storage, other), storage); + QMetaType::destruct(typeId, storage); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) { + QMetaType::construct(typeId, storage, other); + QMetaType::destruct(typeId, storage); + } + } + QMetaType::destroy(typeId, other); + qFreeAligned(storage); +} + QTEST_MAIN(tst_QMetaType) #include "tst_qmetatype.moc" diff --git a/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp index b92c26ad7d..1d0a2d9330 100644 --- a/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp +++ b/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp @@ -55,6 +55,11 @@ private slots: void constructGuiType(); void constructGuiTypeCopy_data(); void constructGuiTypeCopy(); + + void constructInPlace_data(); + void constructInPlace(); + void constructInPlaceCopy_data(); + void constructInPlaceCopy(); }; tst_QGuiMetaType::tst_QGuiMetaType() @@ -109,5 +114,49 @@ void tst_QGuiMetaType::constructGuiTypeCopy() } } +void tst_QGuiMetaType::constructInPlace_data() +{ + constructGuiType_data(); +} + +void tst_QGuiMetaType::constructInPlace() +{ + QFETCH(int, typeId); + int size = QMetaType::sizeOf(typeId); + void *storage = qMallocAligned(size, 2 * sizeof(qlonglong)); + QCOMPARE(QMetaType::construct(typeId, storage, /*copy=*/0), storage); + QMetaType::destruct(typeId, storage); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) { + QMetaType::construct(typeId, storage, /*copy=*/0); + QMetaType::destruct(typeId, storage); + } + } + qFreeAligned(storage); +} + +void tst_QGuiMetaType::constructInPlaceCopy_data() +{ + constructGuiType_data(); +} + +void tst_QGuiMetaType::constructInPlaceCopy() +{ + QFETCH(int, typeId); + int size = QMetaType::sizeOf(typeId); + void *storage = qMallocAligned(size, 2 * sizeof(qlonglong)); + void *other = QMetaType::create(typeId); + QCOMPARE(QMetaType::construct(typeId, storage, other), storage); + QMetaType::destruct(typeId, storage); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) { + QMetaType::construct(typeId, storage, other); + QMetaType::destruct(typeId, storage); + } + } + QMetaType::destroy(typeId, other); + qFreeAligned(storage); +} + QTEST_MAIN(tst_QGuiMetaType) #include "tst_qguimetatype.moc" -- cgit v1.2.3