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();
}
};
this.has = function (view) {
return data.includes(view);
};
}
function isSameScale(oldScale, newScale) {
@ -1096,9 +1100,15 @@ class BaseViewer {
if (!this.pdfDocument) {
return false;
}
if (pageNumber < 1 || pageNumber > this.pagesCount) {
if (
!(
Number.isInteger(pageNumber) &&
pageNumber > 0 &&
pageNumber <= this.pagesCount
)
) {
console.error(
`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`
`${this._name}.isPageVisible: "${pageNumber}" is not a valid page.`
);
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() {
for (let i = 0, ii = this._pages.length; i < ii; i++) {
if (

View File

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

View File

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

View File

@ -363,6 +363,16 @@ class PDFThumbnailView {
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;
}