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)
return;
int signal_absolute_index = methodOffset + local_signal_index;
void *empty_argv[] = { 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);
}
@ -3337,7 +3335,7 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset,
if (!connectionLists.connectionLists) {
locker.unlock();
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;
}
@ -3441,7 +3439,7 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset,
}
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;
namespace QtSharedPointer { struct ExternalRefCountData; }
/* mirrored in QtTestLib, DON'T CHANGE without prior warning */
/* for QtTestLib */
struct QSignalSpyCallbackSet
{
typedef void (*BeginCallback)(QObject *caller, int method_index, void **argv);
typedef void (*EndCallback)(QObject *caller, int method_index);
typedef void (*BeginCallback)(QObject *caller, int signal_or_method_index, void **argv);
typedef void (*EndCallback)(QObject *caller, int signal_or_method_index);
BeginCallback signal_begin_callback,
slot_begin_callback;
EndCallback signal_end_callback,

View File

@ -49,6 +49,8 @@
#include <QtTest/private/qtestlog_p.h>
#include <QtCore/private/qmetaobject_p.h>
QT_BEGIN_NAMESPACE
namespace QTest
@ -64,12 +66,12 @@ static int iLevel = 0;
static int ignoreLevel = 0;
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);
const QMetaObject *mo = caller->metaObject();
Q_ASSERT(mo);
QMetaMethod member = mo->method(method_index);
QMetaMethod member = QMetaObjectPrivate::signal(mo, signal_index);
Q_ASSERT(member.isValid());
if (QTest::ignoreClasses() && QTest::ignoreClasses()->contains(mo->className())) {
@ -151,7 +153,7 @@ static void qSignalDumperCallbackSlot(QObject *caller, int method_index, void **
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());
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()
{
static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback,

View File

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