var tick = 1 var maxTick = 65535 var resolution = 4 var inc = function() { tick = (tick + 1) & maxTick } var timer = setInterval(inc, (1000 / resolution) | 0) if (timer.unref) timer.unref() module.exports = function(seconds) { var size = resolution * (seconds || 5) var buffer = [0] var pointer = 1 var last = (tick-1) & maxTick return function(delta) { var dist = (tick - last) & maxTick if (dist > size) dist = size last = tick while (dist--) { if (pointer === size) pointer = 0 buffer[pointer] = buffer[pointer === 0 ? size-1 : pointer-1] pointer++ } if (delta) buffer[pointer-1] += delta var top = buffer[pointer-1] var btm = buffer.length < size ? 0 : buffer[pointer === size ? 0 : pointer] return buffer.length < resolution ? top : (top - btm) * resolution / buffer.length } }