Fixing concurrency and test driver

This commit is contained in:
Yury Delendik 2012-04-16 14:49:55 -05:00
parent 1e96c73207
commit 357805696b
2 changed files with 18 additions and 2 deletions

View File

@ -133,6 +133,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
this.stats = new StatTimer(); this.stats = new StatTimer();
this.stats.enabled = !!globalScope.PDFJS.enableStats; this.stats.enabled = !!globalScope.PDFJS.enableStats;
this.objs = transport.objs; this.objs = transport.objs;
this.renderRequests = 0;
} }
PDFPageProxy.prototype = { PDFPageProxy.prototype = {
/** /**
@ -198,12 +199,14 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
* rendering. * rendering.
*/ */
render: function(params) { render: function(params) {
this.renderRequests++;
var promise = new Promise(); var promise = new Promise();
var stats = this.stats; var stats = this.stats;
stats.time('Overall'); stats.time('Overall');
// If there is no displayReadyPromise yet, then the operatorList was never // If there is no displayReadyPromise yet, then the operatorList was never
// requested before. Make the request and create the promise. // requested before. Make the request and create the promise.
if (!this.displayReadyPromise || this.destroyed) { if (!this.displayReadyPromise) {
this.displayReadyPromise = new Promise(); this.displayReadyPromise = new Promise();
this.destroyed = false; this.destroyed = false;
@ -213,7 +216,14 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
}); });
} }
var self = this;
function complete(error) { function complete(error) {
self.renderRequests--;
if (self.destroyed && self.renderRequests == 0) {
delete self.operatorList;
delete self.displayReadyPromise;
}
if (error) if (error)
promise.reject(error); promise.reject(error);
else else
@ -251,7 +261,6 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
// Always defer call to display() to work around bug in // Always defer call to display() to work around bug in
// Firefox error reporting from XHR callbacks. // Firefox error reporting from XHR callbacks.
setTimeout(function pageSetTimeout() { setTimeout(function pageSetTimeout() {
delete self.operatorList;
self.displayReadyPromise.resolve(); self.displayReadyPromise.resolve();
}); });
}; };
@ -340,6 +349,11 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
*/ */
destroy: function() { destroy: function() {
this.destroyed = true; this.destroyed = true;
if (this.renderRequests == 0) {
delete self.operatorList;
delete self.displayReadyPromise;
}
} }
}; };
return PDFPageProxy; return PDFPageProxy;

View File

@ -195,9 +195,11 @@ function nextPage(task, loadError) {
viewport: viewport viewport: viewport
}; };
page.render(renderContext).then(function() { page.render(renderContext).then(function() {
page.destroy();
snapshotCurrentPage(task, false); snapshotCurrentPage(task, false);
}, },
function(error) { function(error) {
page.destroy();
snapshotCurrentPage(task, 'render : ' + error); snapshotCurrentPage(task, 'render : ' + error);
}); });
}, },