From f0687c4d50f4f674620b5cada5120421d2ba60c8 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 12 Apr 2012 10:01:07 -0700 Subject: [PATCH] Refactor pageNumber/pageIndex concept --- src/api.js | 54 +++++++++++++++++++++++---------------------------- src/worker.js | 17 ++++++++-------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/api.js b/src/api.js index 3d683af07..e3969563a 100644 --- a/src/api.js +++ b/src/api.js @@ -68,8 +68,8 @@ if (this.worker) this.worker.terminate(); - for (var n in this.pageCache) - delete this.pageCache[n]; + this.pageCache = []; + this.pagePromises = []; }, setupFakeWorker: function WorkerTransport_setupFakeWorker() { // If we don't use a worker, just post/sendMessage to the main thread. @@ -92,7 +92,7 @@ function WorkerTransport_setupMessageHandler(messageHandler) { this.messageHandler = messageHandler; - messageHandler.on('doc', function transportPage(data) { + messageHandler.on('getdoc', function transportDoc(data) { var pdfInfo = data.pdfInfo; var pdfDocument = new PdfDocumentWrapper(pdfInfo, this); this.pdfDocument = pdfDocument; @@ -102,19 +102,16 @@ messageHandler.on('getpage', function transportPage(data) { var pageInfo = data.pageInfo; var page = new PdfPageWrapper(pageInfo, this); - this.pageCache[pageInfo.pageNumber] = page; - var promises = this.pagePromises[pageInfo.pageNumber]; - delete this.pagePromises[pageInfo.pageNumber]; - for (var i = 0, ii = promises.length; i < ii; ++i) - promises[i].resolve(page); + this.pageCache[pageInfo.pageIndex] = page; + var promise = this.pagePromises[pageInfo.pageIndex]; + promise.resolve(page); }, this); - messageHandler.on('page', function transportPage(data) { - var pageNum = data.pageNum; - var page = this.pageCache[pageNum - 1]; + messageHandler.on('renderpage', function transportRender(data) { + var page = this.pageCache[data.pageIndex]; var depFonts = data.depFonts; - //page.stats.timeEnd('Page Request'); + page.stats.timeEnd('Page Request'); page.startRenderingFromOperatorList(data.operatorList, depFonts); }, this); @@ -197,20 +194,17 @@ }, sendData: function WorkerTransport_sendData(data) { - this.messageHandler.send('doc_request', data); + this.messageHandler.send('getdoc_request', data); }, - getPage: function WorkerTransport_getPage(n, promise) { - if (this.pageCache[n - 1]) { - promise.resolve(this.pageCache[n - 1]); - return; - } - if ((n - 1) in this.pagePromises) { - this.pagePromises[n - 1].push(promise); - return; - } - this.pagePromises[n - 1] = [promise]; - this.messageHandler.send('getpage_request', {pageNumber: n - 1}); + getPage: function WorkerTransport_getPage(pageNumber, promise) { + var pageIndex = pageNumber - 1; + if (pageIndex in this.pagePromises) + return this.pagePromises[pageIndex]; + var promise = new PDFJS.Promise('Page ' + pageNumber); + this.pagePromises[pageIndex] = promise; + this.messageHandler.send('getpage_request', { pageIndex: pageIndex }); + return promise; } }; function PdfPageWrapper(pageInfo, transport) { @@ -221,7 +215,7 @@ } PdfPageWrapper.prototype = { get pageNumber() { - return this.pageInfo.pageNumber; + return this.pageInfo.pageIndex + 1; }, get rotate() { return this.pageInfo.rotate; @@ -255,8 +249,10 @@ if (!this.displayReadyPromise) { this.displayReadyPromise = new Promise(); - //this.stats.time('Page Request'); - this.transport.messageHandler.send('page_request', this.pageNumber + 1); + this.stats.time('Page Request'); + this.transport.messageHandler.send('renderpage_request', { + pageIndex: this.pageNumber - 1 + }); } var callback = (function complete(error) { @@ -389,9 +385,7 @@ return this.pdfInfo.fingerprint; }, getPage: function(number) { - var promise = new PDFJS.Promise(); - this.transport.getPage(number, promise); - return promise; + return this.transport.getPage(number); }, getDestinations: function() { var promise = new PDFJS.Promise(); diff --git a/src/worker.js b/src/worker.js index fcde756b9..f61e4b509 100644 --- a/src/worker.js +++ b/src/worker.js @@ -85,7 +85,7 @@ var WorkerMessageHandler = { 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 // processing the content of the pdf. pdfModel = new PDFDocModel(new Stream(data)); @@ -97,13 +97,14 @@ var WorkerMessageHandler = { info: pdfModel.info, metadata: pdfModel.catalog.metadata }; - handler.send('doc', {pdfInfo: doc}); + handler.send('getdoc', {pdfInfo: doc}); }); 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 = { - pageNumber: data.pageNumber, + pageIndex: data.pageIndex, rotate: pdfPage.rotate, ref: pdfPage.ref, view: pdfPage.view, @@ -112,8 +113,8 @@ var WorkerMessageHandler = { handler.send('getpage', {pageInfo: page}); }); - handler.on('page_request', function wphSetupPageRequest(pageNum) { - pageNum = parseInt(pageNum); + handler.on('renderpage_request', function wphSetupPageRequest(data) { + var pageNum = data.pageIndex + 1; // The following code does quite the same as @@ -170,8 +171,8 @@ var WorkerMessageHandler = { } } - handler.send('page', { - pageNum: pageNum, + handler.send('renderpage', { + pageIndex: data.pageIndex, operatorList: operatorList, depFonts: Object.keys(fonts) });