Wednesday, September 16, 2009

OnMouseMove Timer Granularity

A function to measure the average delay between one mouse move capture event in the window. If you move your mouse really, really fast, you'll discover the limits at which you can capture mouse events in your browser (OS + hardware should be factored into your results of course).

I get 2.17 ms on Ubuntu Jaunty (9.0.4) with Firefox 3.5.2.
I get 2.37 ms on Ubuntu Jaunty (9.0.4) with Opera 10.


(function(){

var bufferLimit = 1000;
var buffer = [];
var moved = function(){
buffer[ buffer.length ] = new Date().getTime();
buffer.length > bufferLimit ? (function(){
//document.removeEventListener( 'mousemove', moved, false );
//console.log( buffer );

var diff = 0;
var len = buffer.length - 1;

for( var i = 0; i < len; i++ ){
diff += buffer[ i+1 ] - buffer[ i ];
}

var meanAvg = diff / len;

document.getElementsByTagName( 'body')[ 0 ].innerHTML += 'Captured "onmousemove": ' + bufferLimit + ' times. Average delay between events: ' + meanAvg + ' ms.
';

buffer.length = 0;

})() : 0 ;
}
document.addEventListener( 'mousemove', moved, false );

})();

No comments:

Post a Comment