steady framerate

Going to use requestAnimationFrame to try and get a steady framerate

by fschwiet

HTML

<div id="results">

JavaScript

// original code by Larry Battle 
    // Date: Mar 06, 2011
    // Purpose: Calculate standard deviation, variance, and average among an array of numbers.
    // http://bateru.com/news/2011/03/javascript-standard-deviation-variance-average-functions/
    // slightly modified to remove getNumWithSetDec usage
    var isArray = function (obj) {
        return Object.prototype.toString.call(obj) === "[object Array]";
    },
    getAverageFromNumArr = function( numArr){
        if( !isArray( numArr ) ){ return false; }
        var i = numArr.length, 
            sum = 0;
        while( i-- ){
            sum += numArr[ i ];
        }
        return sum / numArr.length;
    },
    getVariance = function( numArr){
        if( !isArray(numArr) ){ return false; }
        var avg = getAverageFromNumArr( numArr), 
            i = numArr.length,
            v = 0;
     
        while( i-- ){
            v += Math.pow( (numArr[ i ] - avg), 2 );
        }
        v /= numArr.length;
        return v;
    },
    getStandardDeviation = function( numArr){
        if( !isArray(numArr) ){ return false; }
        var stdDev = Math.sqrt( getVariance( numArr) );
        return stdDev;
    };
// end of code from Larry Battle


function getSetTimeoutBaseline(msTimeToRun, callback) {
    var startTime = window.performance.now();
    var lastTime = startTime;
    var results = [];
    
    function run() {
        var time = window.performance.now();
        results.push(time - lastTime);
        lastTime = time;
        
        if (time - startTime < msTimeToRun) {
            setTimeout(run, 0);
        } else {
            callback({
                average: getAverageFromNumArr(results),
                stddev: getStandardDeviation(results)
            });
        }
    }
    
    setTimeout(run, 0);    
}

var intendedFPS = 24;
var intendedDelay = 1000 / intendedFPS;
var constantSlop = 0;
var allowedSlop = 0;
var msToRunTest = 5000;
var firstTime;
var lastTime;
var results = [];
var...