Benchmark the new signal slot connection syntax.
- Added emition of a slot connected using the new syntax, as well as a functor - Replaced the old connect_disconnect_benchmark by a new one. The old one was of little interest as it tried to connect to every signal, producing a lot of similar results. The new test tests different ways of connecting and disconnecting Change-Id: I3c04c24027252308f8942bcd9562110104cdb4e9 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
This commit is contained in:
parent
55b974faa1
commit
fad19e18af
@ -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");
|
||||
|
||||
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();
|
||||
QFETCH(int, type);
|
||||
switch (type) {
|
||||
case 0: {
|
||||
QTreeView obj;
|
||||
QBENCHMARK {
|
||||
QObject::connect(&obj, p, &obj, p);
|
||||
QObject::disconnect(&obj, p, &obj, p);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user