From 965a5cc5ad40a163c789cef80394b6c69e131c77 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 14 Jan 2019 10:16:38 +0100 Subject: [PATCH] Inline QMetaObjectPrivate::signalOffset() This saves one more function call in activate(). before after string based connect: 2436 2380 pointer based connect: 3265 3160 not connected: 400 307 disconnected: 489 404 5 slots connected: 4515 4522 Change-Id: I4789c7400497c2aa08886ea964af5e5e4703eeab Reviewed-by: Thiago Macieira Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qmetaobject.cpp | 9 +-------- src/corelib/kernel/qmetaobject_p.h | 8 +++++++- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index f366d2fe49..cc396d9239 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -814,6 +814,7 @@ int QMetaObjectPrivate::indexOfConstructor(const QMetaObject *m, const QByteArra } /*! + \fn int QMetaObjectPrivate::signalOffset(const QMetaObject *m) \internal \since 5.0 @@ -823,14 +824,6 @@ int QMetaObjectPrivate::indexOfConstructor(const QMetaObject *m, const QByteArra Similar to QMetaObject::methodOffset(), but non-signal methods are excluded. */ -int QMetaObjectPrivate::signalOffset(const QMetaObject *m) -{ - Q_ASSERT(m != 0); - int offset = 0; - for (m = m->d.superdata; m; m = m->d.superdata) - offset += priv(m->d.data)->signalCount; - return offset; -} /*! \internal diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h index 0cd9da2eac..56e3d6cb44 100644 --- a/src/corelib/kernel/qmetaobject_p.h +++ b/src/corelib/kernel/qmetaobject_p.h @@ -208,7 +208,13 @@ struct QMetaObjectPrivate static int indexOfConstructor(const QMetaObject *m, const QByteArray &name, int argc, const QArgumentType *types); Q_CORE_EXPORT static QMetaMethod signal(const QMetaObject *m, int signal_index); - Q_CORE_EXPORT static int signalOffset(const QMetaObject *m); + static inline int signalOffset(const QMetaObject *m) { + Q_ASSERT(m != nullptr); + int offset = 0; + for (m = m->d.superdata; m; m = m->d.superdata) + offset += reinterpret_cast(m->d.data)->signalCount; + return offset; + } Q_CORE_EXPORT static int absoluteSignalCount(const QMetaObject *m); Q_CORE_EXPORT static int signalIndex(const QMetaMethod &m); static bool checkConnectArgs(int signalArgc, const QArgumentType *signalTypes,