From df9e8ab9d6c0da757bad4c1815e9705c92cc5345 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Thu, 12 Jul 2012 22:06:21 +0200 Subject: [PATCH] statemachine: Micro-optimization for signal transition connect It's silly to call one virtual function plus one function that walks the inheritance chain, on every signal transition connect and disconnect, when the method offset of the internal QSignalEventGenerator class cannot change. Change-Id: Ic4e83bdc6ab445ea8ca00f3d8da3031250621e2f Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/statemachine/qstatemachine.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index de056aa..3ab108a 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -1746,8 +1746,8 @@ void QStateMachinePrivate::registerSignalTransition(QSignalTransition *transitio if (connectedSignalIndexes.at(signalIndex) == 0) { if (!signalEventGenerator) signalEventGenerator = new QSignalEventGenerator(q); - bool ok = QMetaObject::connect(sender, signalIndex, signalEventGenerator, - signalEventGenerator->metaObject()->methodOffset()); + static const int generatorMethodOffset = QSignalEventGenerator::staticMetaObject.methodOffset(); + bool ok = QMetaObject::connect(sender, signalIndex, signalEventGenerator, generatorMethodOffset); if (!ok) { #ifdef QSTATEMACHINE_DEBUG qDebug() << q << ": FAILED to add signal transition from" << transition->sourceState() @@ -1787,8 +1787,8 @@ void QStateMachinePrivate::unregisterSignalTransition(QSignalTransition *transit Q_ASSERT(connectedSignalIndexes.at(signalIndex) != 0); if (--connectedSignalIndexes[signalIndex] == 0) { Q_ASSERT(signalEventGenerator != 0); - QMetaObject::disconnect(sender, signalIndex, signalEventGenerator, - signalEventGenerator->metaObject()->methodOffset()); + static const int generatorMethodOffset = QSignalEventGenerator::staticMetaObject.methodOffset(); + QMetaObject::disconnect(sender, signalIndex, signalEventGenerator, generatorMethodOffset); int sum = 0; for (int i = 0; i < connectedSignalIndexes.size(); ++i) sum += connectedSignalIndexes.at(i); -- 2.7.4