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

Add a mechanism to "Transfer" JSObject between Workers #292

Merged
merged 19 commits into from
Mar 11, 2025
Merged
Changes from 1 commit
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
28d5ec0
Add `JSObject.transfer` and `JSObject.receive` APIs
kateinoigakukun Mar 10, 2025
e406cd3
Stop hardcoding the Swift toolchain version in the Multithreading exa…
kateinoigakukun Mar 10, 2025
cfa1b2d
Update Multithreading example to support transferable objects
kateinoigakukun Mar 10, 2025
9d335a8
Add OffscreenCanvas example
kateinoigakukun Mar 10, 2025
98cec71
Rename `JSObject.receive` to `JSObject.Transferring.receive`
kateinoigakukun Mar 10, 2025
9b84176
Update test harness to support transferring
kateinoigakukun Mar 10, 2025
c481614
Fix JSObject lifetime issue while transferring
kateinoigakukun Mar 10, 2025
65ddcd3
Add basic tests for transferring objects between threads
kateinoigakukun Mar 10, 2025
f0bd60c
Fix native build
kateinoigakukun Mar 10, 2025
8d4bba6
Add cautionary notes to the documentation of `JSObject.transfer()`.
kateinoigakukun Mar 10, 2025
09d5311
Rename `JSObject.Transferring` to `JSTransferring<T>`
kateinoigakukun Mar 11, 2025
f25bfec
MessageBroker
kateinoigakukun Mar 11, 2025
58f91c3
Relax deinit requirement
kateinoigakukun Mar 11, 2025
2a081de
Remove dead code and fix error message
kateinoigakukun Mar 11, 2025
4fe37e7
Rename JSTransferring to JSSending
kateinoigakukun Mar 11, 2025
eeff111
Add `JSSending.receive(...)` to receive multiple objects at once
kateinoigakukun Mar 11, 2025
44a5dba
Build fix
kateinoigakukun Mar 11, 2025
b678f71
Skip multi-transfer tests
kateinoigakukun Mar 11, 2025
f5e3a95
Rename JSObject+Transferring.swift to JSSending.swift
kateinoigakukun Mar 11, 2025
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
Prev Previous commit
Next Next commit
Skip multi-transfer tests
kateinoigakukun committed Mar 11, 2025
commit b678f71b632631ea8c7d782e08ed5a786cf962ee
Original file line number Diff line number Diff line change
@@ -318,6 +318,10 @@ final class WebWorkerTaskExecutorTests: XCTestCase {
XCTAssertTrue(jsErrorMessage.contains("Failed to serialize message"), jsErrorMessage)
}

/*
// Node.js 20 and below doesn't throw exception when transferring the same ArrayBuffer
// multiple times.
// See https://github.com/nodejs/node/commit/38dee8a1c04237bd231a01410f42e9d172f4c162
func testTransferMultipleTimes() async throws {
let executor = try await WebWorkerTaskExecutor(numberOfThreads: 1)
let Uint8Array = JSObject.global.Uint8Array.function!
@@ -344,6 +348,7 @@ final class WebWorkerTaskExecutorTests: XCTestCase {
}
XCTAssertTrue(jsErrorMessage.contains("Failed to serialize message"))
}
*/

func testCloneMultipleTimes() async throws {
let executor = try await WebWorkerTaskExecutor(numberOfThreads: 1)