Skip to content

Commit

Permalink
Inline the flushChunks helper function, used in getPdfManager on …
Browse files Browse the repository at this point in the history
…the worker-thread

 - This helper function has only a single call-site, and the function is fairly short.

 - It'll only be invoked if range requests are *disabled*, or if the entire PDF manages to load *before* the headers are resolved (which is very unlikely).
   Hence, by default, this helper function is not invoked.

 - By inlining the code we're able to utilize the existing error-handling at the call-site, rather than having to duplicate it, which further reduces the size of this code.

Finally, while slightly unrelated, this patch also adds optional chaining in one spot in the file (PR 16424 follow-up).
  • Loading branch information
Snuffleupagus committed Nov 2, 2024
1 parent 06f3b2d commit 196f7d7
Showing 1 changed file with 13 additions and 22 deletions.
35 changes: 13 additions & 22 deletions src/core/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,8 @@ class WorkerMessageHandler {
}

let pdfStream,
cachedChunks = [];
cachedChunks = [],
loaded = 0;
try {
pdfStream = new PDFWorkerStream(handler);
} catch (ex) {
Expand Down Expand Up @@ -263,30 +264,22 @@ class WorkerMessageHandler {
cancelXHRs = null;
});

let loaded = 0;
const flushChunks = function () {
const pdfFile = arrayBuffersToBytes(cachedChunks);
if (length && pdfFile.length !== length) {
warn("reported HTTP length is different from actual");
}
// the data is array, instantiating directly from it
try {
pdfManagerArgs.source = pdfFile;

newPdfManager = new LocalPdfManager(pdfManagerArgs);
pdfManagerCapability.resolve(newPdfManager);
} catch (ex) {
pdfManagerCapability.reject(ex);
}
cachedChunks = [];
};
new Promise(function (resolve, reject) {
const readChunk = function ({ value, done }) {
try {
ensureNotTerminated();
if (done) {
if (!newPdfManager) {
flushChunks();
const pdfFile = arrayBuffersToBytes(cachedChunks);
cachedChunks = [];

if (length && pdfFile.length !== length) {
warn("reported HTTP length is different from actual");
}
pdfManagerArgs.source = pdfFile;

newPdfManager = new LocalPdfManager(pdfManagerArgs);
pdfManagerCapability.resolve(newPdfManager);
}
cancelXHRs = null;
return;
Expand Down Expand Up @@ -854,9 +847,7 @@ class WorkerMessageHandler {
} else {
clearGlobalCaches();
}
if (cancelXHRs) {
cancelXHRs(new AbortException("Worker was terminated."));
}
cancelXHRs?.(new AbortException("Worker was terminated."));

for (const task of WorkerTasks) {
waitOn.push(task.finished);
Expand Down

0 comments on commit 196f7d7

Please sign in to comment.