]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Frame Dropper
authorTanner Linsley <tannerlinsley@gmail.com>
Sun, 12 Apr 2015 00:34:06 +0000 (18:34 -0600)
committerTanner Linsley <tannerlinsley@gmail.com>
Sun, 12 Apr 2015 00:34:06 +0000 (18:34 -0600)
src/Chart.Core.js

index 36f58723c733b6ebfc5963464dc1a2959de327cd..6635e1bd837ca725fba12cb16f714d0224d7bc8c 100755 (executable)
        });
 
        Chart.animationService = {
+               frameDuration: 17,
                animations: [],
+               dropFrames: 0,
                addAnimation: function(chart, animationObject) {
                        for (var index = 0; index < this.animations.length; ++ index){
                                if (this.animations[index].chart === chart){
                },
                startDigest: function() {
 
+                       var startTime = Date.now();
+                       var framesToDrop = 0;
+
+                       if(this.dropFrames > 1){
+                               framesToDrop = Math.floor(this.dropFrames);
+                               this.dropFrames -= framesToDrop;
+                       }
+
                        for (var i = 0; i < this.animations.length; i++) {
 
                                var currentAnimation = this.animations[i];
                                if (currentAnimation.animationObject.currentStep === null){
                                        currentAnimation.animationObject.currentStep = 0;
                                } else {
-                                       currentAnimation.animationObject.currentStep++;
+                                       currentAnimation.animationObject.currentStep += 1 + framesToDrop;
                                }
                                
                                currentAnimation.animationObject.render(currentAnimation.animationObject);
                                }
                        }
 
+                       var endTime = Date.now();
+                       var delay = endTime - startTime - this.frameDuration;
+                       var frameDelay = delay / this.frameDuration;
+
+                       if(frameDelay > 1){
+                               this.dropFrames += frameDelay;
+                       }
+
                        // Do we have more stuff to animate?
                        if (this.animations.length > 0){
                                requestAnimationFrame(this.startDigest);