Commit e8a69119 authored by Määttä Antti's avatar Määttä Antti Committed by Sean Harmer
Browse files

Fix tst_renderqueue::concurrentQueueAccess autotest


Convert QWaitConditions to QSemaphores so that the threads involved do not
have to enter the wait conditions in a particular order.

Task-number: QTBUG-53915
Change-Id: Id362f417f39d4ebccce9ff92a19cb6fc7c70ed8a
Reviewed-by: default avatarTomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: default avatarJanne Koskinen <janne.p.koskinen@theqtcompany.com>
Reviewed-by: default avatarSean Harmer <sean.harmer@kdab.com>
Showing with 7 additions and 15 deletions
......@@ -138,9 +138,8 @@ class SimpleWorker : public QThread
{
Q_OBJECT
public:
QWaitCondition m_waitTimeToSubmit;
QWaitCondition m_waitToFillQueue;
QMutex m_mutex;
QSemaphore m_waitSubmit;
QSemaphore m_waitQueue;
Qt3DRender::Render::RenderQueue *m_renderQueues;
public Q_SLOTS:
......@@ -148,9 +147,7 @@ public Q_SLOTS:
void run() Q_DECL_FINAL // In Thread
{
for (int i = 0; i < 5; i++) {
QMutexLocker lock(&m_mutex);
m_waitToFillQueue.wait(&m_mutex);
lock.unlock();
m_waitQueue.acquire();
QVERIFY(m_renderQueues->currentRenderViewCount() == 0);
QVERIFY(!m_renderQueues->isFrameQueueComplete());
......@@ -168,7 +165,7 @@ public Q_SLOTS:
}
QVERIFY(m_renderQueues->isFrameQueueComplete());
m_waitTimeToSubmit.wakeOne();
m_waitSubmit.release();
}
}
};
......@@ -187,18 +184,13 @@ void tst_RenderQueue::concurrentQueueAccess()
QVERIFY(jobsThread->m_renderQueues->targetRenderViewCount() == renderQueue->targetRenderViewCount());
QVERIFY(jobsThread->m_renderQueues->currentRenderViewCount() == renderQueue->currentRenderViewCount());
// Start thread
jobsThread->start();
QThread::msleep(500); // To be sure the thread is properly started
jobsThread->m_waitToFillQueue.wakeAll();
jobsThread->m_waitQueue.release();
for (int i = 0; i < 5; ++i) {
QMutexLocker lock(&jobsThread->m_mutex);
jobsThread->m_waitTimeToSubmit.wait(&jobsThread->m_mutex);
lock.unlock();
jobsThread->m_waitSubmit.acquire();
// WHEN unlocked
// THEN
......@@ -208,7 +200,7 @@ void tst_RenderQueue::concurrentQueueAccess()
// reset queue for next frame
renderQueue->reset();
renderQueue->setTargetRenderViewCount(7);
jobsThread->m_waitToFillQueue.wakeAll();
jobsThread->m_waitQueue.release();
}
jobsThread->wait();
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment