]> git.parisson.com Git - pdf.js.git/commitdiff
First page is rendering using new worker infrastructure
authorJulian Viereck <julian.viereck@gmail.com>
Tue, 6 Sep 2011 01:12:03 +0000 (18:12 -0700)
committerJulian Viereck <julian.viereck@gmail.com>
Thu, 15 Sep 2011 15:20:03 +0000 (08:20 -0700)
pdf.js
worker.js
worker/boot.js
worker/console.js
worker/message_handler.js

diff --git a/pdf.js b/pdf.js
index 39d36780f6aa9f660c88a9c13abeada3246c8518..4deb1f93408e3b39d103e023f2a052c42b484a06 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -3406,7 +3406,7 @@ var Page = (function() {
           var exc = null;
           // try {
             self.display(gfx);
-            stats.render = Date.now();
+            self.stats.render = Date.now();
           // } catch (e) {
           //   exc = e.toString();
           // }
@@ -3416,7 +3416,7 @@ var Page = (function() {
       
       this.ensureFonts(fonts, function() {
         images.notifyOnLoad(function() {
-          stats.images = Date.now();
+          self.stats.images = Date.now();
           displayContinuation();
         });
       })
@@ -4294,10 +4294,6 @@ var PartialEvaluator = (function() {
         }
       }
 
-      // Expose arrays for debugging purpose.
-      window.fnArray = fnArray;
-      window.argsArray = argsArray;
-
       return {
         fnArray: fnArray,
         argsArray: argsArray
@@ -4791,6 +4787,9 @@ var CanvasGraphics = (function() {
     },
     
     postCompile: function(raw) {
+      if (!this.pe) {
+        this.pe = new PartialEvaluator();
+      }
       return this.pe.evalFromRaw(raw);
     },
 
index 61f8c0934bc754620557c3662e1cc953f9a90ae9..1eb65b7b9c82e3b99512e6d9c63df3d26aeb51af 100644 (file)
--- a/worker.js
+++ b/worker.js
@@ -60,16 +60,29 @@ var WorkerPDFDoc = (function() {
     
     this.pageCache = [];
     
-    this.worker = new Worker("worker/boot.js");
-    this.handler = new MessageHandler({
+    this.worker = new Worker("../worker/boot.js");
+    this.handler = new MessageHandler("main", {
       "page": function(data) {
         var pageNum = data.pageNum;
         var page = this.pageCache[pageNum];
         
+        // Add necessary shape back to fonts.
+        var fonts = data.fonts;
+        for (var i = 0; i < fonts.length; i++) {
+          var font = fonts[i];
+          
+          var fontFileDict = new Dict();
+          fontFileDict.map = font.file.dict.map;
+
+          var fontFile = new Stream(font.file.bytes, font.file.start,
+                                    font.file.end - font.file.start, fontFileDict);
+          font.file = new FlateStream(fontFile);
+        }
+        
+        console.log("startRenderingFromPreCompilation:", "numberOfFonts", fonts.length);
         page.startRenderingFromPreCompilation(data.preCompilation, data.fonts, data.images);
       }
-    }, this.worker.postMessage, this);
-    this.worker.onmessage = this.handler.onMessage;
+    }, this.worker, this);
     
     this.handler.send("doc", data);
   }
@@ -80,7 +93,7 @@ var WorkerPDFDoc = (function() {
     },
     
     startRendering: function(page) {
-      this.handler.send("page", page.page.pageNumber);
+      this.handler.send("page", page.page.pageNumber + 1);
     },
     
     getPage: function(n) {
index 4ec65a1de9e62be9d38045dbfbc1f00240d570b0..da09f21c509903d21dd3469fea8a4db3c2f1e3cd 100644 (file)
@@ -3,9 +3,8 @@
 
 'use strict';
 
-//
 importScripts('console.js');
-importScripts('event_handler.js');
+importScripts('message_handler.js');
 importScripts('../pdf.js');
 importScripts('../fonts.js');
 importScripts('../crypto.js');
@@ -14,9 +13,9 @@ importScripts('../glyphlist.js');
 // Listen for messages from the main thread.
 var pdfDoc = null;
 
-var handler = new MessageHandler({
+var handler = new MessageHandler("worker", {
   "doc": function(data) {
-    pdfDocument = new PDFDoc(new Stream(data));
+    pdfDoc = new PDFDoc(new Stream(data));
     console.log("setup pdfDoc");
   },
   
@@ -24,11 +23,11 @@ var handler = new MessageHandler({
     pageNum = parseInt(pageNum);
     console.log("about to process page", pageNum);
     
-    var page = pdfDocument.getPage(pageNum);
+    var page = pdfDoc.getPage(pageNum);
     
     // The following code does quite the same as Page.prototype.startRendering,
     // but stops at one point and sends the result back to the main thread.
-    var gfx = new CanvasGraphics(canvasCtx);
+    var gfx = new CanvasGraphics(null);
     var fonts = [];
     // TODO: Figure out how image loading is handled inside the worker.
     var images = new ImagesLoader();
@@ -43,9 +42,9 @@ var handler = new MessageHandler({
       var font = fonts[i];
     
       fontsMin.push({
-        name:       orgFont.name,
-        file:       orgFont.file,
-        properties: orgFont.properties
+        name:       font.name,
+        file:       font.file,
+        properties: font.properties
       });
     }
     
@@ -58,6 +57,4 @@ var handler = new MessageHandler({
       preCompilation: preCompilation,
     });
   }
-}, postMessage);
-
-onmessage = handler.onMessage;
+}, this);
index 74a2d56a3c9aede28338d9b930bdb5abf868dd98..debcba3aa6d48e5ae5037cbc33dac33237b8f26f 100644 (file)
@@ -8,7 +8,15 @@ var console = {
   log: function log() {
     var args = Array.prototype.slice.call(arguments);
     postMessage({
-      action: 'log',
+      action: 'console_log',
+      data:   args
+    });
+  },
+  
+  error: function error() {
+    var args = Array.prototype.slice.call(arguments);
+    postMessage({
+      action: 'console_error',
       data:   args
     });
   },
index b97558ee6c2b1a018b5729709396347c5b834932..17c6e4aea18a583efdadace7e2329db2c9d8e07f 100644 (file)
@@ -4,8 +4,18 @@
 'use strict';
 
 
-function MessageHandler(actionHandler, postMessage, scope) {
-  this.onMessage = function(event) {
+function MessageHandler(name, actionHandler, comObj, scope) {
+  this.name = name;
+  
+  actionHandler["console_log"] = function(data) {
+      console.log.apply(console, data);
+  }
+  actionHandler["console_error"] = function(data) {
+      console.error.apply(console, data);
+  }
+
+  
+  comObj.onmessage = function(event) {
     var data = event.data;
     if (data.action in actionHandler) {
       actionHandler[data.action].call(scope, data.data);
@@ -15,9 +25,14 @@ function MessageHandler(actionHandler, postMessage, scope) {
   };
   
   this.send = function(actionName, data) {
-    postMessage({
-      action: actionName,
-      data:   data
-    });
+    try {
+      comObj.postMessage({
+        action: actionName,
+        data:   data
+      });      
+    } catch (e) {
+      console.error("FAILED to send data from", this.name);
+      throw e;
+    }
   }
 }
\ No newline at end of file