diff -r e33bcb9d5e9c -r 488782d9aba9 qmlfrontend/runqueue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/runqueue.cpp Tue Dec 26 01:36:58 2017 +0100 @@ -0,0 +1,47 @@ +#include "runqueue.h" + +#include "flib.h" + +extern "C" { +extern RunEngine_t* flibRunEngine; +extern ipcToEngineRaw_t* flibIpcToEngineRaw; +extern ipcSetEngineBarrier_t* flibIpcSetEngineBarrier; +extern ipcRemoveBarrierFromEngineQueue_t* flibIpcRemoveBarrierFromEngineQueue; +} + +RunQueue::RunQueue(QObject* parent) + : QObject(parent) +{ +} + +void RunQueue::queue(const GameConfig& config) +{ + m_runQueue.prepend(config); + + flibIpcSetEngineBarrier(); + for (const QByteArray& b : m_runQueue.last().config()) { + flibIpcToEngineRaw(b.data(), b.size()); + } + + if (m_runQueue.size() == 1) + nextRun(); +} + +void RunQueue::onGameFinished() +{ + m_runQueue.pop_front(); + + nextRun(); +} + +void RunQueue::nextRun() +{ + if (!m_runQueue.isEmpty()) { + if (m_runQueue[0].isPreview()) + emit previewIsRendering(); + + flibIpcRemoveBarrierFromEngineQueue(); + + flibRunEngine(m_runQueue[0].argc(), m_runQueue[0].argv()); + } +}