diff options
author | Olivier Goffart <ogoffart@trolltech.com> | 2009-11-25 21:38:39 +0100 |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2009-11-26 10:28:54 +0100 |
commit | 0f06d08a3c5eb4d0397406ed559cfaba6e137492 (patch) | |
tree | 839a9181f83e7e8fdb407e5cc97ecec2439a4bb8 /src/corelib/kernel/qobject_p.h | |
parent | 88c9a52646ef1c695ef0a7461ed1f6a7ce923375 (diff) | |
download | qt4-tools-0f06d08a3c5eb4d0397406ed559cfaba6e137492.tar.gz |
Optimize QObjectPrivate::isSignalConnected
It can be seen in the GraphicsView benchmark.
This function has to be as fast as possible.
Make the function inline.
We do not need 64bit for the connectedSignals bit array because
it is very unlikely that an object will have more than 32 signals.
(In Qt 4.5 it could have hapenned as the slot were counting in
the index)
Reviewed-by: bnilsen
Reviewed-by: Brad
Diffstat (limited to 'src/corelib/kernel/qobject_p.h')
-rw-r--r-- | src/corelib/kernel/qobject_p.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index f08740767c..f899c78f30 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -172,7 +172,7 @@ public: } int signalIndex(const char *signalName) const; - bool isSignalConnected(int signalIdx) const; + inline bool isSignalConnected(int signalIdx) const; public: QString objectName; @@ -183,7 +183,7 @@ public: Connection *senders; // linked list of connections connected to this object Sender *currentSender; // object currently activating the object - mutable quint32 connectedSignals[2]; // 64-bit, so doesn't cause padding on 64-bit platforms + mutable ulong connectedSignals; #ifdef QT3_SUPPORT QList<QObject *> pendingChildInsertedEvents; @@ -205,6 +205,23 @@ public: int *deleteWatch; }; +/*! \internal + + Returns true if the signal with index \a signal_index from object \a sender is connected. + Signals with indices above a certain range are always considered connected (see connectedSignals + in QObjectPrivate). If a signal spy is installed, all signals are considered connected. + + \a signal_index must be the index returned by QObjectPrivate::signalIndex; +*/ +inline bool QObjectPrivate::isSignalConnected(int signal_index) const +{ + return signal_index >= (int)sizeof(connectedSignals) * 8 + || qt_signal_spy_callback_set.signal_begin_callback + || qt_signal_spy_callback_set.signal_end_callback + || (connectedSignals & (ulong(1) << signal_index)); +} + + inline void q_guard_addGuard(QGuard<QObject> *g) { QObjectPrivate *p = QObjectPrivate::get(g->o); |