API Docs for:

File: /home/lindsay/xeolabs/xeogl-next/xeogl/src/tasks.js

import {Queue} from './utils/queue.js';

const taskQueue = new Queue(); // Task queue, which is pumped on each frame; tasks are pushed to it with calls to xeogl.schedule

const tasks = {

    /**
     Schedule a task for xeogl to run at the next frame.

     Internally, this pushes the task to a FIFO queue. Within each frame interval, xeogl processes the queue
     for a certain period of time, popping tasks and running them. After each frame interval, tasks that did not
     get a chance to run during the task are left in the queue to be run next time.

     @method scheduleTask
     @param {Function} callback Callback that runs the task.
     @param {Object} [scope] Scope for the callback.
     */
    scheduleTask(callback, scope) {
        taskQueue.push(callback);
        taskQueue.push(scope);
    },

    runTasks(until) { // Pops and processes tasks in the queue, until the given number of milliseconds has elapsed.
        let time = (new Date()).getTime();
        let callback;
        let scope;
        let tasksRun = 0;
        while (taskQueue.length > 0 && time < until) {
            callback = taskQueue.shift();
            scope = taskQueue.shift();
            if (scope) {
                callback.call(scope);
            } else {
                callback();
            }
            time = (new Date()).getTime();
            tasksRun++;
        }
        return tasksRun;
    },

    getNumTasks() {
        return taskQueue.length;
    }
};

export {tasks};