qmlfrontend/runqueue.cpp
author unc0rr
Tue, 26 Dec 2017 01:36:58 +0100
branchqmlfrontend
changeset 12861 488782d9aba9
permissions -rw-r--r--
Recreate uFLRunQueue in Qt, render previews

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