Summary: | WebAssembly: test compile / instantiate in a Worker | ||
---|---|---|---|
Product: | WebKit | Reporter: | JF Bastien <jfbastien> |
Component: | JavaScriptCore | Assignee: | Nobody <webkit-unassigned> |
Status: | RESOLVED CONFIGURATION CHANGED | ||
Severity: | Normal | CC: | jfbastien, keith_miller, saam, webkit-bug-importer |
Priority: | P2 | Keywords: | InRadar |
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Bug Depends on: | 166481, 168264 | ||
Bug Blocks: | 161709 |
Description
JF Bastien
2016-12-26 09:35:43 PST
(In reply to comment #0) > I've heard from someone trying out WebAssembly that they current use compile > / instantiate in a worker because some implementations aren't asynchronous. > They want to do work on the main thread while compiling, so a Worker makes > sense. They then transfer the Module / Instance back to the main thread. > > We should have a test that this works well. > > Related: > - WebAssembly: Make WebAssembly.compile truly asynchronous > https://bugs.webkit.org/show_bug.cgi?id=166016 > - WebAssembly: Implement the WebAssembly.instantiate API > https://bugs.webkit.org/show_bug.cgi?id=165982 I think this should work as expected regardless of the compile API being asynchronous internally. (In reply to comment #1) > (In reply to comment #0) > > I've heard from someone trying out WebAssembly that they current use compile > > / instantiate in a worker because some implementations aren't asynchronous. > > They want to do work on the main thread while compiling, so a Worker makes > > sense. They then transfer the Module / Instance back to the main thread. > > > > We should have a test that this works well. > > > > Related: > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > - WebAssembly: Implement the WebAssembly.instantiate API > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > I think this should work as expected regardless of the compile API being > asynchronous internally. Also, I agree we should have a test for this. (In reply to comment #2) > (In reply to comment #1) > > (In reply to comment #0) > > > I've heard from someone trying out WebAssembly that they current use compile > > > / instantiate in a worker because some implementations aren't asynchronous. > > > They want to do work on the main thread while compiling, so a Worker makes > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > We should have a test that this works well. > > > > > > Related: > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > I think this should work as expected regardless of the compile API being > > asynchronous internally. > > Also, I agree we should have a test for this. Right, I want to make sure postMessage-ing Module / Instance / Memory / Table all work as expected. (In reply to comment #3) > (In reply to comment #2) > > (In reply to comment #1) > > > (In reply to comment #0) > > > > I've heard from someone trying out WebAssembly that they current use compile > > > > / instantiate in a worker because some implementations aren't asynchronous. > > > > They want to do work on the main thread while compiling, so a Worker makes > > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > > > We should have a test that this works well. > > > > > > > > Related: > > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > > > I think this should work as expected regardless of the compile API being > > > asynchronous internally. > > > > Also, I agree we should have a test for this. > > Right, I want to make sure postMessage-ing Module / Instance / Memory / > Table all work as expected. Interesting. Is that the expected behavior? This is unlike anything we do elsewhere. We don't postMessage heap cells since each worker is in a different VM (In reply to comment #4) > (In reply to comment #3) > > (In reply to comment #2) > > > (In reply to comment #1) > > > > (In reply to comment #0) > > > > > I've heard from someone trying out WebAssembly that they current use compile > > > > > / instantiate in a worker because some implementations aren't asynchronous. > > > > > They want to do work on the main thread while compiling, so a Worker makes > > > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > > > > > We should have a test that this works well. > > > > > > > > > > Related: > > > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > > > > > I think this should work as expected regardless of the compile API being > > > > asynchronous internally. > > > > > > Also, I agree we should have a test for this. > > > > Right, I want to make sure postMessage-ing Module / Instance / Memory / > > Table all work as expected. > > Interesting. Is that the expected behavior? This is unlike anything we do > elsewhere. We don't postMessage heap cells since each worker is in a > different VM I don't know what's expected :-D (In reply to comment #5) > (In reply to comment #4) > > (In reply to comment #3) > > > (In reply to comment #2) > > > > (In reply to comment #1) > > > > > (In reply to comment #0) > > > > > > I've heard from someone trying out WebAssembly that they current use compile > > > > > > / instantiate in a worker because some implementations aren't asynchronous. > > > > > > They want to do work on the main thread while compiling, so a Worker makes > > > > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > > > > > > > We should have a test that this works well. > > > > > > > > > > > > Related: > > > > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > > > > > > > I think this should work as expected regardless of the compile API being > > > > > asynchronous internally. > > > > > > > > Also, I agree we should have a test for this. > > > > > > Right, I want to make sure postMessage-ing Module / Instance / Memory / > > > Table all work as expected. > > > > Interesting. Is that the expected behavior? This is unlike anything we do > > elsewhere. We don't postMessage heap cells since each worker is in a > > different VM > > I don't know what's expected :-D We won't be able to compile a Module then ship over the module across workers. We will be able to have workers that have their own Modules/Instances/etc that can run independently. We need to think about what happens when we try to ship over an ArrayBuffer for Memory. This should probably not be allowed since it's backed by Wasm::Memory mmaped memory. (In reply to comment #6) > (In reply to comment #5) > > (In reply to comment #4) > > > (In reply to comment #3) > > > > (In reply to comment #2) > > > > > (In reply to comment #1) > > > > > > (In reply to comment #0) > > > > > > > I've heard from someone trying out WebAssembly that they current use compile > > > > > > > / instantiate in a worker because some implementations aren't asynchronous. > > > > > > > They want to do work on the main thread while compiling, so a Worker makes > > > > > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > > > > > > > > > We should have a test that this works well. > > > > > > > > > > > > > > Related: > > > > > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > > > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > > > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > > > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > > > > > > > > > I think this should work as expected regardless of the compile API being > > > > > > asynchronous internally. > > > > > > > > > > Also, I agree we should have a test for this. > > > > > > > > Right, I want to make sure postMessage-ing Module / Instance / Memory / > > > > Table all work as expected. > > > > > > Interesting. Is that the expected behavior? This is unlike anything we do > > > elsewhere. We don't postMessage heap cells since each worker is in a > > > different VM > > > > I don't know what's expected :-D > > We won't be able to compile a Module then ship over the module across > workers. We will be able to have workers that have their own > Modules/Instances/etc that can run independently. We need to think about > what happens when we try to ship over an ArrayBuffer for Memory. This should > probably not be allowed since it's backed by Wasm::Memory mmaped memory. IIUC they serialize WebAssembly.Module, and transfer it from Worker to main thread. Apparently this works in Chrome / FF. Should we file an issue on this in the design repo? (In reply to comment #7) > (In reply to comment #6) > > (In reply to comment #5) > > > (In reply to comment #4) > > > > (In reply to comment #3) > > > > > (In reply to comment #2) > > > > > > (In reply to comment #1) > > > > > > > (In reply to comment #0) > > > > > > > > I've heard from someone trying out WebAssembly that they current use compile > > > > > > > > / instantiate in a worker because some implementations aren't asynchronous. > > > > > > > > They want to do work on the main thread while compiling, so a Worker makes > > > > > > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > > > > > > > > > > > We should have a test that this works well. > > > > > > > > > > > > > > > > Related: > > > > > > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > > > > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > > > > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > > > > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > > > > > > > > > > > I think this should work as expected regardless of the compile API being > > > > > > > asynchronous internally. > > > > > > > > > > > > Also, I agree we should have a test for this. > > > > > > > > > > Right, I want to make sure postMessage-ing Module / Instance / Memory / > > > > > Table all work as expected. > > > > > > > > Interesting. Is that the expected behavior? This is unlike anything we do > > > > elsewhere. We don't postMessage heap cells since each worker is in a > > > > different VM > > > > > > I don't know what's expected :-D > > > > We won't be able to compile a Module then ship over the module across > > workers. We will be able to have workers that have their own > > Modules/Instances/etc that can run independently. We need to think about > > what happens when we try to ship over an ArrayBuffer for Memory. This should > > probably not be allowed since it's backed by Wasm::Memory mmaped memory. > > IIUC they serialize WebAssembly.Module, and transfer it from Worker to main > thread. Apparently this works in Chrome / FF. Should we file an issue on > this in the design repo? We should probably support the same serialization. I'm interested to know what happens to the underlying Memory/etc in the worker that created them after they're transferred. Also, what happens to the underlying memory? Is there a spec for this serialization? A better API than using workers would be we should just make the asynchronous APIs truly asynchronous. I don't think that should be too difficult (In reply to comment #8) > (In reply to comment #7) > > (In reply to comment #6) > > > (In reply to comment #5) > > > > (In reply to comment #4) > > > > > (In reply to comment #3) > > > > > > (In reply to comment #2) > > > > > > > (In reply to comment #1) > > > > > > > > (In reply to comment #0) > > > > > > > > > I've heard from someone trying out WebAssembly that they current use compile > > > > > > > > > / instantiate in a worker because some implementations aren't asynchronous. > > > > > > > > > They want to do work on the main thread while compiling, so a Worker makes > > > > > > > > > sense. They then transfer the Module / Instance back to the main thread. > > > > > > > > > > > > > > > > > > We should have a test that this works well. > > > > > > > > > > > > > > > > > > Related: > > > > > > > > > - WebAssembly: Make WebAssembly.compile truly asynchronous > > > > > > > > > https://bugs.webkit.org/show_bug.cgi?id=166016 > > > > > > > > > - WebAssembly: Implement the WebAssembly.instantiate API > > > > > > > > > https://bugs.webkit.org/show_bug.cgi?id=165982 > > > > > > > > > > > > > > > > I think this should work as expected regardless of the compile API being > > > > > > > > asynchronous internally. > > > > > > > > > > > > > > Also, I agree we should have a test for this. > > > > > > > > > > > > Right, I want to make sure postMessage-ing Module / Instance / Memory / > > > > > > Table all work as expected. > > > > > > > > > > Interesting. Is that the expected behavior? This is unlike anything we do > > > > > elsewhere. We don't postMessage heap cells since each worker is in a > > > > > different VM > > > > > > > > I don't know what's expected :-D > > > > > > We won't be able to compile a Module then ship over the module across > > > workers. We will be able to have workers that have their own > > > Modules/Instances/etc that can run independently. We need to think about > > > what happens when we try to ship over an ArrayBuffer for Memory. This should > > > probably not be allowed since it's backed by Wasm::Memory mmaped memory. > > > > IIUC they serialize WebAssembly.Module, and transfer it from Worker to main > > thread. Apparently this works in Chrome / FF. Should we file an issue on > > this in the design repo? > We should probably support the same serialization. I'm interested to know > what happens to the underlying Memory/etc in the worker that created them > after they're transferred. Also, what happens to the underlying memory? Is > there a spec for this serialization? A better API than using workers would > be we should just make the asynchronous APIs truly asynchronous. I don't > think that should be too difficult I believe that only Module is expected to be postMessage-able correctly, and that the details are tied to IndexDB support: https://bugs.webkit.org/show_bug.cgi?id=166481 At a minimum we'll have to be able to patch vm.topJSWebAssemblyInstance (I'm removing the other wasm things from VM). This is already done. |