]> git.parisson.com Git - pdf.js.git/commitdiff
Refactor pageNumber/pageIndex concept
authorYury Delendik <ydelendik@mozilla.com>
Thu, 12 Apr 2012 17:01:07 +0000 (10:01 -0700)
committerYury Delendik <ydelendik@mozilla.com>
Thu, 12 Apr 2012 17:01:07 +0000 (10:01 -0700)
src/api.js
src/worker.js

index 3d683af07280a505f08bb641e7660d22cf1fb8bb..e3969563a837e4e70d1835f7ad5497e46a578c25 100644 (file)
@@ -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;
       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);
 
     },
 
     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) {
   }
   PdfPageWrapper.prototype = {
     get pageNumber() {
-      return this.pageInfo.pageNumber;
+      return this.pageInfo.pageIndex + 1;
     },
     get rotate() {
       return this.pageInfo.rotate;
       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) {
       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();
index fcde756b9fcfe791dc9596805fa1302f3b5c7184..f61e4b5093d1872c11663e726d1ac310da658970 100644 (file)
@@ -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)
       });