First page is rendering using new worker infrastructure
This commit is contained in:
parent
5a1488df9f
commit
cc17707da6
11
pdf.js
11
pdf.js
@ -3406,7 +3406,7 @@ var Page = (function() {
|
|||||||
var exc = null;
|
var exc = null;
|
||||||
// try {
|
// try {
|
||||||
self.display(gfx);
|
self.display(gfx);
|
||||||
stats.render = Date.now();
|
self.stats.render = Date.now();
|
||||||
// } catch (e) {
|
// } catch (e) {
|
||||||
// exc = e.toString();
|
// exc = e.toString();
|
||||||
// }
|
// }
|
||||||
@ -3416,7 +3416,7 @@ var Page = (function() {
|
|||||||
|
|
||||||
this.ensureFonts(fonts, function() {
|
this.ensureFonts(fonts, function() {
|
||||||
images.notifyOnLoad(function() {
|
images.notifyOnLoad(function() {
|
||||||
stats.images = Date.now();
|
self.stats.images = Date.now();
|
||||||
displayContinuation();
|
displayContinuation();
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
@ -4294,10 +4294,6 @@ var PartialEvaluator = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expose arrays for debugging purpose.
|
|
||||||
window.fnArray = fnArray;
|
|
||||||
window.argsArray = argsArray;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fnArray: fnArray,
|
fnArray: fnArray,
|
||||||
argsArray: argsArray
|
argsArray: argsArray
|
||||||
@ -4791,6 +4787,9 @@ var CanvasGraphics = (function() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
postCompile: function(raw) {
|
postCompile: function(raw) {
|
||||||
|
if (!this.pe) {
|
||||||
|
this.pe = new PartialEvaluator();
|
||||||
|
}
|
||||||
return this.pe.evalFromRaw(raw);
|
return this.pe.evalFromRaw(raw);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
23
worker.js
23
worker.js
@ -60,16 +60,29 @@ var WorkerPDFDoc = (function() {
|
|||||||
|
|
||||||
this.pageCache = [];
|
this.pageCache = [];
|
||||||
|
|
||||||
this.worker = new Worker("worker/boot.js");
|
this.worker = new Worker("../worker/boot.js");
|
||||||
this.handler = new MessageHandler({
|
this.handler = new MessageHandler("main", {
|
||||||
"page": function(data) {
|
"page": function(data) {
|
||||||
var pageNum = data.pageNum;
|
var pageNum = data.pageNum;
|
||||||
var page = this.pageCache[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);
|
page.startRenderingFromPreCompilation(data.preCompilation, data.fonts, data.images);
|
||||||
}
|
}
|
||||||
}, this.worker.postMessage, this);
|
}, this.worker, this);
|
||||||
this.worker.onmessage = this.handler.onMessage;
|
|
||||||
|
|
||||||
this.handler.send("doc", data);
|
this.handler.send("doc", data);
|
||||||
}
|
}
|
||||||
@ -80,7 +93,7 @@ var WorkerPDFDoc = (function() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
startRendering: function(page) {
|
startRendering: function(page) {
|
||||||
this.handler.send("page", page.page.pageNumber);
|
this.handler.send("page", page.page.pageNumber + 1);
|
||||||
},
|
},
|
||||||
|
|
||||||
getPage: function(n) {
|
getPage: function(n) {
|
||||||
|
@ -3,9 +3,8 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
//
|
|
||||||
importScripts('console.js');
|
importScripts('console.js');
|
||||||
importScripts('event_handler.js');
|
importScripts('message_handler.js');
|
||||||
importScripts('../pdf.js');
|
importScripts('../pdf.js');
|
||||||
importScripts('../fonts.js');
|
importScripts('../fonts.js');
|
||||||
importScripts('../crypto.js');
|
importScripts('../crypto.js');
|
||||||
@ -14,9 +13,9 @@ importScripts('../glyphlist.js');
|
|||||||
// Listen for messages from the main thread.
|
// Listen for messages from the main thread.
|
||||||
var pdfDoc = null;
|
var pdfDoc = null;
|
||||||
|
|
||||||
var handler = new MessageHandler({
|
var handler = new MessageHandler("worker", {
|
||||||
"doc": function(data) {
|
"doc": function(data) {
|
||||||
pdfDocument = new PDFDoc(new Stream(data));
|
pdfDoc = new PDFDoc(new Stream(data));
|
||||||
console.log("setup pdfDoc");
|
console.log("setup pdfDoc");
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -24,11 +23,11 @@ var handler = new MessageHandler({
|
|||||||
pageNum = parseInt(pageNum);
|
pageNum = parseInt(pageNum);
|
||||||
console.log("about to process page", 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,
|
// 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.
|
// 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 = [];
|
var fonts = [];
|
||||||
// TODO: Figure out how image loading is handled inside the worker.
|
// TODO: Figure out how image loading is handled inside the worker.
|
||||||
var images = new ImagesLoader();
|
var images = new ImagesLoader();
|
||||||
@ -43,9 +42,9 @@ var handler = new MessageHandler({
|
|||||||
var font = fonts[i];
|
var font = fonts[i];
|
||||||
|
|
||||||
fontsMin.push({
|
fontsMin.push({
|
||||||
name: orgFont.name,
|
name: font.name,
|
||||||
file: orgFont.file,
|
file: font.file,
|
||||||
properties: orgFont.properties
|
properties: font.properties
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,6 +57,4 @@ var handler = new MessageHandler({
|
|||||||
preCompilation: preCompilation,
|
preCompilation: preCompilation,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, postMessage);
|
}, this);
|
||||||
|
|
||||||
onmessage = handler.onMessage;
|
|
||||||
|
@ -8,7 +8,15 @@ var console = {
|
|||||||
log: function log() {
|
log: function log() {
|
||||||
var args = Array.prototype.slice.call(arguments);
|
var args = Array.prototype.slice.call(arguments);
|
||||||
postMessage({
|
postMessage({
|
||||||
action: 'log',
|
action: 'console_log',
|
||||||
|
data: args
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
error: function error() {
|
||||||
|
var args = Array.prototype.slice.call(arguments);
|
||||||
|
postMessage({
|
||||||
|
action: 'console_error',
|
||||||
data: args
|
data: args
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -4,8 +4,18 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
function MessageHandler(actionHandler, postMessage, scope) {
|
function MessageHandler(name, actionHandler, comObj, scope) {
|
||||||
this.onMessage = function(event) {
|
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;
|
var data = event.data;
|
||||||
if (data.action in actionHandler) {
|
if (data.action in actionHandler) {
|
||||||
actionHandler[data.action].call(scope, data.data);
|
actionHandler[data.action].call(scope, data.data);
|
||||||
@ -15,9 +25,14 @@ function MessageHandler(actionHandler, postMessage, scope) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.send = function(actionName, data) {
|
this.send = function(actionName, data) {
|
||||||
postMessage({
|
try {
|
||||||
action: actionName,
|
comObj.postMessage({
|
||||||
data: data
|
action: actionName,
|
||||||
});
|
data: data
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("FAILED to send data from", this.name);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user