Este es un método robusto, que utiliza el método requestAnimationFrame.
function calcFPS(opts){
var requestFrame = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame;
if (!requestFrame) return true; // Check if "true" is returned;
// pick default FPS, show error, etc...
function checker(){
if (index--) requestFrame(checker);
else {
// var result = 3*Math.round(count*1000/3/(performance.now()-start));
var result = count*1000/(performance.now()- start);
if (typeof opts.callback === "function") opts.callback(result);
console.log("Calculated: "+result+" frames per second");
}
}
if (!opts) opts = {};
var count = opts.count||60, index = count, start = performance.now();
checker();
}
Cuanto mayor sea el valor de count
, más preciso será el valor de la FPS, y el más largo de la prueba se llevará a FPS.
La lógica adicional se puede utilizar para redondear a 15/12, es decir, 24, 30, 48, 60 120 ... FPS.
Aquí está la versión compilada (con redondeo a 3 FPS):
function calcFPS(a){function b(){if(f--)c(b);else{var e=3*Math.round(1E3*d/3/(performance.now()-g));"function"===typeof a.callback&&a.callback(e);console.log("Calculated: "+e+" frames per second")}}var c=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;if(!c)return!0;a||(a={});var d=a.count||60,f=d,g=performance.now();b()}
usados de esta manera:
calcFPS(); // Only logs to console (you can remove the console log,
// making this call redundant)
calcFPS({count: 30}); // Manually set count (the test should take 500ms
// on a 60FPS monitor
calcFPS({callback: useFPS}); // Specify a callback so you can use the
// FPS number value
var FPS = 0, err = calcFPS({count: 120, callback: fps => FPS = fps});
if (err) FPS = 30;
La pregunta no es "cómo", sino "por qué" . Especialmente para este último. – ThiefMaster
¿Quizás usando Native Client junto con JavaScript? – Shaz
No puedo imaginar una situación en la que desee ejecutar una devolución de llamada en la actualización de cuadros ... ¿Qué función desea llamar 60 veces por segundo? Tienes que estar llamando ALGO para contar hasta X fotogramas después de todo (suponiendo que puedas obtener esta información en primer lugar. – colinross