summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/corelib/kernel')
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/main.cpp92
1 files changed, 74 insertions, 18 deletions
diff --git a/tests/benchmarks/corelib/kernel/qobject/main.cpp b/tests/benchmarks/corelib/kernel/qobject/main.cpp
index 7ca4144a19..13ba073eb4 100644
--- a/tests/benchmarks/corelib/kernel/qobject/main.cpp
+++ b/tests/benchmarks/corelib/kernel/qobject/main.cpp
@@ -63,6 +63,10 @@ private slots:
void connect_disconnect_benchmark();
};
+struct Functor {
+ void operator()(){}
+};
+
void QObjectBenchmark::signal_slot_benchmark_data()
{
QTest::addColumn<int>("type");
@@ -70,6 +74,8 @@ void QObjectBenchmark::signal_slot_benchmark_data()
QTest::newRow("single signal/slot") << 1;
QTest::newRow("multi signal/slot") << 2;
QTest::newRow("unconnected signal") << 3;
+ QTest::newRow("single signal/ptr") << 4;
+ QTest::newRow("functor") << 5;
}
void QObjectBenchmark::signal_slot_benchmark()
@@ -78,10 +84,17 @@ void QObjectBenchmark::signal_slot_benchmark()
Object singleObject;
Object multiObject;
+ Functor functor;
singleObject.setObjectName("single");
multiObject.setObjectName("multi");
- singleObject.connect(&singleObject, SIGNAL(signal0()), SLOT(slot0()));
+ if (type == 5) {
+ QObject::connect(&singleObject, &Object::signal0, functor);
+ } else if (type == 4) {
+ QObject::connect(&singleObject, &Object::signal0, &singleObject, &Object::slot0);
+ } else {
+ singleObject.connect(&singleObject, SIGNAL(signal0()), SLOT(slot0()));
+ }
multiObject.connect(&multiObject, SIGNAL(signal0()), SLOT(slot0()));
// multiObject.connect(&multiObject, SIGNAL(signal0()), SLOT(signal1()));
@@ -119,6 +132,10 @@ void QObjectBenchmark::signal_slot_benchmark()
QBENCHMARK {
singleObject.emitSignal1();
}
+ } else if (type == 4 || type == 5) {
+ QBENCHMARK {
+ singleObject.emitSignal0();
+ }
}
}
@@ -157,26 +174,65 @@ void QObjectBenchmark::dynamic_property_benchmark()
void QObjectBenchmark::connect_disconnect_benchmark_data()
{
- QTest::addColumn<QByteArray>("signal");
- const QMetaObject *mo = &QTreeView::staticMetaObject;
- for (int i = 0; i < mo->methodCount(); ++i) {
- QMetaMethod method = mo->method(i);
- if (method.methodType() != QMetaMethod::Signal)
- continue;
- QByteArray sig = method.signature();
- QTest::newRow(sig) << sig;
- }
-}
+ QTest::addColumn<int>("type");
+ QTest::newRow("normalized signature") << 0;
+ QTest::newRow("unormalized signature") << 1;
+ QTest::newRow("function pointer") << 2;
+ QTest::newRow("normalized signature/handle") << 3;
+ QTest::newRow("unormalized signature/handle") << 4;
+ QTest::newRow("function pointer/handle") << 5;
+ QTest::newRow("functor/handle") << 6;}
void QObjectBenchmark::connect_disconnect_benchmark()
{
- QFETCH(QByteArray, signal);
- signal.prepend('2');
- const char *p = signal.constData();
- QTreeView obj;
- QBENCHMARK {
- QObject::connect(&obj, p, &obj, p);
- QObject::disconnect(&obj, p, &obj, p);
+ QFETCH(int, type);
+ switch (type) {
+ case 0: {
+ QTreeView obj;
+ QBENCHMARK {
+ QObject::connect (&obj, SIGNAL(viewportEntered()), &obj, SLOT(expandAll()));
+ QObject::disconnect(&obj, SIGNAL(viewportEntered()), &obj, SLOT(expandAll()));
+ }
+ } break;
+ case 1: {
+ QTreeView obj;
+ QBENCHMARK {
+ QObject::connect (&obj, SIGNAL(viewportEntered( )), &obj, SLOT(expandAll( )));
+ QObject::disconnect(&obj, SIGNAL(viewportEntered( )), &obj, SLOT(expandAll( )));
+ }
+ } break;
+ case 2: {
+ QTreeView obj;
+ QBENCHMARK {
+ QObject::connect (&obj, &QAbstractItemView::viewportEntered, &obj, &QTreeView::expandAll);
+ QObject::disconnect(&obj, &QAbstractItemView::viewportEntered, &obj, &QTreeView::expandAll);
+ }
+ } break;
+ case 3: {
+ QTreeView obj;
+ QBENCHMARK {
+ QObject::disconnect(QObject::connect(&obj, SIGNAL(viewportEntered()), &obj, SLOT(expandAll())));
+ }
+ } break;
+ case 4: {
+ QTreeView obj;
+ QBENCHMARK {
+ QObject::disconnect(QObject::connect(&obj, SIGNAL(viewportEntered( )), &obj, SLOT(expandAll( ))));
+ }
+ } break;
+ case 5: {
+ QTreeView obj;
+ QBENCHMARK {
+ QObject::disconnect(QObject::connect(&obj, &QAbstractItemView::viewportEntered, &obj, &QTreeView::expandAll));
+ }
+ } break;
+ case 6: {
+ QTreeView obj;
+ Functor functor;
+ QBENCHMARK {
+ QObject::disconnect(QObject::connect(&obj, &QAbstractItemView::viewportEntered, functor));
+ }
+ } break;
}
}