From e46055a92c980b3cb221760ddbd8bfbd2144d1e8 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 23 Sep 2020 14:39:14 +0200 Subject: [PATCH] Remove the `PDFPageView.stats` property, and fetch it manually only when debugging is enabled Given that the default viewer only uses the "page stats" when debugging is enabled, it seems much simpler and more straightforward to simply query the API *directly* when this information is actually required. That way, there's a bit less information that needs to be stored/updated on each `PDFPageView`-instance. Finally, since the `EventBus` now exists, we no longer need to handle the "page stats"-case in the regular listeners in `web/app.js`, but can instead add special "page stats"-listeners only when debugging is enabled. --- web/app.js | 40 ++++++++++++++++++++++++++++------------ web/pdf_page_view.js | 3 --- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/web/app.js b/web/app.js index 885edab51..169af9ff1 100644 --- a/web/app.js +++ b/web/app.js @@ -1775,6 +1775,13 @@ const PDFViewerApplication = { eventBus._on("findfromurlhash", webViewerFindFromUrlHash); eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount); eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState); + + if (AppOptions.get("pdfBug")) { + _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug; + + eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug); + eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug); + } if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { eventBus._on("fileinputchange", webViewerFileInputChange); eventBus._on("openfile", webViewerOpenFile); @@ -1855,6 +1862,13 @@ const PDFViewerApplication = { eventBus._off("findfromurlhash", webViewerFindFromUrlHash); eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount); eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState); + + if (_boundEvents.reportPageStatsPDFBug) { + eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug); + eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug); + + _boundEvents.reportPageStatsPDFBug = null; + } if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { eventBus._off("fileinputchange", webViewerFileInputChange); eventBus._off("openfile", webViewerOpenFile); @@ -1966,6 +1980,20 @@ function loadAndEnablePDFBug(enabledTabs) { }); } +function reportPageStatsPDFBug({ pageNumber }) { + if (typeof Stats === "undefined" || !Stats.enabled) { + return; + } + const pageView = PDFViewerApplication.pdfViewer.getPageView( + /* index = */ pageNumber - 1 + ); + const pageStats = pageView && pageView.pdfPage && pageView.pdfPage.stats; + if (!pageStats) { + return; + } + Stats.add(pageNumber, pageStats); +} + function webViewerInitialized() { const appConfig = PDFViewerApplication.appConfig; let file; @@ -2150,10 +2178,6 @@ function webViewerPageRendered({ pageNumber, timestamp, error }) { thumbnailView.setImage(pageView); } - if (typeof Stats !== "undefined" && Stats.enabled && pageView.stats) { - Stats.add(pageNumber, pageView.stats); - } - if (error) { PDFViewerApplication.l10n .get( @@ -2534,14 +2558,6 @@ function webViewerPageChanging(evt) { if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); } - - // We need to update stats. - if (typeof Stats !== "undefined" && Stats.enabled) { - const pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); - if (pageView && pageView.stats) { - Stats.add(page, pageView.stats); - } - } } function webViewerVisibilityChange(evt) { diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 90f780df3..658b06b19 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -139,7 +139,6 @@ class PDFPageView { scale: this.scale * CSS_UNITS, rotation: totalRotation, }); - this.stats = pdfPage.stats; this.reset(); } @@ -524,8 +523,6 @@ class PDFPageView { } this._resetZoomLayer(/* removeFromDOM = */ true); - this.stats = pdfPage.stats; - this.eventBus.dispatch("pagerendered", { source: this, pageNumber: this.id,