Skip to content

Commit

Permalink
Remove useless message handlers
Browse files Browse the repository at this point in the history
These handlers are used to initiate the communication between
the content thread and the worker and they aren't used once the
document is loaded, hence we can remove them.
  • Loading branch information
calixteman committed Nov 25, 2023
1 parent 9d863f5 commit 37d5f2d
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
7 changes: 5 additions & 2 deletions src/core/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,11 @@ class WorkerMessageHandler {
setVerbosityLevel(data.verbosity);
});

handler.on("GetDocRequest", function (data) {
return WorkerMessageHandler.createDocumentHandler(data, port);
handler.on("GetDocRequest", function ({ source, singleUse }) {
if (singleUse) {
handler.destroy();
}
return WorkerMessageHandler.createDocumentHandler(source, port);
});
}

Expand Down
15 changes: 13 additions & 2 deletions src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,8 @@ const DefaultStandardFontDataFactory =
* when creating canvases. The default value is {new DOMCanvasFactory()}.
* @property {Object} [filterFactory] - A factory instance that will be used
* to create SVG filters when rendering some images on the main canvas.
* @property {boolean} [singleUse] - When true the worker will be able to load
* only one PDF document, using the `getDocument` method.
*/

/**
Expand Down Expand Up @@ -346,12 +348,13 @@ function getDocument(src) {
baseUrl: standardFontDataUrl,
});
}

if (!worker) {
const workerParams = {
verbosity,
port: GlobalWorkerOptions.workerPort,
singleUse: src.singleUse === true,
};

// Worker was not provided -- creating and owning our own. If message port
// is specified in global worker options, using it.
worker = workerParams.port
Expand Down Expand Up @@ -456,6 +459,12 @@ function getDocument(src) {
throw new Error("Loading aborted");
}

if (worker._singleUse) {
// We don't the messageHandler anymore.
worker._messageHandler.destroy();
worker._messageHandler = null;
}

const messageHandler = new MessageHandler(
docId,
workerId,
Expand Down Expand Up @@ -493,7 +502,7 @@ async function _fetchDocument(worker, source) {
}
const workerId = await worker.messageHandler.sendWithPromise(
"GetDocRequest",
source,
{ source, singleUse: worker._singleUse },
source.data ? [source.data.buffer] : null
);

Expand Down Expand Up @@ -2029,6 +2038,7 @@ class PDFWorker {
name = null,
port = null,
verbosity = getVerbosityLevel(),
singleUse = false,
} = {}) {
this.name = name;
this.destroyed = false;
Expand All @@ -2038,6 +2048,7 @@ class PDFWorker {
this._port = null;
this._webWorker = null;
this._messageHandler = null;
this._singleUse = singleUse;

if (
(typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) &&
Expand Down
1 change: 1 addition & 0 deletions web/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,7 @@ const PDFViewerApplication = {
const loadingTask = getDocument({
...apiParams,
...args,
singleUse: true,
});
this.pdfLoadingTask = loadingTask;

Expand Down

0 comments on commit 37d5f2d

Please sign in to comment.