1234567891011121314151617181920212223242526272829303132333435 |
- 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
- }
- }
|