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:
parent
0916394126
commit
ff50519768
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user