Skip to content

Commit

Permalink
Unclutter API, allow sending intermediate messages to Worker
Browse files Browse the repository at this point in the history
  • Loading branch information
kaisalmen committed Oct 4, 2023
1 parent 5977e80 commit fb62140
Show file tree
Hide file tree
Showing 26 changed files with 201 additions and 2,542 deletions.
8 changes: 2 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,9 @@ workerTaskDirector.registerTask(taskName, {
try {
await workerTaskDirector.initTaskType(taskName)
// once the init Promise returns enqueue the execution
const execMessage = new WorkerTaskMessage({
id: 0,
name: taskName
});
const execMessage = new WorkerTaskMessage();

await workerTaskDirector.enqueueWorkerExecutionPlan({
taskTypeName: execMessage.name,
await workerTaskDirector.enqueueWorkerExecutionPlan(taskName, {
message: execMessage,
// decouple result evaluation ...
onComplete: (m: WorkerTaskMessageType) => { console.log('Received final command: ' + m.cmd); }
Expand Down
2,497 changes: 82 additions & 2,415 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"dev": "npx vite",
"dev:debug": "npx vite --debug --force",
"prerelease": "npm run build && npm run doc",
"test": "vitest"
"test": "vitest",
"reset:repo": "git clean -f -X -d"
},
"keywords": [],
"homepage": "https://github.com/kaisalmen/three-wtm#README",
Expand Down
7 changes: 3 additions & 4 deletions packages/examples/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@
"preview": "http-server ./preview"
},
"dependencies": {
"lil-gui": "~0.17.0",
"wtd-core": "2.2.0",
"wtd-three-ext": "2.2.0",
"wwobjloader2": "5.1.0-next.0"
"lil-gui": "~0.18.2",
"wtd-three-ext": "2.3.0-next.0",
"wwobjloader2": "~6.0.1"
},
"devDependencies": {
"http-server": "~14.1.1"
Expand Down
8 changes: 2 additions & 6 deletions packages/examples/src/helloWorld/HelloWorld.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,8 @@ class HelloWorldModuleWorkerExample {

const t0 = performance.now();
// once the init Promise returns enqueue the execution
const execMessage = new WorkerTaskMessage({
id: 0,
name: taskName
});
const resultExec = await this.workerTaskDirector.enqueueWorkerExecutionPlan({
taskTypeName: execMessage.name,
const execMessage = new WorkerTaskMessage();
const resultExec = await this.workerTaskDirector.enqueueWorkerExecutionPlan(taskName, {
message: execMessage,
// decouple result evaluation ...
onComplete: (m: WorkerTaskMessageType) => {
Expand Down
8 changes: 2 additions & 6 deletions packages/examples/src/helloWorld/HelloWorldStandard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,8 @@ class HelloWorldStandardWorkerExample {

const t0 = performance.now();
// once the init Promise returns enqueue the execution
const execMessage = new WorkerTaskMessage({
id: 0,
name: taskName
});
const resultExec = await this.workerTaskDirector.enqueueWorkerExecutionPlan({
taskTypeName: execMessage.name,
const execMessage = new WorkerTaskMessage();
const resultExec = await this.workerTaskDirector.enqueueWorkerExecutionPlan(taskName, {
message: execMessage,
// decouple result evaluation ...
onComplete: (m: WorkerTaskMessageType) => {
Expand Down
12 changes: 2 additions & 10 deletions packages/examples/src/helloWorld/HelloWorldWorkerTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,7 @@ class HelloWorldWorkerTaskExample {
url: new URL(import.meta.env.DEV ? '../worker/HelloWorldWorker.ts' : '../worker/generated/HelloWorldWorker-es.js', import.meta.url)
}, true);

const initMessage = new WorkerTaskMessage({
cmd: 'init',
id: 0,
name: taskName
});
const initMessage = new WorkerTaskMessage();

try {
// init the worker task without any payload (worker init without function invocation on worker)
Expand All @@ -31,12 +27,8 @@ class HelloWorldWorkerTaskExample {

const t0 = performance.now();
// once the init Promise returns enqueue the execution
const execMessage = new WorkerTaskMessage({
id: 0,
name: taskName
});
const execMessage = new WorkerTaskMessage();
const resultExec = await workerTask.executeWorker({
taskTypeName: execMessage.name,
message: execMessage,
// decouple result evaluation ...
onComplete: (m: WorkerTaskMessageType) => {
Expand Down
3 changes: 1 addition & 2 deletions packages/examples/src/threejs/Threejs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,7 @@ class WorkerTaskDirectorExample {
name: `${name}_${globalCount}`
});

const voidPromise = this.workerTaskDirector.enqueueWorkerExecutionPlan({
taskTypeName: name ?? 'unknown',
const voidPromise = this.workerTaskDirector.enqueueWorkerExecutionPlan(name ?? 'unknown', {
message: execMessage,
onComplete: (m: WorkerTaskMessageType) => {
this.processMessage(m);
Expand Down
3 changes: 1 addition & 2 deletions packages/examples/src/transferables/TransferablesTestbed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,8 @@ class TransferablesTestbed {
execMessage.addPayload(dataPayload);
const transferables = execMessage.pack(false);

return this.workerTaskDirector.enqueueWorkerExecutionPlan({
return this.workerTaskDirector.enqueueWorkerExecutionPlan(task.name, {
message: execMessage,
taskTypeName: task.name,
onComplete: (m: WorkerTaskMessageType) => {
this.processMessage(m);
},
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/HelloWorldThreeWorker.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { SphereGeometry } from 'three';
import {
WorkerTaskDirectorDefaultWorker,
WorkerTaskDirectorWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessage,
WorkerTaskMessageType
} from 'wtd-core';
Expand All @@ -11,7 +10,7 @@ import {

declare const self: DedicatedWorkerGlobalScope;

export class HelloWorlThreedWorker extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
export class HelloWorlThreedWorker extends WorkerTaskDefaultWorker {

init(message: WorkerTaskMessageType) {
console.log(`HelloWorldWorker#init: name: ${message.name} id: ${message.id} cmd: ${message.cmd} workerId: ${message.workerId}`);
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/HelloWorldWorker.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import {
DataPayload,
WorkerTaskDirectorDefaultWorker,
WorkerTaskDirectorWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessage,
WorkerTaskMessageType
} from 'wtd-core';

declare const self: DedicatedWorkerGlobalScope;

export class HelloWorldWorker extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
export class HelloWorldWorker extends WorkerTaskDefaultWorker {

init(message: WorkerTaskMessageType) {
const initComplete = WorkerTaskMessage.createFromExisting(message, 'initComplete');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import {
BufferGeometry
} from 'three';
import {
WorkerTaskDirectorDefaultWorker,
WorkerTaskDirectorWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessage,
WorkerTaskMessageType
} from 'wtd-core';
Expand All @@ -13,7 +12,7 @@ import {

declare const self: DedicatedWorkerGlobalScope;

class InfiniteWorkerExternalGeometry extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class InfiniteWorkerExternalGeometry extends WorkerTaskDefaultWorker {

private localData = {
meshPayloadRaw: undefined as MeshPayloadType | undefined
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import {
MeshPhongMaterial
} from 'three';
import {
WorkerTaskDirectorDefaultWorker,
WorkerTaskDirectorWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessage,
WorkerTaskMessageType
} from 'wtd-core';
Expand All @@ -15,7 +14,7 @@ import {
MaterialsPayload,
} from 'wtd-three-ext';

class InfiniteWorkerInternalGeometry extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class InfiniteWorkerInternalGeometry extends WorkerTaskDefaultWorker {

init(message: WorkerTaskMessageType) {
const initComplete = WorkerTaskMessage.createFromExisting(message, 'initComplete');
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/OBJLoaderWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import {
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
import {
AssociatedArrayType,
WorkerTaskDirectorDefaultWorker,
WorkerTaskDirectorWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessage,
WorkerTaskMessageType
} from 'wtd-core';
Expand All @@ -18,7 +17,7 @@ import {

declare const self: DedicatedWorkerGlobalScope;

class OBJLoaderWorker extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class OBJLoaderWorker extends WorkerTaskDefaultWorker {

private localData = {
objLoader: undefined as OBJLoader | undefined,
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/TransferableWorkerTest1.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import {
WorkerTaskDirectorWorker,
WorkerTaskDirectorDefaultWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessageType,
WorkerTaskMessage,
DataPayload
} from 'wtd-core';

declare const self: DedicatedWorkerGlobalScope;

class TransferableWorkerTest1 extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class TransferableWorkerTest1 extends WorkerTaskDefaultWorker {

init(message: WorkerTaskMessageType) {
console.log(`TransferableWorkerTest1#init: name: ${message.name} id: ${message.id} cmd: ${message.cmd} workerId: ${message.workerId}`);
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/TransferableWorkerTest2.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import {
WorkerTaskDirectorWorker,
WorkerTaskDirectorDefaultWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessageType,
WorkerTaskMessage,
DataPayload
} from 'wtd-core';

declare const self: DedicatedWorkerGlobalScope;

class TransferableWorkerTest2 extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class TransferableWorkerTest2 extends WorkerTaskDefaultWorker {

init(message: WorkerTaskMessageType) {
console.log(`TransferableWorkerTest2#init: name: ${message.name} id: ${message.id} cmd: ${message.cmd} workerId: ${message.workerId}`);
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/TransferableWorkerTest3.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { BufferGeometry } from 'three';
import {
WorkerTaskDirectorWorker,
WorkerTaskDirectorDefaultWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessageType,
WorkerTaskMessage,
DataPayload
Expand All @@ -13,7 +12,7 @@ import {

declare const self: DedicatedWorkerGlobalScope;

class TransferableWorkerTest3 extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class TransferableWorkerTest3 extends WorkerTaskDefaultWorker {

private context = {
initPayload: undefined as MeshPayload | undefined
Expand Down
5 changes: 2 additions & 3 deletions packages/examples/src/worker/TransferableWorkerTest4.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { TorusKnotGeometry } from 'three';
import {
WorkerTaskDirectorWorker,
WorkerTaskDirectorDefaultWorker,
WorkerTaskDefaultWorker,
WorkerTaskMessageType,
WorkerTaskMessage
} from 'wtd-core';
Expand All @@ -11,7 +10,7 @@ import {

declare const self: DedicatedWorkerGlobalScope;

class TransferableWorkerTest4 extends WorkerTaskDirectorDefaultWorker implements WorkerTaskDirectorWorker {
class TransferableWorkerTest4 extends WorkerTaskDefaultWorker {

init(message: WorkerTaskMessageType) {
console.log(`TransferableWorkerTest4#init: name: ${message.name} id: ${message.id} cmd: ${message.cmd} workerId: ${message.workerId}`);
Expand Down
8 changes: 2 additions & 6 deletions packages/wtd-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,9 @@ workerTaskDirector.registerTask(taskName, {
try {
await workerTaskDirector.initTaskType(taskName)
// once the init Promise returns enqueue the execution
const execMessage = new WorkerTaskMessage({
id: 0,
name: taskName
});
const execMessage = new WorkerTaskMessage();

await workerTaskDirector.enqueueWorkerExecutionPlan({
taskTypeName: execMessage.name,
await workerTaskDirector.enqueueWorkerExecutionPlan(taskName, {
message: execMessage,
// decouple result evaluation ...
onComplete: (m: WorkerTaskMessageType) => { console.log('Received final command: ' + m.cmd); }
Expand Down
2 changes: 1 addition & 1 deletion packages/wtd-core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wtd-core",
"version": "2.2.1-next.0",
"version": "2.3.0-next.0",
"license": "MIT",
"type": "module",
"main": "./dist/index.js",
Expand Down
15 changes: 14 additions & 1 deletion packages/wtd-core/src/WorkerTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ export type WorkerRegistrationType = {
}

export type WorkerExecutionPlanType = {
taskTypeName: string;
message: WorkerTaskMessage;
onComplete: (message: WorkerTaskMessageType) => void;
onIntermediate?: (message: WorkerTaskMessageType) => void;
Expand Down Expand Up @@ -158,6 +157,20 @@ export class WorkerTask {
});
}

/**
* This is only possible if the worker is already executing.
* @param message
* @param transferables
*/
sentMessage(message: WorkerTaskMessage, transferables?: Transferable[]) {
if (this.isWorkerExecuting() && this.worker) {
message.cmd = 'intermediate';
message.workerId = this.workerId;
this.worker.postMessage(message, transferables!);
}

}

dispose() {
this.worker?.terminate();
}
Expand Down
Loading

0 comments on commit fb62140

Please sign in to comment.