Refactor pageNumber/pageIndex concept

This commit is contained in:
Yury Delendik 2012-04-12 10:01:07 -07:00
parent b312719d7e
commit f0687c4d50
2 changed files with 33 additions and 38 deletions

View File

@ -68,8 +68,8 @@
if (this.worker) if (this.worker)
this.worker.terminate(); this.worker.terminate();
for (var n in this.pageCache) this.pageCache = [];
delete this.pageCache[n]; this.pagePromises = [];
}, },
setupFakeWorker: function WorkerTransport_setupFakeWorker() { setupFakeWorker: function WorkerTransport_setupFakeWorker() {
// If we don't use a worker, just post/sendMessage to the main thread. // If we don't use a worker, just post/sendMessage to the main thread.
@ -92,7 +92,7 @@
function WorkerTransport_setupMessageHandler(messageHandler) { function WorkerTransport_setupMessageHandler(messageHandler) {
this.messageHandler = messageHandler; this.messageHandler = messageHandler;
messageHandler.on('doc', function transportPage(data) { messageHandler.on('getdoc', function transportDoc(data) {
var pdfInfo = data.pdfInfo; var pdfInfo = data.pdfInfo;
var pdfDocument = new PdfDocumentWrapper(pdfInfo, this); var pdfDocument = new PdfDocumentWrapper(pdfInfo, this);
this.pdfDocument = pdfDocument; this.pdfDocument = pdfDocument;
@ -102,19 +102,16 @@
messageHandler.on('getpage', function transportPage(data) { messageHandler.on('getpage', function transportPage(data) {
var pageInfo = data.pageInfo; var pageInfo = data.pageInfo;
var page = new PdfPageWrapper(pageInfo, this); var page = new PdfPageWrapper(pageInfo, this);
this.pageCache[pageInfo.pageNumber] = page; this.pageCache[pageInfo.pageIndex] = page;
var promises = this.pagePromises[pageInfo.pageNumber]; var promise = this.pagePromises[pageInfo.pageIndex];
delete this.pagePromises[pageInfo.pageNumber]; promise.resolve(page);
for (var i = 0, ii = promises.length; i < ii; ++i)
promises[i].resolve(page);
}, this); }, this);
messageHandler.on('page', function transportPage(data) { messageHandler.on('renderpage', function transportRender(data) {
var pageNum = data.pageNum; var page = this.pageCache[data.pageIndex];
var page = this.pageCache[pageNum - 1];
var depFonts = data.depFonts; var depFonts = data.depFonts;
//page.stats.timeEnd('Page Request'); page.stats.timeEnd('Page Request');
page.startRenderingFromOperatorList(data.operatorList, depFonts); page.startRenderingFromOperatorList(data.operatorList, depFonts);
}, this); }, this);
@ -197,20 +194,17 @@
}, },
sendData: function WorkerTransport_sendData(data) { sendData: function WorkerTransport_sendData(data) {
this.messageHandler.send('doc_request', data); this.messageHandler.send('getdoc_request', data);
}, },
getPage: function WorkerTransport_getPage(n, promise) { getPage: function WorkerTransport_getPage(pageNumber, promise) {
if (this.pageCache[n - 1]) { var pageIndex = pageNumber - 1;
promise.resolve(this.pageCache[n - 1]); if (pageIndex in this.pagePromises)
return; return this.pagePromises[pageIndex];
} var promise = new PDFJS.Promise('Page ' + pageNumber);
if ((n - 1) in this.pagePromises) { this.pagePromises[pageIndex] = promise;
this.pagePromises[n - 1].push(promise); this.messageHandler.send('getpage_request', { pageIndex: pageIndex });
return; return promise;
}
this.pagePromises[n - 1] = [promise];
this.messageHandler.send('getpage_request', {pageNumber: n - 1});
} }
}; };
function PdfPageWrapper(pageInfo, transport) { function PdfPageWrapper(pageInfo, transport) {
@ -221,7 +215,7 @@
} }
PdfPageWrapper.prototype = { PdfPageWrapper.prototype = {
get pageNumber() { get pageNumber() {
return this.pageInfo.pageNumber; return this.pageInfo.pageIndex + 1;
}, },
get rotate() { get rotate() {
return this.pageInfo.rotate; return this.pageInfo.rotate;
@ -255,8 +249,10 @@
if (!this.displayReadyPromise) { if (!this.displayReadyPromise) {
this.displayReadyPromise = new Promise(); this.displayReadyPromise = new Promise();
//this.stats.time('Page Request'); this.stats.time('Page Request');
this.transport.messageHandler.send('page_request', this.pageNumber + 1); this.transport.messageHandler.send('renderpage_request', {
pageIndex: this.pageNumber - 1
});
} }
var callback = (function complete(error) { var callback = (function complete(error) {
@ -389,9 +385,7 @@
return this.pdfInfo.fingerprint; return this.pdfInfo.fingerprint;
}, },
getPage: function(number) { getPage: function(number) {
var promise = new PDFJS.Promise(); return this.transport.getPage(number);
this.transport.getPage(number, promise);
return promise;
}, },
getDestinations: function() { getDestinations: function() {
var promise = new PDFJS.Promise(); var promise = new PDFJS.Promise();

View File

@ -85,7 +85,7 @@ var WorkerMessageHandler = {
handler.send('test', data instanceof Uint8Array); handler.send('test', data instanceof Uint8Array);
}); });
handler.on('doc_request', function wphSetupDoc(data) { handler.on('getdoc_request', function wphSetupDoc(data) {
// Create only the model of the PDFDoc, which is enough for // Create only the model of the PDFDoc, which is enough for
// processing the content of the pdf. // processing the content of the pdf.
pdfModel = new PDFDocModel(new Stream(data)); pdfModel = new PDFDocModel(new Stream(data));
@ -97,13 +97,14 @@ var WorkerMessageHandler = {
info: pdfModel.info, info: pdfModel.info,
metadata: pdfModel.catalog.metadata metadata: pdfModel.catalog.metadata
}; };
handler.send('doc', {pdfInfo: doc}); handler.send('getdoc', {pdfInfo: doc});
}); });
handler.on('getpage_request', function wphSetupTest(data) { handler.on('getpage_request', function wphSetupTest(data) {
var pdfPage = pdfModel.getPage(data.pageNumber + 1); var pageNumber = data.pageIndex + 1;
var pdfPage = pdfModel.getPage(pageNumber);
var page = { var page = {
pageNumber: data.pageNumber, pageIndex: data.pageIndex,
rotate: pdfPage.rotate, rotate: pdfPage.rotate,
ref: pdfPage.ref, ref: pdfPage.ref,
view: pdfPage.view, view: pdfPage.view,
@ -112,8 +113,8 @@ var WorkerMessageHandler = {
handler.send('getpage', {pageInfo: page}); handler.send('getpage', {pageInfo: page});
}); });
handler.on('page_request', function wphSetupPageRequest(pageNum) { handler.on('renderpage_request', function wphSetupPageRequest(data) {
pageNum = parseInt(pageNum); var pageNum = data.pageIndex + 1;
// The following code does quite the same as // The following code does quite the same as
@ -170,8 +171,8 @@ var WorkerMessageHandler = {
} }
} }
handler.send('page', { handler.send('renderpage', {
pageNum: pageNum, pageIndex: data.pageIndex,
operatorList: operatorList, operatorList: operatorList,
depFonts: Object.keys(fonts) depFonts: Object.keys(fonts)
}); });