Skip to content

Commit 29c5042

Browse files
committed
feat(taskrunner): transfer arraybuffer in runloaderresult
1 parent c0e5fc4 commit 29c5042

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/adapters/workerEntryPoint.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as loaderRunner from 'loader-runner';
44
import { Subject, from, of } from 'rxjs';
55
import { catchError, map, mergeMap } from 'rxjs/operators';
66
import { enableLoggerGlobal, getLogger } from '../utils/logger';
7-
import { expose, proxy } from 'comlink';
7+
import { expose, proxy, transfer } from 'comlink';
88
import { parentPort, workerData } from 'worker_threads';
99

1010
import { WorkerTaskData } from './WorkerTaskData';
@@ -53,6 +53,17 @@ const buildLoaderOption = (
5353

5454
type TaskQueueContext = Omit<WorkerTaskData, 'id'> & { task: { id: number; logLevel: 'verbose' | 'info' } };
5555

56+
// [todo]: support nested objects
57+
const collectBuffer = (result: loaderRunner.RunLoaderResult) => {
58+
const ret = Object.values(result).reduce((acc, value) => {
59+
if (ArrayBuffer.isView(value)) {
60+
acc.push(value.buffer);
61+
}
62+
return acc;
63+
}, []);
64+
return ret;
65+
};
66+
5667
/**
5768
* Interface to allow running specified task in worker threads,
5869
* exposed via comlink proxy.
@@ -98,7 +109,12 @@ const taskRunner = (() => {
98109
if (err) {
99110
onError(err);
100111
} else {
101-
onComplete(result);
112+
const buffer = collectBuffer(result);
113+
if (buffer.length > 0) {
114+
onComplete(transfer(result, buffer));
115+
} else {
116+
onComplete(result);
117+
}
102118
}
103119
},
104120
(e) => {

0 commit comments

Comments
 (0)