Created
April 23, 2020 14:30
-
-
Save ezekielchentnik/4fea1bdd87e58078d04d5c54cda08e2e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fps = { | |
sampleSize : 60, | |
value : 0, | |
_sample_ : [], | |
_index_ : 0, | |
_lastTick_: false, | |
tick : function(){ | |
// if is first tick, just set tick timestamp and return | |
if( !this._lastTick_ ){ | |
this._lastTick_ = performance.now(); | |
return 0; | |
} | |
// calculate necessary values to obtain current tick FPS | |
let now = performance.now(); | |
let delta = (now - this._lastTick_)/1000; | |
let fps = 1/delta; | |
// add to fps samples, current tick fps value | |
this._sample_[ this._index_ ] = Math.round(fps); | |
// iterate samples to obtain the average | |
let average = 0; | |
for(i=0; i<this._sample_.length; i++) average += this._sample_[ i ]; | |
average = Math.round( average / this._sample_.length); | |
// set new FPS | |
this.value = average; | |
// store current timestamp | |
this._lastTick_ = now; | |
// increase sample index counter, and reset it | |
// to 0 if exceded maximum sampleSize limit | |
this._index_++; | |
if( this._index_ === this.sampleSize) this._index_ = 0; | |
return this.value; | |
} | |
} | |
// test time... | |
function loop(){ | |
let fpsValue = fps.tick(); | |
window.fps.innerHTML = fpsValue; | |
requestAnimationFrame( loop ); | |
} | |
// set FPS calulation based in the last 120 loop cicles | |
fps.sampleSize = 120; | |
// start loop | |
loop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment