Check after each executed command if execution took too long already

This commit is contained in:
Julian Viereck 2011-11-27 20:54:25 +01:00
parent 5bae370a90
commit 8991cfad83

View File

@ -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() {