Uses rAF to interrupt the operator list execution

This commit is contained in:
Yury Delendik 2014-05-09 07:00:47 -05:00
parent abc924b5af
commit c5eb058b09
4 changed files with 28 additions and 18 deletions

View file

@ -1271,6 +1271,10 @@ var InternalRenderTask = (function InternalRenderTaskClosure() {
this.graphicsReady = false;
this.cancelled = false;
this.capability = createPromiseCapability();
// caching this-bound methods
this._continueBound = this._continue.bind(this);
this._scheduleNextBound = this._scheduleNext.bind(this);
this._nextBound = this._next.bind(this);
}
InternalRenderTask.prototype = {
@ -1309,7 +1313,7 @@ var InternalRenderTask = (function InternalRenderTaskClosure() {
operatorListChanged: function InternalRenderTask_operatorListChanged() {
if (!this.graphicsReady) {
if (!this.graphicsReadyCallback) {
this.graphicsReadyCallback = this._continue.bind(this);
this.graphicsReadyCallback = this._continueBound;
}
return;
}
@ -1330,19 +1334,23 @@ var InternalRenderTask = (function InternalRenderTaskClosure() {
return;
}
if (this.params.continueCallback) {
this.params.continueCallback(this._next.bind(this));
this.params.continueCallback(this._scheduleNextBound);
} else {
this._next();
this._scheduleNext();
}
},
_scheduleNext: function InternalRenderTask__scheduleNext() {
window.requestAnimationFrame(this._nextBound);
},
_next: function InternalRenderTask__next() {
if (this.cancelled) {
return;
}
this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList,
this.operatorListIdx,
this._continue.bind(this),
this._continueBound,
this.stepper);
if (this.operatorListIdx === this.operatorList.argsArray.length) {
this.running = false;