Extend QVariant benchmarks
authorJędrzej Nowacki <jedrzej.nowacki@nokia.com>
Wed, 12 Oct 2011 13:05:44 +0000 (15:05 +0200)
committerQt by Nokia <qt-info@nokia.com>
Mon, 24 Oct 2011 09:04:04 +0000 (11:04 +0200)
Add new cases for custom types and QStringList.

Change-Id: I79f8d415be43774e6b2488e8a6a8028bf4a5fd45
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
tests/benchmarks/corelib/kernel/qvariant/tst_qvariant.cpp

index f1c49c3..85d14b9 100644 (file)
@@ -56,16 +56,23 @@ private slots:
     void rectVariantCreation();
     void stringVariantCreation();
     void pixmapVariantCreation();
+    void stringListVariantCreation();
+    void bigClassVariantCreation();
+    void smallClassVariantCreation();
 
     void doubleVariantSetValue();
     void floatVariantSetValue();
     void rectVariantSetValue();
     void stringVariantSetValue();
+    void stringListVariantSetValue();
+    void bigClassVariantSetValue();
+    void smallClassVariantSetValue();
 
     void doubleVariantAssignment();
     void floatVariantAssignment();
     void rectVariantAssignment();
     void stringVariantAssignment();
+    void stringListVariantAssignment();
 
     void doubleVariantValue();
     void floatVariantValue();
@@ -78,6 +85,20 @@ private slots:
     void createCoreTypeCopy();
 };
 
+struct BigClass
+{
+    double n,i,e,r,o,b;
+};
+Q_STATIC_ASSERT(sizeof(BigClass) > sizeof(QVariant::Private::Data));
+Q_DECLARE_METATYPE(BigClass);
+
+struct SmallClass
+{
+    char s;
+};
+Q_STATIC_ASSERT(sizeof(SmallClass) <= sizeof(QVariant::Private::Data));
+Q_DECLARE_METATYPE(SmallClass);
+
 void tst_qvariant::testBound()
 {
     qreal d = qreal(.5);
@@ -98,6 +119,27 @@ static void variantCreation(T val)
     }
 }
 
+template <>
+void variantCreation<BigClass>(BigClass val)
+{
+    QBENCHMARK {
+        for (int i = 0; i < ITERATION_COUNT; ++i) {
+            QVariant::fromValue(val);
+        }
+    }
+}
+
+template <>
+void variantCreation<SmallClass>(SmallClass val)
+{
+    QBENCHMARK {
+        for (int i = 0; i < ITERATION_COUNT; ++i) {
+            QVariant::fromValue(val);
+        }
+    }
+}
+
+
 void tst_qvariant::doubleVariantCreation()
 {
     variantCreation<double>(0.0);
@@ -123,6 +165,21 @@ void tst_qvariant::pixmapVariantCreation()
     variantCreation<QPixmap>(QPixmap());
 }
 
+void tst_qvariant::stringListVariantCreation()
+{
+    variantCreation<QStringList>(QStringList());
+}
+
+void tst_qvariant::bigClassVariantCreation()
+{
+    variantCreation<BigClass>(BigClass());
+}
+
+void tst_qvariant::smallClassVariantCreation()
+{
+    variantCreation<SmallClass>(SmallClass());
+}
+
 template <typename T>
 static void variantSetValue(T d)
 {
@@ -154,6 +211,21 @@ void tst_qvariant::stringVariantSetValue()
     variantSetValue<QString>(QString());
 }
 
+void tst_qvariant::stringListVariantSetValue()
+{
+    variantSetValue<QStringList>(QStringList());
+}
+
+void tst_qvariant::bigClassVariantSetValue()
+{
+    variantSetValue<BigClass>(BigClass());
+}
+
+void tst_qvariant::smallClassVariantSetValue()
+{
+    variantSetValue<SmallClass>(SmallClass());
+}
+
 template <typename T>
 static void variantAssignment(T d)
 {
@@ -185,6 +257,11 @@ void tst_qvariant::stringVariantAssignment()
     variantAssignment<QString>(QString());
 }
 
+void tst_qvariant::stringListVariantAssignment()
+{
+    variantAssignment<QStringList>(QStringList());
+}
+
 void tst_qvariant::doubleVariantValue()
 {
     QVariant v(0.0);