Change testlib signal dumper hooks to use signal index range

Another step towards getting rid of the class method offset
computation in QMetaObject::activate().

Since QMetaObjectPrivate::signal() is private API, this also
required adding a testlib dependency on core-private (and
getting rid of the duplicated QSignalSpyCallbackSet struct).

Change-Id: I0d830f35392a6b44fc321c5285877ec0bf437100
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
Kent Hansen 2012-05-31 21:49:07 +02:00 committed by Qt by Nokia
parent 0916394126
commit ff50519768
4 changed files with 12 additions and 25 deletions

View File

@ -3299,11 +3299,9 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset,
if (sender->d_func()->blockSig) if (sender->d_func()->blockSig)
return; return;
int signal_absolute_index = methodOffset + local_signal_index;
void *empty_argv[] = { 0 }; void *empty_argv[] = { 0 };
if (qt_signal_spy_callback_set.signal_begin_callback != 0) { if (qt_signal_spy_callback_set.signal_begin_callback != 0) {
qt_signal_spy_callback_set.signal_begin_callback(sender, signal_absolute_index, qt_signal_spy_callback_set.signal_begin_callback(sender, signal_index,
argv ? argv : empty_argv); argv ? argv : empty_argv);
} }
@ -3337,7 +3335,7 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset,
if (!connectionLists.connectionLists) { if (!connectionLists.connectionLists) {
locker.unlock(); locker.unlock();
if (qt_signal_spy_callback_set.signal_end_callback != 0) if (qt_signal_spy_callback_set.signal_end_callback != 0)
qt_signal_spy_callback_set.signal_end_callback(sender, signal_absolute_index); qt_signal_spy_callback_set.signal_end_callback(sender, signal_index);
return; return;
} }
@ -3441,7 +3439,7 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset,
} }
if (qt_signal_spy_callback_set.signal_end_callback != 0) if (qt_signal_spy_callback_set.signal_end_callback != 0)
qt_signal_spy_callback_set.signal_end_callback(sender, signal_absolute_index); qt_signal_spy_callback_set.signal_end_callback(sender, signal_index);
} }

View File

@ -69,11 +69,11 @@ class QThreadData;
class QObjectConnectionListVector; class QObjectConnectionListVector;
namespace QtSharedPointer { struct ExternalRefCountData; } namespace QtSharedPointer { struct ExternalRefCountData; }
/* mirrored in QtTestLib, DON'T CHANGE without prior warning */ /* for QtTestLib */
struct QSignalSpyCallbackSet struct QSignalSpyCallbackSet
{ {
typedef void (*BeginCallback)(QObject *caller, int method_index, void **argv); typedef void (*BeginCallback)(QObject *caller, int signal_or_method_index, void **argv);
typedef void (*EndCallback)(QObject *caller, int method_index); typedef void (*EndCallback)(QObject *caller, int signal_or_method_index);
BeginCallback signal_begin_callback, BeginCallback signal_begin_callback,
slot_begin_callback; slot_begin_callback;
EndCallback signal_end_callback, EndCallback signal_end_callback,

View File

@ -49,6 +49,8 @@
#include <QtTest/private/qtestlog_p.h> #include <QtTest/private/qtestlog_p.h>
#include <QtCore/private/qmetaobject_p.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace QTest namespace QTest
@ -64,12 +66,12 @@ static int iLevel = 0;
static int ignoreLevel = 0; static int ignoreLevel = 0;
enum { IndentSpacesCount = 4 }; enum { IndentSpacesCount = 4 };
static void qSignalDumperCallback(QObject *caller, int method_index, void **argv) static void qSignalDumperCallback(QObject *caller, int signal_index, void **argv)
{ {
Q_ASSERT(caller); Q_ASSERT(argv); Q_UNUSED(argv); Q_ASSERT(caller); Q_ASSERT(argv); Q_UNUSED(argv);
const QMetaObject *mo = caller->metaObject(); const QMetaObject *mo = caller->metaObject();
Q_ASSERT(mo); Q_ASSERT(mo);
QMetaMethod member = mo->method(method_index); QMetaMethod member = QMetaObjectPrivate::signal(mo, signal_index);
Q_ASSERT(member.isValid()); Q_ASSERT(member.isValid());
if (QTest::ignoreClasses() && QTest::ignoreClasses()->contains(mo->className())) { if (QTest::ignoreClasses() && QTest::ignoreClasses()->contains(mo->className())) {
@ -151,7 +153,7 @@ static void qSignalDumperCallbackSlot(QObject *caller, int method_index, void **
qPrintMessage(str); qPrintMessage(str);
} }
static void qSignalDumperCallbackEndSignal(QObject *caller, int /*method_index*/) static void qSignalDumperCallbackEndSignal(QObject *caller, int /*signal_index*/)
{ {
Q_ASSERT(caller); Q_ASSERT(caller->metaObject()); Q_ASSERT(caller); Q_ASSERT(caller->metaObject());
if (QTest::ignoreClasses() if (QTest::ignoreClasses()
@ -166,19 +168,6 @@ static void qSignalDumperCallbackEndSignal(QObject *caller, int /*method_index*/
} }
// this struct is copied from qobject_p.h to prevent us
// from including private Qt headers.
struct QSignalSpyCallbackSet
{
typedef void (*BeginCallback)(QObject *caller, int method_index, void **argv);
typedef void (*EndCallback)(QObject *caller, int method_index);
BeginCallback signal_begin_callback,
slot_begin_callback;
EndCallback signal_end_callback,
slot_end_callback;
};
extern void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet &);
void QSignalDumper::startDump() void QSignalDumper::startDump()
{ {
static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback, static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback,

View File

@ -2,7 +2,7 @@ load(qt_module)
TARGET = QtTest TARGET = QtTest
QPRO_PWD = $$PWD QPRO_PWD = $$PWD
QT = core QT = core-private
CONFIG += module exceptions CONFIG += module exceptions
MODULE_PRI = ../modules/qt_testlib.pri MODULE_PRI = ../modules/qt_testlib.pri