Check after each executed command if execution took too long already
This commit is contained in:
parent
5bae370a90
commit
8991cfad83
@ -64,10 +64,6 @@ var CanvasGraphics = (function canvasGraphics() {
|
|||||||
// before it stops and shedules a continue of execution.
|
// before it stops and shedules a continue of execution.
|
||||||
var kExecutionTime = 50;
|
var kExecutionTime = 50;
|
||||||
|
|
||||||
// Number of IR commands to execute before checking
|
|
||||||
// if we execute longer then `kExecutionTime`.
|
|
||||||
var kExecutionTimeCheck = 500;
|
|
||||||
|
|
||||||
function constructor(canvasCtx, objs) {
|
function constructor(canvasCtx, objs) {
|
||||||
this.ctx = canvasCtx;
|
this.ctx = canvasCtx;
|
||||||
this.current = new CanvasExtraState();
|
this.current = new CanvasExtraState();
|
||||||
@ -112,31 +108,33 @@ var CanvasGraphics = (function canvasGraphics() {
|
|||||||
var i = executionStartIdx || 0;
|
var i = executionStartIdx || 0;
|
||||||
var argsArrayLen = argsArray.length;
|
var argsArrayLen = argsArray.length;
|
||||||
|
|
||||||
|
// Sometimes the IRQueue to execute is empty.
|
||||||
|
if (argsArrayLen == i) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
var executionEndIdx;
|
var executionEndIdx;
|
||||||
var startTime = Date.now();
|
var startTime = Date.now();
|
||||||
|
|
||||||
var objs = this.objs;
|
var objs = this.objs;
|
||||||
|
|
||||||
do {
|
while (true) {
|
||||||
executionEndIdx = Math.min(argsArrayLen, i + kExecutionTimeCheck);
|
if (fnArray[i] !== 'dependency') {
|
||||||
|
this[fnArray[i]].apply(this, argsArray[i]);
|
||||||
|
} else {
|
||||||
|
var deps = argsArray[i];
|
||||||
|
for (var n = 0, nn = deps.length; n < nn; n++) {
|
||||||
|
var depObjId = deps[n];
|
||||||
|
|
||||||
for (i; i < executionEndIdx; i++) {
|
// If the promise isn't resolved yet, add the continueCallback
|
||||||
if (fnArray[i] !== 'dependency') {
|
// to the promise and bail out.
|
||||||
this[fnArray[i]].apply(this, argsArray[i]);
|
if (!objs.isResolved(depObjId)) {
|
||||||
} else {
|
objs.get(depObjId, continueCallback);
|
||||||
var deps = argsArray[i];
|
return i;
|
||||||
for (var n = 0, nn = deps.length; n < nn; n++) {
|
|
||||||
var depObjId = deps[n];
|
|
||||||
|
|
||||||
// If the promise isn't resolved yet, add the continueCallback
|
|
||||||
// to the promise and bail out.
|
|
||||||
if (!objs.isResolved(depObjId)) {
|
|
||||||
objs.get(depObjId, continueCallback);
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
|
||||||
// If the entire IRQueue was executed, stop as were done.
|
// If the entire IRQueue was executed, stop as were done.
|
||||||
if (i == argsArrayLen) {
|
if (i == argsArrayLen) {
|
||||||
@ -153,7 +151,7 @@ var CanvasGraphics = (function canvasGraphics() {
|
|||||||
|
|
||||||
// If the IRQueue isn't executed completly yet OR the execution time
|
// If the IRQueue isn't executed completly yet OR the execution time
|
||||||
// was short enough, do another execution round.
|
// was short enough, do another execution round.
|
||||||
} while (true);
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
endDrawing: function canvasGraphicsEndDrawing() {
|
endDrawing: function canvasGraphicsEndDrawing() {
|
||||||
|
Loading…
Reference in New Issue
Block a user