Browse Source

Check if `pageView.pdfPage` exists in `PDFViewer._ensurePdfPageLoaded`, to avoid potentially calling `PDFPageView.setPdfPage` multiple times for the same page

Since calling `PDFPageView.setPdfPage` will in turn call `PDFPageView.reset`, which cancels all rendering and completely resets the page, it's thus possible that we currently cause some unnecessary re-rendering during the initial loading phase of the viewer.

Depending on the order in which data arrives, it's possible (and in practice always seem to happen) that the `pdfPage` property of the *second* page has already been set during `PDFViewer.setDocument`, by the time that the request for the `pdfPage` is resolved in `PDFViewer._ensurePdfPageLoaded`.

Also, note how the `setPdfPage` call in `PDFViewer.setDocument` is already guarded by this kind of check.
Jonas Jenwald 8 years ago
parent
commit
fce2cfddcf
  1. 13
      web/pdf_viewer.js

13
web/pdf_viewer.js

@ -843,12 +843,13 @@ var PDFViewer = (function pdfViewer() {
if (this._pagesRequests[pageNumber]) { if (this._pagesRequests[pageNumber]) {
return this._pagesRequests[pageNumber]; return this._pagesRequests[pageNumber];
} }
var promise = this.pdfDocument.getPage(pageNumber).then( var promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {
function (pdfPage) { if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage); pageView.setPdfPage(pdfPage);
}
this._pagesRequests[pageNumber] = null; this._pagesRequests[pageNumber] = null;
return pdfPage; return pdfPage;
}.bind(this)); });
this._pagesRequests[pageNumber] = promise; this._pagesRequests[pageNumber] = promise;
return promise; return promise;
}, },
@ -859,9 +860,9 @@ var PDFViewer = (function pdfViewer() {
this._pages, this._pages,
this.scroll.down); this.scroll.down);
if (pageView) { if (pageView) {
this._ensurePdfPageLoaded(pageView).then(function () { this._ensurePdfPageLoaded(pageView).then(() => {
this.renderingQueue.renderView(pageView); this.renderingQueue.renderView(pageView);
}.bind(this)); });
return true; return true;
} }
return false; return false;

Loading…
Cancel
Save