From f5f89d34fa98600a95c4b1b8b62bd794ab8c8e3b Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 20 Aug 2009 18:25:32 +0200 Subject: Optimize contrcuction of variant of type pointer. Constructing a variant of a pointer type was previously quite slow: QVariant had no information it was a pointer. It had to create a QVariant::PrivateShared, ask the QMetaType for a constructor (slow as it involve locking mutextes) and allocate a pointer. By detecting a pointer in qVariantFromValue, we can store the pointer value dirrectly in the Variant union. We then avoid 2 allocations, and the expensive locking in QMetaType::construct Reviewed-by: Thierry --- tests/auto/qvariant/tst_qvariant.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'tests/auto/qvariant') diff --git a/tests/auto/qvariant/tst_qvariant.cpp b/tests/auto/qvariant/tst_qvariant.cpp index 709cba9c75..1722ad39c8 100644 --- a/tests/auto/qvariant/tst_qvariant.cpp +++ b/tests/auto/qvariant/tst_qvariant.cpp @@ -2747,6 +2747,7 @@ void tst_QVariant::dataStar() const v2 = qVariantFromValue(p1); QVERIFY(v1 == v2); + delete p1; } void tst_QVariant::canConvertQStringList() const -- cgit v1.2.3 From d1ced31e867f7e2bbd56daf46c7bf3cc924c8546 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 21 Aug 2009 12:48:35 +0200 Subject: Fix memory leak When the variant is invalid the shared is not destroyed. We even can avoid the creation of the PrivateShared if we know the variant is invalid Reviewed-by: Thierry --- tests/auto/qvariant/tst_qvariant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/auto/qvariant') diff --git a/tests/auto/qvariant/tst_qvariant.cpp b/tests/auto/qvariant/tst_qvariant.cpp index 1722ad39c8..5ed0dcdeb1 100644 --- a/tests/auto/qvariant/tst_qvariant.cpp +++ b/tests/auto/qvariant/tst_qvariant.cpp @@ -2622,7 +2622,7 @@ void tst_QVariant::qvariant_cast_QObject_data() { QTest::addColumn("data"); QTest::addColumn("success"); - QTest::newRow("from QObject") << QVariant(QMetaType::QObjectStar, new QObject) << true; + QTest::newRow("from QObject") << QVariant(QMetaType::QObjectStar, new QObject(this)) << true; QTest::newRow("from String") << QVariant(QLatin1String("1, 2, 3")) << false; QTest::newRow("from int") << QVariant((int) 123) << false; } -- cgit v1.2.3