haikuwebkit/LayoutTests/workers/wasm-long-compile.html

14 lines
281 B
HTML
Raw Permalink Normal View History

WebAssembly: We should be able to postMessage a JSWebAssemblyModule https://bugs.webkit.org/show_bug.cgi?id=170573 Reviewed by Filip Pizlo. Source/JavaScriptCore: This patch adds a callback to JSRunLoopTimer to notify clients that a timer has been set. This is used inside WorkerRunLoop in WebCore so that its RunLoop can perform an iteration when it sees that a timer got set. * JavaScriptCore.xcodeproj/project.pbxproj: * runtime/JSRunLoopTimer.cpp: (JSC::JSRunLoopTimer::scheduleTimer): (JSC::JSRunLoopTimer::addTimerSetNotification): (JSC::JSRunLoopTimer::removeTimerSetNotification): * runtime/JSRunLoopTimer.h: * wasm/WasmCodeBlock.cpp: (JSC::Wasm::CodeBlock::~CodeBlock): * wasm/WasmCodeBlock.h: * wasm/WasmModule.cpp: (JSC::Wasm::Module::~Module): (JSC::Wasm::Module::signatureIndexFromFunctionIndexSpace): (JSC::Wasm::makeValidationCallback): (JSC::Wasm::Module::validateSync): (JSC::Wasm::Module::validateAsync): (JSC::Wasm::Module::validateSyncImpl): Deleted. (JSC::Wasm::Module::makeValidationCallback): Deleted. * wasm/WasmModule.h: (JSC::Wasm::Module::validateSync): Deleted. (JSC::Wasm::Module::validateAsync): Deleted. (JSC::Wasm::Module::signatureIndexFromFunctionIndexSpace): Deleted. (JSC::Wasm::Module::nonNullCodeBlock): Deleted. * wasm/js/JSWebAssemblyCodeBlock.cpp: (JSC::JSWebAssemblyCodeBlock::create): * wasm/js/JSWebAssemblyCodeBlock.h: (JSC::JSWebAssemblyCodeBlock::create): Deleted. * wasm/js/JSWebAssemblyModule.cpp: (JSC::JSWebAssemblyModule::source): * wasm/js/JSWebAssemblyModule.h: (JSC::JSWebAssemblyModule::source): Deleted. * wasm/js/WebAssemblyFunction.cpp: (JSC::callWebAssemblyFunction): * wasm/js/WebAssemblyModulePrototype.cpp: Source/WebCore: This patch's main purpose is to implement postMessage of JSWebAssemblyModule. The spec text describing the behavior is: https://github.com/WebAssembly/design/blob/master/JS.md#structured-clone-of-a-webassemblymodule We only allow for JSWebAssemblyModule to be serialized in the postMessage context. More work needs to be done to make it valid to store a module in IndexDB. All that is needed to serialize a JSWebAssemblyModule is grab a Ref to its underlying Wasm::Module. So, when doing a postMessage, all we do is grab this Ref, and then re-create the JSWebAssemblyModule from the Wasm::Module in the new VM/global object. Because the code for Wasm::Module is VM-independent, this is all that's needed. This turned out nicely, because it requires little knowledge from WebCore about what it means to clone a JSWebAssemblyModule. The second significant part of this patch is teaching WorkerRunLoop about the various timers inside JSC. Before, the WorkerRunLoop wouldn't always wake up to address JSC timers. I noticed this bug when I was writing tests to make sure that Wasm was running concurrently in different workers. The bug is that the WorkerRunLoop's message queue has no insight into a timer being scheduled. This effected the PromiseDeferredTimer that Wasm uses, as well as the various GC timers that Heap uses. Now, WorkerRunLoop will set itself up to be notified when timers are set. When a timer is set, the WorkerRunLoop will perform an iteration to to reset its top level MessageQueue timeout to be no longer than the next timer fire date. Tests: storage/indexeddb/wasm-exceptions.html workers/wasm-hashset-many.html workers/wasm-hashset.html workers/wasm-long-compile-many.html workers/wasm-long-compile.html * ForwardingHeaders/heap/GCActivityCallback.h: Added. * ForwardingHeaders/runtime/JSRunLoopTimer.h: Added. * ForwardingHeaders/runtime/PromiseDeferredTimer.h: Added. * ForwardingHeaders/wasm: Added. * ForwardingHeaders/wasm/js: Added. * ForwardingHeaders/wasm/js/JSWebAssemblyModule.h: Added. * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneSerializer::serialize): (WebCore::CloneSerializer::CloneSerializer): (WebCore::CloneSerializer::dumpIfTerminal): (WebCore::CloneDeserializer::deserialize): (WebCore::CloneDeserializer::CloneDeserializer): (WebCore::CloneDeserializer::readTerminal): (WebCore::SerializedScriptValue::SerializedScriptValue): (WebCore::SerializedScriptValue::create): (WebCore::SerializedScriptValue::deserialize): * bindings/js/SerializedScriptValue.h: * bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::addTimerSetNotification): (WebCore::WorkerScriptController::removeTimerSetNotification): * bindings/js/WorkerScriptController.h: * workers/WorkerRunLoop.cpp: (WebCore::WorkerRunLoop::runInMode): LayoutTests: * storage/indexeddb/resources/wasm-exceptions.js: Added. (const._fail): (const.isNotA.assert.isNotA): (const): (switch.typeof): (Builder): (Builder.prototype.setChecked): (Builder.prototype.setPreamble): (Builder.prototype._functionIndexSpaceKeyHash): (Builder.prototype._registerFunctionToIndexSpace): (Builder.prototype._getFunctionFromIndexSpace): (Builder.prototype._registerSectionBuilders.const.section.in.WASM.description.section.switch.section.case.string_appeared_here.this.section): (Builder.prototype._registerSectionBuilders.const.section.in.WASM.description.section.switch.section.const.codeBuilder.End.switch.case.string_appeared_here.e): (Builder.prototype._registerSectionBuilders.this.Unknown): (prepareDatabase): (testDatabase): * storage/indexeddb/wasm-exceptions-expected.txt: Added. * storage/indexeddb/wasm-exceptions.html: Added. * workers/wasm-hashset: Added. * workers/wasm-hashset-expected.txt: Added. * workers/wasm-hashset-many-expected.txt: Added. * workers/wasm-hashset-many.html: Added. * workers/wasm-hashset.html: Added. * workers/wasm-hashset/many-test.js: Added. (reallyDone): (console.log): (console.error): (console.assert): (i.worker.onmessage): (Module.print): (Module.printErr): (Module.canvas): (Module.setStatus): (Module): (setValue): (getValue): (allocate): (getMemory): (Pointer_stringify): (AsciiToString): (stringToAscii): (UTF8ArrayToString): (UTF8ToString): (stringToUTF8Array): (stringToUTF8): (lengthBytesUTF8): (demangle): (demangleAll): (stackTrace): (alignUp): (updateGlobalBuffer): (updateGlobalBufferViews): (abortOnCannotGrowMemory): (enlargeMemory): (getTotalMemory): (callRuntimeCallbacks): (preRun): (ensureInitRuntime): (preMain): (exitRuntime): (postRun): (addOnPreRun): (addOnInit): (addOnPreMain): (addOnExit): (addOnPostRun): (intArrayFromString): (intArrayToString): (writeStringToMemory): (writeArrayToMemory): (writeAsciiToMemory): (Math.string_appeared_here): (addRunDependency): (removeRunDependency): (integrateWasmJS.asm2wasmImports.string_appeared_here): (integrateWasmJS.lookupImport): (integrateWasmJS.mergeMemory): (integrateWasmJS.fixImports): (integrateWasmJS.getBinary): (integrateWasmJS.doJustAsm): (integrateWasmJS.receiveInstance): (integrateWasmJS.): (integrateWasmJS.doNativeWasm): (integrateWasmJS.doWasmPolyfill): (integrateWasmJS.Module.string_appeared_here): (integrateWasmJS): (___setErrNo): (__ZSt18uncaught_exceptionv): (EXCEPTIONS.deAdjust): (EXCEPTIONS.addRef): (EXCEPTIONS.decRef): (EXCEPTIONS.clearRef): (___cxa_find_matching_catch): (___gxx_personality_v0): (___lock): (_emscripten_memcpy_big): (_gettimeofday): (_abort): (SYSCALLS): (SYSCALLS.get getStr): (SYSCALLS.get64): (SYSCALLS.getZero): (try.___syscall146.printChar): (___syscall146): (___syscall54): (___unlock): (___syscall6): (invoke_ii): (invoke_iiii): (invoke_v): (_malloc.Module.string_appeared_here): (getTempRet0.Module.string_appeared_here): (_free.Module.string_appeared_here): (_main.Module.string_appeared_here): (setTempRet0.Module.string_appeared_here): (establishStackSpace.Module.string_appeared_here): (stackSave.Module.string_appeared_here): (_memset.Module.string_appeared_here): (_sbrk.Module.string_appeared_here): (_emscripten_get_global_libc.Module.string_appeared_here): (_memcpy.Module.string_appeared_here): (___errno_location.Module.string_appeared_here): (setThrew.Module.string_appeared_here): (_fflush.Module.string_appeared_here): (stackAlloc.Module.string_appeared_here): (stackRestore.Module.string_appeared_here): (_llvm_bswap_i32.Module.string_appeared_here): (runPostSets.Module.string_appeared_here): (dynCall_ii.Module.string_appeared_here): (dynCall_iiii.Module.string_appeared_here): (dynCall_v.Module.string_appeared_here): (else.applyMemoryInitializer): (else): (else.useRequest): (ExitStatus): (dependenciesFulfilled): (Module.string_appeared_here.Module.callMain.callMain.pad): (Module.string_appeared_here.Module.callMain): (run.doRun): (run): (exit): * workers/wasm-hashset/many-worker.js: Added. (console.log): (console.error): (console.assert): (Module.print): (Module.printErr): (Module.canvas): (Module.setStatus): (Module): (setValue): (getValue): (allocate): (getMemory): (Pointer_stringify): (AsciiToString): (stringToAscii): (UTF8ArrayToString): (UTF8ToString): (stringToUTF8Array): (stringToUTF8): (lengthBytesUTF8): (demangle): (demangleAll): (stackTrace): (alignUp): (updateGlobalBuffer): (updateGlobalBufferViews): (abortOnCannotGrowMemory): (enlargeMemory): (getTotalMemory): (callRuntimeCallbacks): (preRun): (ensureInitRuntime): (preMain): (exitRuntime): (postRun): (addOnPreRun): (addOnInit): (addOnPreMain): (addOnExit): (addOnPostRun): (intArrayFromString): (intArrayToString): (writeStringToMemory): (writeArrayToMemory): (writeAsciiToMemory): (Math.string_appeared_here): (addRunDependency): (removeRunDependency): (integrateWasmJS.asm2wasmImports.string_appeared_here): (integrateWasmJS.lookupImport): (integrateWasmJS.mergeMemory): (integrateWasmJS.fixImports): (integrateWasmJS.getBinary): (integrateWasmJS.doJustAsm): (integrateWasmJS.receiveInstance): (integrateWasmJS.doNativeWasm): (integrateWasmJS.doWasmPolyfill): (integrateWasmJS.Module.string_appeared_here): (integrateWasmJS): (___setErrNo): (__ZSt18uncaught_exceptionv): (EXCEPTIONS.deAdjust): (EXCEPTIONS.addRef): (EXCEPTIONS.decRef): (EXCEPTIONS.clearRef): (___cxa_find_matching_catch): (___gxx_personality_v0): (___lock): (_emscripten_memcpy_big): (_gettimeofday): (_abort): (SYSCALLS): (SYSCALLS.get getStr): (SYSCALLS.get64): (SYSCALLS.getZero): (try.___syscall146.printChar): (___syscall146): (___syscall54): (___unlock): (___syscall6): (invoke_ii): (invoke_iiii): (invoke_v): (_malloc.Module.string_appeared_here): (getTempRet0.Module.string_appeared_here): (_free.Module.string_appeared_here): (_main.Module.string_appeared_here): (setTempRet0.Module.string_appeared_here): (establishStackSpace.Module.string_appeared_here): (stackSave.Module.string_appeared_here): (_memset.Module.string_appeared_here): (_sbrk.Module.string_appeared_here): (_emscripten_get_global_libc.Module.string_appeared_here): (_memcpy.Module.string_appeared_here): (___errno_location.Module.string_appeared_here): (setThrew.Module.string_appeared_here): (_fflush.Module.string_appeared_here): (stackAlloc.Module.string_appeared_here): (stackRestore.Module.string_appeared_here): (_llvm_bswap_i32.Module.string_appeared_here): (runPostSets.Module.string_appeared_here): (dynCall_ii.Module.string_appeared_here): (dynCall_iiii.Module.string_appeared_here): (dynCall_v.Module.string_appeared_here): (else.applyMemoryInitializer): (else): (else.useRequest): (ExitStatus): (dependenciesFulfilled): (Module.string_appeared_here.Module.callMain.callMain.pad): (Module.string_appeared_here.Module.callMain): (run.doRun): (run): (exit): * workers/wasm-hashset/test.js: Added. (reallyDone): (console.log): (console.error): (console.assert): (Module.print): (Module.printErr): (Module.canvas): (Module.setStatus): (Module): (setValue): (getValue): (allocate): (getMemory): (Pointer_stringify): (AsciiToString): (stringToAscii): (UTF8ArrayToString): (UTF8ToString): (stringToUTF8Array): (stringToUTF8): (lengthBytesUTF8): (demangle): (demangleAll): (stackTrace): (alignUp): (updateGlobalBuffer): (updateGlobalBufferViews): (abortOnCannotGrowMemory): (enlargeMemory): (getTotalMemory): (callRuntimeCallbacks): (preRun): (ensureInitRuntime): (preMain): (exitRuntime): (postRun): (addOnPreRun): (addOnInit): (addOnPreMain): (addOnExit): (addOnPostRun): (intArrayFromString): (intArrayToString): (writeStringToMemory): (writeArrayToMemory): (writeAsciiToMemory): (Math.string_appeared_here): (addRunDependency): (removeRunDependency): (integrateWasmJS.asm2wasmImports.string_appeared_here): (integrateWasmJS.lookupImport): (integrateWasmJS.mergeMemory): (integrateWasmJS.fixImports): (integrateWasmJS.getBinary): (integrateWasmJS.doJustAsm): (integrateWasmJS.receiveInstance): (integrateWasmJS.doNativeWasm): (integrateWasmJS.doWasmPolyfill): (integrateWasmJS.Module.string_appeared_here): (integrateWasmJS): (___setErrNo): (__ZSt18uncaught_exceptionv): (EXCEPTIONS.deAdjust): (EXCEPTIONS.addRef): (EXCEPTIONS.decRef): (EXCEPTIONS.clearRef): (___cxa_find_matching_catch): (___gxx_personality_v0): (___lock): (_emscripten_memcpy_big): (_gettimeofday): (_abort): (SYSCALLS): (SYSCALLS.get getStr): (SYSCALLS.get64): (SYSCALLS.getZero): (try.___syscall146.printChar): (___syscall146): (___syscall54): (___unlock): (___syscall6): (invoke_ii): (invoke_iiii): (invoke_v): (_malloc.Module.string_appeared_here): (getTempRet0.Module.string_appeared_here): (_free.Module.string_appeared_here): (_main.Module.string_appeared_here): (setTempRet0.Module.string_appeared_here): (establishStackSpace.Module.string_appeared_here): (stackSave.Module.string_appeared_here): (_memset.Module.string_appeared_here): (_sbrk.Module.string_appeared_here): (_emscripten_get_global_libc.Module.string_appeared_here): (_memcpy.Module.string_appeared_here): (___errno_location.Module.string_appeared_here): (setThrew.Module.string_appeared_here): (_fflush.Module.string_appeared_here): (stackAlloc.Module.string_appeared_here): (stackRestore.Module.string_appeared_here): (_llvm_bswap_i32.Module.string_appeared_here): (runPostSets.Module.string_appeared_here): (dynCall_ii.Module.string_appeared_here): (dynCall_iiii.Module.string_appeared_here): (dynCall_v.Module.string_appeared_here): (else.applyMemoryInitializer): (else): (else.useRequest): (ExitStatus): (dependenciesFulfilled): (Module.string_appeared_here.Module.callMain.callMain.pad): (Module.string_appeared_here.Module.callMain): (run.doRun): (run): (exit): * workers/wasm-hashset/worker.js: Added. (console.log): (console.error): (console.assert): (Module.print): (Module.printErr): (Module.canvas): (Module.setStatus): (Module): (setValue): (getValue): (allocate): (getMemory): (Pointer_stringify): (AsciiToString): (stringToAscii): (UTF8ArrayToString): (UTF8ToString): (stringToUTF8Array): (stringToUTF8): (lengthBytesUTF8): (demangle): (demangleAll): (stackTrace): (alignUp): (updateGlobalBuffer): (updateGlobalBufferViews): (abortOnCannotGrowMemory): (enlargeMemory): (getTotalMemory): (callRuntimeCallbacks): (preRun): (ensureInitRuntime): (preMain): (exitRuntime): (postRun): (addOnPreRun): (addOnInit): (addOnPreMain): (addOnExit): (addOnPostRun): (intArrayFromString): (intArrayToString): (writeStringToMemory): (writeArrayToMemory): (writeAsciiToMemory): (Math.string_appeared_here): (addRunDependency): (removeRunDependency): (integrateWasmJS.asm2wasmImports.string_appeared_here): (integrateWasmJS.lookupImport): (integrateWasmJS.mergeMemory): (integrateWasmJS.fixImports): (integrateWasmJS.getBinary): (integrateWasmJS.doJustAsm): (integrateWasmJS.receiveInstance): (integrateWasmJS.): (integrateWasmJS.doNativeWasm): (integrateWasmJS.doWasmPolyfill): (integrateWasmJS.Module.string_appeared_here): (integrateWasmJS): (___setErrNo): (__ZSt18uncaught_exceptionv): (EXCEPTIONS.deAdjust): (EXCEPTIONS.addRef): (EXCEPTIONS.decRef): (EXCEPTIONS.clearRef): (___cxa_find_matching_catch): (___gxx_personality_v0): (___lock): (_emscripten_memcpy_big): (_gettimeofday): (_abort): (SYSCALLS): (SYSCALLS.get getStr): (SYSCALLS.get64): (SYSCALLS.getZero): (try.___syscall146.printChar): (___syscall146): (___syscall54): (___unlock): (___syscall6): (invoke_ii): (invoke_iiii): (invoke_v): (_malloc.Module.string_appeared_here): (getTempRet0.Module.string_appeared_here): (_free.Module.string_appeared_here): (_main.Module.string_appeared_here): (setTempRet0.Module.string_appeared_here): (establishStackSpace.Module.string_appeared_here): (stackSave.Module.string_appeared_here): (_memset.Module.string_appeared_here): (_sbrk.Module.string_appeared_here): (_emscripten_get_global_libc.Module.string_appeared_here): (_memcpy.Module.string_appeared_here): (___errno_location.Module.string_appeared_here): (setThrew.Module.string_appeared_here): (_fflush.Module.string_appeared_here): (stackAlloc.Module.string_appeared_here): (stackRestore.Module.string_appeared_here): (_llvm_bswap_i32.Module.string_appeared_here): (runPostSets.Module.string_appeared_here): (dynCall_ii.Module.string_appeared_here): (dynCall_iiii.Module.string_appeared_here): (dynCall_v.Module.string_appeared_here): (else.applyMemoryInitializer): (else): (else.useRequest): (ExitStatus): (dependenciesFulfilled): (Module.string_appeared_here.Module.callMain.callMain.pad): (Module.string_appeared_here.Module.callMain): (run.doRun): (run): (exit): * workers/wasm-long-compile-expected.txt: Added. * workers/wasm-long-compile-many-expected.txt: Added. * workers/wasm-long-compile-many.html: Added. * workers/wasm-long-compile.html: Added. * workers/wasm-resources: Added. * workers/wasm-resources/long-compile-many.js: Added. (done): (i.async.run): (i.worker.onmessage): * workers/wasm-resources/long-compile-worker.js: Added. (const._fail): (const.isNotA.assert.isNotA): (const): (switch.typeof): (Builder): (Builder.prototype.setChecked): (Builder.prototype.setPreamble): (Builder.prototype._functionIndexSpaceKeyHash): (Builder.prototype._registerFunctionToIndexSpace): (Builder.prototype._getFunctionFromIndexSpace): (Builder.prototype._registerSectionBuilders.const.section.in.WASM.description.section.switch.section.case.string_appeared_here.this.section): (Builder.prototype._registerSectionBuilders.const.section.in.WASM.description.section.switch.section.const.codeBuilder.End.switch.case.string_appeared_here.e): (Builder.prototype._registerSectionBuilders.this.Unknown): * workers/wasm-resources/long-compile.js: Added. (done): (async.run): (worker.onmessage): Canonical link: https://commits.webkit.org/187770@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215353 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-14 02:10:17 +00:00
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
</head>
<body>
<script>
if (window.testRunner)
testRunner.waitUntilDone();
</script>
<script src="./wasm-resources/long-compile.js"></script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>