Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[src/display/api.js] Simplify the sendTest function, used with Worker initialization (PR 14291 follow-up) #14683

Merged
merged 2 commits into from
Mar 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src/core/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,8 @@ class WorkerMessageHandler {
}
testMessageProcessed = true;

// Ensure that `TypedArray`s can be sent to the worker,
// and that `postMessage` transfers are supported.
handler.send("test", data instanceof Uint8Array && data[0] === 255);
// Ensure that `TypedArray`s can be sent to the worker.
handler.send("test", data instanceof Uint8Array);
});

handler.on("configure", function wphConfigure(data) {
Expand Down
45 changes: 16 additions & 29 deletions src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -533,9 +533,7 @@ async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
* after which individual pages can be rendered.
*/
class PDFDocumentLoadingTask {
static get idCounters() {
return shadow(this, "idCounters", { doc: 0 });
}
static #docId = 0;

constructor() {
this._capability = createPromiseCapability();
Expand All @@ -546,7 +544,7 @@ class PDFDocumentLoadingTask {
* Unique identifier for the document loading task.
* @type {string}
*/
this.docId = `d${PDFDocumentLoadingTask.idCounters.doc++}`;
this.docId = `d${PDFDocumentLoadingTask.#docId++}`;

/**
* Whether the loading task is destroyed or not.
Expand Down Expand Up @@ -2017,16 +2015,14 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
* @param {PDFWorkerParameters} params - The worker initialization parameters.
*/
class PDFWorker {
static get _workerPorts() {
return shadow(this, "_workerPorts", new WeakMap());
}
static #workerPorts = new WeakMap();

constructor({
name = null,
port = null,
verbosity = getVerbosityLevel(),
} = {}) {
if (port && PDFWorker._workerPorts.has(port)) {
if (port && PDFWorker.#workerPorts.has(port)) {
throw new Error("Cannot use more than one PDFWorker per port.");
}

Expand All @@ -2040,7 +2036,7 @@ class PDFWorker {
this._messageHandler = null;

if (port) {
PDFWorker._workerPorts.set(port, this);
PDFWorker.#workerPorts.set(port, this);
this._initializeFromPort(port);
return;
}
Expand Down Expand Up @@ -2171,16 +2167,9 @@ class PDFWorker {
});

const sendTest = () => {
const testObj = new Uint8Array([255]);
// Some versions of Opera throw a DATA_CLONE_ERR on serializing the
// typed array. Also, checking if we can use transfers.
try {
messageHandler.send("test", testObj, [testObj.buffer]);
} catch (ex) {
warn("Cannot use postMessage transfers.");
testObj[0] = 0;
messageHandler.send("test", testObj);
}
const testObj = new Uint8Array();
// Ensure that we can use `postMessage` transfers.
messageHandler.send("test", testObj, [testObj.buffer]);
};

// It might take time for the worker to initialize. We will try to send
Expand Down Expand Up @@ -2245,7 +2234,7 @@ class PDFWorker {
this._webWorker.terminate();
this._webWorker = null;
}
PDFWorker._workerPorts.delete(this._port);
PDFWorker.#workerPorts.delete(this._port);
this._port = null;
if (this._messageHandler) {
this._messageHandler.destroy();
Expand All @@ -2260,8 +2249,8 @@ class PDFWorker {
if (!params?.port) {
throw new Error("PDFWorker.fromPort - invalid method signature.");
}
if (this._workerPorts.has(params.port)) {
return this._workerPorts.get(params.port);
if (this.#workerPorts.has(params.port)) {
return this.#workerPorts.get(params.port);
}
return new PDFWorker(params);
}
Expand Down Expand Up @@ -3196,9 +3185,7 @@ class RenderTask {
* @ignore
*/
class InternalRenderTask {
static get canvasInUse() {
return shadow(this, "canvasInUse", new WeakSet());
}
static #canvasInUse = new WeakSet();

constructor({
callback,
Expand Down Expand Up @@ -3251,14 +3238,14 @@ class InternalRenderTask {
return;
}
if (this._canvas) {
if (InternalRenderTask.canvasInUse.has(this._canvas)) {
if (InternalRenderTask.#canvasInUse.has(this._canvas)) {
throw new Error(
"Cannot use the same canvas during multiple render() operations. " +
"Use different canvas or ensure previous operations were " +
"cancelled or completed."
);
}
InternalRenderTask.canvasInUse.add(this._canvas);
InternalRenderTask.#canvasInUse.add(this._canvas);
}

if (this._pdfBug && globalThis.StepperManager?.enabled) {
Expand Down Expand Up @@ -3298,7 +3285,7 @@ class InternalRenderTask {
this.gfx.endDrawing();
}
if (this._canvas) {
InternalRenderTask.canvasInUse.delete(this._canvas);
InternalRenderTask.#canvasInUse.delete(this._canvas);
}
this.callback(
error ||
Expand Down Expand Up @@ -3364,7 +3351,7 @@ class InternalRenderTask {
if (this.operatorList.lastChunk) {
this.gfx.endDrawing();
if (this._canvas) {
InternalRenderTask.canvasInUse.delete(this._canvas);
InternalRenderTask.#canvasInUse.delete(this._canvas);
}
this.callback();
}
Expand Down