From aaa7a20874b601cb8373aa8fd52d246a62a53235 Mon Sep 17 00:00:00 2001 From: Ujjwal Sharma Date: Fri, 3 Oct 2025 16:54:58 +0530 Subject: [PATCH] Make dependencyTracker work with the renderer --- src/display/api.js | 19 +++++++++++++------ src/display/renderer_worker.js | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/display/api.js b/src/display/api.js index 54135d76e..74a2f27e4 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -2403,10 +2403,10 @@ class RendererWorker { const src = // eslint-disable-next-line no-nested-ternary typeof PDFJSDev === "undefined" - ? "../src/pdf.worker.js" + ? "../src/pdf.renderer.js" : PDFJSDev.test("MOZCENTRAL") - ? "resource://pdf.js/build/pdf.worker.mjs" - : "../build/pdf.worker.mjs"; + ? "resource://pdf.js/build/pdf.renderer.mjs" + : "../build/pdf.renderer.mjs"; this.#worker = new Worker(src, { type: "module" }); this.#handler = new MessageHandler("main", "renderer", this.#worker); this.#handler.send("configure", { channelPort, enableHWA }, [channelPort]); @@ -3427,9 +3427,16 @@ class InternalRenderTask { this.graphicsReadyCallback ||= this._continueBound; return; } - this.gfx.dependencyTracker?.growOperationsCount( - this.operatorList.fnArray.length - ); + if (!this._renderInWorker) { + this.gfx.dependencyTracker?.growOperationsCount( + this.operatorList.fnArray.length + ); + } else { + this.rendererHandler.send("growOperationsCount", { + taskID: this.taskID, + newOperatorListLength: this.operatorList.fnArray.length, + }); + } this.stepper?.updateOperatorList(this.operatorList); if (this.running) { diff --git a/src/display/renderer_worker.js b/src/display/renderer_worker.js index 6b7e7c96c..22b488907 100644 --- a/src/display/renderer_worker.js +++ b/src/display/renderer_worker.js @@ -84,6 +84,7 @@ class RendererMessageHandler { transparency, background, optionalContentConfig, + dependencyTracker, }) => { assert(!this.#tasks.has(taskID), "Task already initialized"); const ctx = canvas.getContext("2d", { @@ -99,7 +100,8 @@ class RendererMessageHandler { this.#filterFactory, { optionalContentConfig }, map, - colors + colors, + dependencyTracker ); gfx.beginDrawing({ transform, viewport, transparency, background }); this.#tasks.set(taskID, { canvas, gfx }); @@ -122,6 +124,18 @@ class RendererMessageHandler { } ); + mainHandler.on( + "growOperationsCount", + ({ taskID, newOperatorListLength }) => { + if (terminated) { + throw new Error("Renderer worker has been terminated."); + } + const task = this.#tasks.get(taskID); + assert(task !== undefined, "Task not initialized"); + task.gfx.dependencyTracker?.growOperationsCount(newOperatorListLength); + } + ); + mainHandler.on("end", ({ taskID }) => { if (terminated) { throw new Error("Renderer worker has been terminated.");