Frame-rate limiter for m.mount/m.route

This commit is contained in:
Pat Cavit 2016-05-17 14:49:48 -07:00
parent 5ec06e7c08
commit db609b9142
5 changed files with 147 additions and 13 deletions

35
limiter.js Normal file
View file

@ -0,0 +1,35 @@
var FRAME_BUDGET = 16 // 60 frames per second = 1 call per 16 ms
module.exports = function($window, render) {
var rAF = $window.requestAnimationFrame || $window.setTimeout
var cAF = $window.cancelAnimationFrame || $window.clearTimeout
var last = 0
var pending
return function() {
var now = new Date()
// First render, OR if the time since the last render is greater
// than the frame budget
// just immediately render
if(!last || now - last > FRAME_BUDGET) {
last = now;
return render()
}
// Redraw already pending, abort
if(pending) {
return
}
// Schedule a redraw for the next tick
pending = rAF(function() {
render()
last = new Date()
pending = null
}, FRAME_BUDGET - (now - last))
}
}