qmlfrontend/runqueue.cpp
author unC0Rr
Tue, 06 Nov 2018 17:00:35 +0100
changeset 14143 745c73e0e644
permissions -rw-r--r--
Start working on frontend to rust engine rewrite

#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());
    }
}