mirror of https://github.com/qt/qt3d.git
Renderer::doRender scene3dBlocking fixes
-Reorder sleep and locks -Properly protect isFrameQueueComplete lookup -Reread queueIsEmpty which could have been updated Change-Id: I2b5a52284bbb3ddb48483c5bf73779e335c8bdda Task-number: QTBUG-71294 Reviewed-by: Christian Andersen <csandersen3@gmail.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
This commit is contained in:
parent
fd9f66d17d
commit
726be38f77
|
|
@ -629,18 +629,21 @@ void Renderer::doRender(bool scene3dBlocking)
|
|||
// Lock the mutex to protect access to the renderQueue while we look for its state
|
||||
QMutexLocker locker(m_renderQueue->mutex());
|
||||
bool queueIsComplete = m_renderQueue->isFrameQueueComplete();
|
||||
const bool queueIsEmpty = m_renderQueue->targetRenderViewCount() == 0;
|
||||
bool queueIsEmpty = m_renderQueue->targetRenderViewCount() == 0;
|
||||
|
||||
// Scene3D Blocking Mode
|
||||
if (scene3dBlocking && !queueIsComplete && !queueIsEmpty) {
|
||||
int i = 0;
|
||||
// We wait at most 10ms to avoid a case we could never recover from
|
||||
while (!queueIsComplete && i++ < 10) {
|
||||
QThread::msleep(1);
|
||||
while (!queueIsComplete && !queueIsEmpty && i++ < 10) {
|
||||
qCDebug(Backend) << Q_FUNC_INFO << "Waiting for ready queue (try:" << i << "/ 10)";
|
||||
locker.unlock();
|
||||
queueIsComplete = m_renderQueue->isFrameQueueComplete();
|
||||
// Give worker threads a chance to complete the queue
|
||||
QThread::msleep(1);
|
||||
locker.relock();
|
||||
queueIsComplete = m_renderQueue->isFrameQueueComplete();
|
||||
// This could become true if we've tried to shutdown
|
||||
queueIsEmpty = m_renderQueue->targetRenderViewCount() == 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue