statemachine: Micro-optimization for signal transition connect
authorKent Hansen <kent.hansen@nokia.com>
Thu, 12 Jul 2012 20:06:21 +0000 (22:06 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 13 Jul 2012 10:09:42 +0000 (12:09 +0200)
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 <eskil.abrahamsen-blomfeldt@nokia.com>
src/corelib/statemachine/qstatemachine.cpp

index de056aa..3ab108a 100644 (file)
@@ -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);