Speed up tst_qcoreapplication

It was emitting signals from a thread for 15 seconds.
Doing this 10 times should be enough, and way faster.
Also a race made it sometimes wait 15 seconds while nothing was happening,
and then it would still succeed; the new code prevents this from happening.

Change-Id: Ib36785dd8090047c760ddcca44fc805efaef1bd8
Merge-request: 4
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
Reviewed-on: http://codereview.qt.nokia.com/1989
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
This commit is contained in:
David Faure 2011-07-21 16:56:55 +02:00 committed by Qt by Nokia
parent cfbdb4cc8a
commit 74a6fe79d9

View File

@ -361,26 +361,25 @@ class DeliverInDefinedOrderObject : public QObject
QPointer<QThread> thread;
int count;
int startCount;
int loopLevel;
public:
DeliverInDefinedOrderObject(QObject *parent)
: QObject(parent), thread(0), count(0)
: QObject(parent), thread(0), count(0), startCount(0), loopLevel(0)
{ }
~DeliverInDefinedOrderObject()
{
if (!thread.isNull())
thread->wait();
}
signals:
void done();
public slots:
void start()
void startThread()
{
QVERIFY(!thread);
thread = new DeliverInDefinedOrderThread();
connect(thread, SIGNAL(progress(int)), this, SLOT(threadProgress(int)));
connect(thread, SIGNAL(finished()), this, SLOT(threadFinished()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(thread, SIGNAL(destroyed()), this, SLOT(start()));
connect(thread, SIGNAL(destroyed()), this, SLOT(threadDestroyed()));
thread->start();
QCoreApplication::postEvent(this, new QEvent(QEvent::MaxUser), -1);
@ -398,21 +397,34 @@ public slots:
{
QVERIFY(count == 7);
count = 0;
thread->deleteLater();
QCoreApplication::postEvent(this, new QEvent(QEvent::MaxUser), -1);
}
void threadDestroyed()
{
if (++startCount < 20)
startThread();
else
emit done();
}
public:
bool event(QEvent *event)
{
switch (event->type()) {
case QEvent::User:
{
(void) QEventLoop().exec();
break;
{
++loopLevel;
if (loopLevel == 2) {
// Ready. Starts a thread that emits (queued) signals, which should be handled in order
startThread();
}
case QEvent::User + 1:
QCoreApplication::postEvent(this, new QEvent(QEvent::MaxUser), -1);
(void) QEventLoop().exec();
break;
}
default:
break;
}
@ -430,11 +442,8 @@ void tst_QCoreApplication::deliverInDefinedOrder()
// causes sendPostedEvents() to recurse twice
QCoreApplication::postEvent(&obj, new QEvent(QEvent::User));
QCoreApplication::postEvent(&obj, new QEvent(QEvent::User));
// starts a thread that emits (queued) signals, which should be handled in order
obj.start();
// run for 15 seconds
QTimer::singleShot(15000, &app, SLOT(quit()));
QObject::connect(&obj, SIGNAL(done()), &app, SLOT(quit()));
app.exec();
}
#endif // QT_NO_QTHREAD
@ -524,7 +533,7 @@ void tst_QCoreApplication::processEventsAlwaysSendsPostedEvents()
QCoreApplication::processEvents();
QCOMPARE(object.counter, i);
++i;
} while (t.elapsed() < 3000);
} while (t.elapsed() < 1000);
}
void tst_QCoreApplication::reexec()