Merge pull request #12613 from Snuffleupagus/isPageCached

Trigger cleanup, once rendering has finished, in `PDFThumbnailView.draw`
This commit is contained in:
Tim van der Meij 2020-11-12 21:57:21 +01:00 committed by GitHub
commit 59b35600be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 67 additions and 2 deletions

View File

@ -115,6 +115,10 @@ function PDFPageViewBuffer(size) {
data.shift().destroy(); data.shift().destroy();
} }
}; };
this.has = function (view) {
return data.includes(view);
};
} }
function isSameScale(oldScale, newScale) { function isSameScale(oldScale, newScale) {
@ -1096,9 +1100,15 @@ class BaseViewer {
if (!this.pdfDocument) { if (!this.pdfDocument) {
return false; return false;
} }
if (pageNumber < 1 || pageNumber > this.pagesCount) { if (
!(
Number.isInteger(pageNumber) &&
pageNumber > 0 &&
pageNumber <= this.pagesCount
)
) {
console.error( console.error(
`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.` `${this._name}.isPageVisible: "${pageNumber}" is not a valid page.`
); );
return false; return false;
} }
@ -1107,6 +1117,32 @@ class BaseViewer {
}); });
} }
/**
* @param {number} pageNumber
*/
isPageCached(pageNumber) {
if (!this.pdfDocument || !this._buffer) {
return false;
}
if (
!(
Number.isInteger(pageNumber) &&
pageNumber > 0 &&
pageNumber <= this.pagesCount
)
) {
console.error(
`${this._name}.isPageCached: "${pageNumber}" is not a valid page.`
);
return false;
}
const pageView = this._pages[pageNumber - 1];
if (!pageView) {
return false;
}
return this._buffer.has(pageView);
}
cleanup() { cleanup() {
for (let i = 0, ii = this._pages.length; i < ii; i++) { for (let i = 0, ii = this._pages.length; i < ii; i++) {
if ( if (

View File

@ -95,6 +95,11 @@ class IPDFLinkService {
* @param {number} pageNumber * @param {number} pageNumber
*/ */
isPageVisible(pageNumber) {} isPageVisible(pageNumber) {}
/**
* @param {number} pageNumber
*/
isPageCached(pageNumber) {}
} }
/** /**

View File

@ -458,6 +458,13 @@ class PDFLinkService {
isPageVisible(pageNumber) { isPageVisible(pageNumber) {
return this.pdfViewer.isPageVisible(pageNumber); return this.pdfViewer.isPageVisible(pageNumber);
} }
/**
* @param {number} pageNumber
*/
isPageCached(pageNumber) {
return this.pdfViewer.isPageCached(pageNumber);
}
} }
function isValidExplicitDestination(dest) { function isValidExplicitDestination(dest) {
@ -609,6 +616,13 @@ class SimpleLinkService {
isPageVisible(pageNumber) { isPageVisible(pageNumber) {
return true; return true;
} }
/**
* @param {number} pageNumber
*/
isPageCached(pageNumber) {
return true;
}
} }
export { PDFLinkService, SimpleLinkService }; export { PDFLinkService, SimpleLinkService };

View File

@ -363,6 +363,16 @@ class PDFThumbnailView {
finishRenderTask(error); finishRenderTask(error);
} }
); );
// Only trigger cleanup, once rendering has finished, when the current
// pageView is *not* cached on the `BaseViewer`-instance.
resultPromise.finally(() => {
const pageCached = this.linkService.isPageCached(this.id);
if (pageCached) {
return;
}
this.pdfPage?.cleanup();
});
return resultPromise; return resultPromise;
} }