Skip to content

Instantly share code, notes, and snippets.

@MarekZeman91
Created August 19, 2025 11:10
Show Gist options
  • Save MarekZeman91/dd1a1d840f0d4faa6bf19041e38320ae to your computer and use it in GitHub Desktop.
Save MarekZeman91/dd1a1d840f0d4faa6bf19041e38320ae to your computer and use it in GitHub Desktop.
type FpsCallback = (fps: number) => void;
function measureFps() {
const _deltaArr: number[] = [];
let _time = 0;
let _isRunning = false;
let _callback: FpsCallback;
const measure = () => {
if (!_isRunning) return;
const now = performance.now();
_deltaArr.push(now - _time);
_time = now;
while (_deltaArr.length > 50) _deltaArr.shift();
if (_callback) {
const sum = _deltaArr.reduce((a, b) => a + b, 0);
const avg = 1 / (sum / _deltaArr.length / 1000);
_callback(Math.round(avg));
}
requestAnimationFrame(measure);
};
return {
isRunning: () => _isRunning,
start: (callback: FpsCallback) => {
if (_isRunning) return;
_callback = callback;
_time = performance.now() - 1;
_isRunning = true;
_deltaArr.length = 0;
requestAnimationFrame(measure);
},
stop: () => {
_isRunning = false;
_deltaArr.length = 0;
},
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment