From 0cf4fbd471930f9ff961d1cc3e48e5168d23d7e9 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 7 Feb 2023 12:30:05 +0100 Subject: [PATCH] [GeckoView] Avoid unused outline, attachments, and layers fetching Currently there's no UI for this functionality in the GV-viewer, however we still call the API methods. This potentially leads to a bunch of worker-thread parsing, for PDF documents with these features, despite the result being completely unused. Given that mobile devices are usually more resource constrained than desktop/laptop computers, not to mentioned battery life, we can avoid doing work that'll just be ignored anyway. --- web/app.js | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/web/app.js b/web/app.js index 13a963e8d..f6d055381 100644 --- a/web/app.js +++ b/web/app.js @@ -1336,26 +1336,32 @@ const PDFViewerApplication = { timestamp: data.timestamp, }); - pdfDocument.getOutline().then(outline => { - if (pdfDocument !== this.pdfDocument) { - return; // The document was closed while the outline resolved. - } - this.pdfOutlineViewer?.render({ outline, pdfDocument }); - }); - pdfDocument.getAttachments().then(attachments => { - if (pdfDocument !== this.pdfDocument) { - return; // The document was closed while the attachments resolved. - } - this.pdfAttachmentViewer?.render({ attachments }); - }); - // Ensure that the layers accurately reflects the current state in the - // viewer itself, rather than the default state provided by the API. - pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => { - if (pdfDocument !== this.pdfDocument) { - return; // The document was closed while the layers resolved. - } - this.pdfLayerViewer?.render({ optionalContentConfig, pdfDocument }); - }); + if (this.pdfOutlineViewer) { + pdfDocument.getOutline().then(outline => { + if (pdfDocument !== this.pdfDocument) { + return; // The document was closed while the outline resolved. + } + this.pdfOutlineViewer.render({ outline, pdfDocument }); + }); + } + if (this.pdfAttachmentViewer) { + pdfDocument.getAttachments().then(attachments => { + if (pdfDocument !== this.pdfDocument) { + return; // The document was closed while the attachments resolved. + } + this.pdfAttachmentViewer.render({ attachments }); + }); + } + if (this.pdfLayerViewer) { + // Ensure that the layers accurately reflects the current state in the + // viewer itself, rather than the default state provided by the API. + pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => { + if (pdfDocument !== this.pdfDocument) { + return; // The document was closed while the layers resolved. + } + this.pdfLayerViewer.render({ optionalContentConfig, pdfDocument }); + }); + } }); this._initializePageLabels(pdfDocument);