Merge pull request #14683 from Snuffleupagus/sendTest-cleanup
[src/display/api.js] Simplify the `sendTest` function, used with Worker initialization (PR 14291 follow-up)
This commit is contained in:
commit
5de6af4e64
@ -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) {
|
||||
|
@ -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();
|
||||
@ -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.
|
||||
@ -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.");
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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
|
||||
@ -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();
|
||||
@ -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);
|
||||
}
|
||||
@ -3196,9 +3185,7 @@ class RenderTask {
|
||||
* @ignore
|
||||
*/
|
||||
class InternalRenderTask {
|
||||
static get canvasInUse() {
|
||||
return shadow(this, "canvasInUse", new WeakSet());
|
||||
}
|
||||
static #canvasInUse = new WeakSet();
|
||||
|
||||
constructor({
|
||||
callback,
|
||||
@ -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) {
|
||||
@ -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 ||
|
||||
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user