|
|
@ -63,13 +63,8 @@ var Page = (function PageClosure() { |
|
|
|
function Page(xref, pageNumber, pageDict, ref) { |
|
|
|
function Page(xref, pageNumber, pageDict, ref) { |
|
|
|
this.pageNumber = pageNumber; |
|
|
|
this.pageNumber = pageNumber; |
|
|
|
this.pageDict = pageDict; |
|
|
|
this.pageDict = pageDict; |
|
|
|
this.stats = { |
|
|
|
this.stats = new StatTimer(); |
|
|
|
create: Date.now(), |
|
|
|
this.stats.enabled = !!globalScope.PDFJS.enableStats; |
|
|
|
compile: 0.0, |
|
|
|
|
|
|
|
fonts: 0.0, |
|
|
|
|
|
|
|
images: 0.0, |
|
|
|
|
|
|
|
render: 0.0 |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
this.xref = xref; |
|
|
|
this.xref = xref; |
|
|
|
this.ref = ref; |
|
|
|
this.ref = ref; |
|
|
|
|
|
|
|
|
|
|
@ -200,6 +195,8 @@ var Page = (function PageClosure() { |
|
|
|
return this.IRQueue; |
|
|
|
return this.IRQueue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.stats.time('Build IR Queue'); |
|
|
|
|
|
|
|
|
|
|
|
var xref = this.xref; |
|
|
|
var xref = this.xref; |
|
|
|
var content = xref.fetchIfRef(this.content); |
|
|
|
var content = xref.fetchIfRef(this.content); |
|
|
|
var resources = xref.fetchIfRef(this.resources); |
|
|
|
var resources = xref.fetchIfRef(this.resources); |
|
|
@ -217,11 +214,14 @@ var Page = (function PageClosure() { |
|
|
|
var pe = this.pe = new PartialEvaluator( |
|
|
|
var pe = this.pe = new PartialEvaluator( |
|
|
|
xref, handler, 'p' + this.pageNumber + '_'); |
|
|
|
xref, handler, 'p' + this.pageNumber + '_'); |
|
|
|
var IRQueue = {}; |
|
|
|
var IRQueue = {}; |
|
|
|
return (this.IRQueue = pe.getIRQueue(content, resources, IRQueue, |
|
|
|
this.IRQueue = pe.getIRQueue(content, resources, IRQueue, dependency); |
|
|
|
dependency)); |
|
|
|
|
|
|
|
|
|
|
|
this.stats.timeEnd('Build IR Queue'); |
|
|
|
|
|
|
|
return this.IRQueue; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
ensureFonts: function pageEnsureFonts(fonts, callback) { |
|
|
|
ensureFonts: function pageEnsureFonts(fonts, callback) { |
|
|
|
|
|
|
|
this.stats.time('Font Loading'); |
|
|
|
// Convert the font names to the corresponding font obj.
|
|
|
|
// Convert the font names to the corresponding font obj.
|
|
|
|
for (var i = 0, ii = fonts.length; i < ii; i++) { |
|
|
|
for (var i = 0, ii = fonts.length; i < ii; i++) { |
|
|
|
fonts[i] = this.objs.objs[fonts[i]].data; |
|
|
|
fonts[i] = this.objs.objs[fonts[i]].data; |
|
|
@ -231,7 +231,7 @@ var Page = (function PageClosure() { |
|
|
|
var fontObjs = FontLoader.bind( |
|
|
|
var fontObjs = FontLoader.bind( |
|
|
|
fonts, |
|
|
|
fonts, |
|
|
|
function pageEnsureFontsFontObjs(fontObjs) { |
|
|
|
function pageEnsureFontsFontObjs(fontObjs) { |
|
|
|
this.stats.fonts = Date.now(); |
|
|
|
this.stats.timeEnd('Font Loading'); |
|
|
|
|
|
|
|
|
|
|
|
callback.call(this); |
|
|
|
callback.call(this); |
|
|
|
}.bind(this), |
|
|
|
}.bind(this), |
|
|
@ -240,6 +240,8 @@ var Page = (function PageClosure() { |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
display: function pageDisplay(gfx, callback) { |
|
|
|
display: function pageDisplay(gfx, callback) { |
|
|
|
|
|
|
|
var stats = this.stats; |
|
|
|
|
|
|
|
stats.time('Rendering'); |
|
|
|
var xref = this.xref; |
|
|
|
var xref = this.xref; |
|
|
|
var resources = xref.fetchIfRef(this.resources); |
|
|
|
var resources = xref.fetchIfRef(this.resources); |
|
|
|
var mediaBox = xref.fetchIfRef(this.mediaBox); |
|
|
|
var mediaBox = xref.fetchIfRef(this.mediaBox); |
|
|
@ -266,8 +268,9 @@ var Page = (function PageClosure() { |
|
|
|
function next() { |
|
|
|
function next() { |
|
|
|
startIdx = gfx.executeIRQueue(IRQueue, startIdx, next, stepper); |
|
|
|
startIdx = gfx.executeIRQueue(IRQueue, startIdx, next, stepper); |
|
|
|
if (startIdx == length) { |
|
|
|
if (startIdx == length) { |
|
|
|
self.stats.render = Date.now(); |
|
|
|
|
|
|
|
gfx.endDrawing(); |
|
|
|
gfx.endDrawing(); |
|
|
|
|
|
|
|
stats.timeEnd('Rendering'); |
|
|
|
|
|
|
|
stats.timeEnd('Overall'); |
|
|
|
if (callback) callback(); |
|
|
|
if (callback) callback(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -431,15 +434,14 @@ var Page = (function PageClosure() { |
|
|
|
return items; |
|
|
|
return items; |
|
|
|
}, |
|
|
|
}, |
|
|
|
startRendering: function pageStartRendering(ctx, callback, textLayer) { |
|
|
|
startRendering: function pageStartRendering(ctx, callback, textLayer) { |
|
|
|
this.startRenderingTime = Date.now(); |
|
|
|
var stats = this.stats; |
|
|
|
|
|
|
|
stats.time('Overall'); |
|
|
|
// If there is no displayReadyPromise yet, then the IRQueue was never
|
|
|
|
// If there is no displayReadyPromise yet, then the IRQueue was never
|
|
|
|
// requested before. Make the request and create the promise.
|
|
|
|
// requested before. Make the request and create the promise.
|
|
|
|
if (!this.displayReadyPromise) { |
|
|
|
if (!this.displayReadyPromise) { |
|
|
|
this.pdf.startRendering(this); |
|
|
|
this.pdf.startRendering(this); |
|
|
|
this.displayReadyPromise = new Promise(); |
|
|
|
this.displayReadyPromise = new Promise(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Once the IRQueue and fonts are loaded, perform the actual rendering.
|
|
|
|
// Once the IRQueue and fonts are loaded, perform the actual rendering.
|
|
|
|
this.displayReadyPromise.then( |
|
|
|
this.displayReadyPromise.then( |
|
|
|
function pageDisplayReadyPromise() { |
|
|
|
function pageDisplayReadyPromise() { |
|
|
@ -731,7 +733,7 @@ var PDFDoc = (function PDFDocClosure() { |
|
|
|
var pageNum = data.pageNum; |
|
|
|
var pageNum = data.pageNum; |
|
|
|
var page = this.pageCache[pageNum]; |
|
|
|
var page = this.pageCache[pageNum]; |
|
|
|
var depFonts = data.depFonts; |
|
|
|
var depFonts = data.depFonts; |
|
|
|
|
|
|
|
page.stats.timeEnd('Page Request'); |
|
|
|
page.startRenderingFromIRQueue(data.IRQueue, depFonts); |
|
|
|
page.startRenderingFromIRQueue(data.IRQueue, depFonts); |
|
|
|
}, this); |
|
|
|
}, this); |
|
|
|
|
|
|
|
|
|
|
@ -840,6 +842,7 @@ var PDFDoc = (function PDFDocClosure() { |
|
|
|
startRendering: function pdfDocStartRendering(page) { |
|
|
|
startRendering: function pdfDocStartRendering(page) { |
|
|
|
// The worker might not be ready to receive the page request yet.
|
|
|
|
// The worker might not be ready to receive the page request yet.
|
|
|
|
this.workerReadyPromise.then(function pdfDocStartRenderingThen() { |
|
|
|
this.workerReadyPromise.then(function pdfDocStartRenderingThen() { |
|
|
|
|
|
|
|
page.stats.time('Page Request'); |
|
|
|
this.messageHandler.send('page_request', page.pageNumber + 1); |
|
|
|
this.messageHandler.send('page_request', page.pageNumber + 1); |
|
|
|
}.bind(this)); |
|
|
|
}.bind(this)); |
|
|
|
}, |
|
|
|
}, |
|
|
|