documentit/node_modules/speedometer/index.js

35 lines
857 B
JavaScript
Raw Normal View History

2018-01-05 18:48:13 +00:00
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
}
}