Ignore:
Timestamp:
Apr 7, 2017, 11:25:14 AM (8 years ago)
Author:
[email protected]
Message:

WebAssembly: Make to a compilation API that allows for multi-VM concurrent compilations of Wasm Modules
https://bugs.webkit.org/show_bug.cgi?id=170488

Reviewed by JF Bastien.

Source/JavaScriptCore:

This patch adds a class called Wasm::Module. It contains the bits from
JSWebAssemblyModule that were not VM specific. JSWebAssemblyModule
now has a Ref<Wasm::Module>. Similarly, there is now a Wasm::CodeBlock,
which owns the non-VM-specific bits that JSWebAssemblyCodeBlock used
to own.

This patch also simplifies how we verify and compile code. Wasm::Module
now has an API for both sync/async validation and compilation. This
API abstracts away how Wasm::Plan works.

This is hopefully the last patch needed before we can implement
window.postMessage for a JSWebAssemblyModule. I think all that's
needed now to implement postMessage is simply creating a new
JSWebAssemblyModule with the underlying Wasm::Module.

This patch is neutral on WasmBench.

Finally, this patch changes the promise deferred timer to
allow for new tasks to be added while we're executing
a task. Before, we'd deadlock if this happened.

(functionTestWasmModuleFunctions):

  • runtime/PromiseDeferredTimer.cpp:

(JSC::PromiseDeferredTimer::doWork):
(JSC::PromiseDeferredTimer::scheduleWorkSoon):

  • runtime/PromiseDeferredTimer.h:
  • wasm/WasmB3IRGenerator.cpp:
  • wasm/WasmBinding.cpp:

(JSC::Wasm::wasmToJs):
(JSC::Wasm::wasmToWasm):
(JSC::Wasm::exitStubGenerator): Deleted.

  • wasm/WasmBinding.h:
  • wasm/WasmCodeBlock.cpp: Added.

(JSC::Wasm::CodeBlock::CodeBlock):
(JSC::Wasm::CodeBlock::waitUntilFinished):
(JSC::Wasm::CodeBlock::compileAsync):
(JSC::Wasm::CodeBlock::isSafeToRun):

  • wasm/WasmCodeBlock.h: Added.

(JSC::Wasm::CodeBlock::create):
(JSC::Wasm::CodeBlock::compilationFinished):
(JSC::Wasm::CodeBlock::runnable):
(JSC::Wasm::CodeBlock::errorMessage):
(JSC::Wasm::CodeBlock::functionImportCount):
(JSC::Wasm::CodeBlock::jsEntrypointCalleeFromFunctionIndexSpace):
(JSC::Wasm::CodeBlock::wasmEntrypointCalleeFromFunctionIndexSpace):

  • wasm/WasmModule.cpp: Added.

(JSC::Wasm::Module::Module):
(JSC::Wasm::makeValidationResult):
(JSC::Wasm::Module::validateSyncImpl):
(JSC::Wasm::Module::getOrCreateCodeBlock):
(JSC::Wasm::Module::compileSync):
(JSC::Wasm::Module::makeValidationCallback):
(JSC::Wasm::Module::compileAsync):

  • wasm/WasmModule.h: Added.

(JSC::Wasm::Module::create):
(JSC::Wasm::Module::validateSync):
(JSC::Wasm::Module::validateAsync):
(JSC::Wasm::Module::signatureIndexFromFunctionIndexSpace):
(JSC::Wasm::Module::moduleInformation):
(JSC::Wasm::Module::nonNullCodeBlock):

  • wasm/WasmPlan.cpp:

(JSC::Wasm::Plan::Plan):
(JSC::Wasm::Plan::addCompletionTask):
(JSC::Wasm::Plan::prepare):
(JSC::Wasm::Plan::compileFunctions):
(JSC::Wasm::Plan::complete):
(JSC::Wasm::Plan::tryRemoveVMAndCancelIfLast):
(JSC::Wasm::Plan::cancel): Deleted.

  • wasm/WasmPlan.h:

(JSC::Wasm::Plan::dontFinalize):
(JSC::Wasm::Plan::takeWasmToWasmExitStubs):
(JSC::Wasm::Plan::mode):
(JSC::Wasm::Plan::takeWasmExitStubs): Deleted.
(JSC::Wasm::Plan::vm): Deleted.

  • wasm/WasmWorklist.cpp:

(JSC::Wasm::Worklist::stopAllPlansForVM):

  • wasm/js/JSWebAssemblyCodeBlock.cpp:

(JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
(JSC::JSWebAssemblyCodeBlock::isSafeToRun):
(JSC::JSWebAssemblyCodeBlock::initialize): Deleted.

  • wasm/js/JSWebAssemblyCodeBlock.h:

(JSC::JSWebAssemblyCodeBlock::create):
(JSC::JSWebAssemblyCodeBlock::functionImportCount):
(JSC::JSWebAssemblyCodeBlock::jsEntrypointCalleeFromFunctionIndexSpace):
(JSC::JSWebAssemblyCodeBlock::wasmEntrypointCalleeFromFunctionIndexSpace):
(JSC::JSWebAssemblyCodeBlock::wasmToJsCallStubForImport):
(JSC::JSWebAssemblyCodeBlock::mode): Deleted.
(JSC::JSWebAssemblyCodeBlock::initialized): Deleted.
(JSC::JSWebAssemblyCodeBlock::plan): Deleted.
(JSC::JSWebAssemblyCodeBlock::runnable): Deleted.
(JSC::JSWebAssemblyCodeBlock::errorMessage): Deleted.
(JSC::JSWebAssemblyCodeBlock::setJSEntrypointCallee): Deleted.
(JSC::JSWebAssemblyCodeBlock::setWasmEntrypointCallee): Deleted.

  • wasm/js/JSWebAssemblyInstance.cpp:

(JSC::JSWebAssemblyInstance::finalizeCreation):
(JSC::JSWebAssemblyInstance::addUnitializedCodeBlock): Deleted.

  • wasm/js/JSWebAssemblyInstance.h:

(JSC::JSWebAssemblyInstance::initialized): Deleted.

  • wasm/js/JSWebAssemblyModule.cpp:

(JSC::JSWebAssemblyModule::createStub):
(JSC::JSWebAssemblyModule::JSWebAssemblyModule):
(JSC::JSWebAssemblyModule::finishCreation):

  • wasm/js/JSWebAssemblyModule.h:

(JSC::JSWebAssemblyModule::moduleInformation):
(JSC::JSWebAssemblyModule::signatureIndexFromFunctionIndexSpace):
(JSC::JSWebAssemblyModule::module):

  • wasm/js/WebAssemblyFunction.cpp:

(JSC::WebAssemblyFunction::create):

  • wasm/js/WebAssemblyInstanceConstructor.cpp:

(JSC::constructJSWebAssemblyInstance):

  • wasm/js/WebAssemblyModuleConstructor.cpp:

(JSC::WebAssemblyModuleConstructor::createModule):

  • wasm/js/WebAssemblyPrototype.cpp:

(JSC::reject):
(JSC::webAssemblyCompileFunc):
(JSC::resolve):
(JSC::instantiate):
(JSC::compileAndInstantiate):
(JSC::webAssemblyValidateFunc):

Source/WTF:

  • wtf/SharedTask.h: Make SharedTaskFunctor forward its arguments.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r215088 r215103  
     12017-04-07  Saam Barati  <[email protected]>
     2
     3        WebAssembly: Make to a compilation API that allows for multi-VM concurrent compilations of Wasm Modules
     4        https://bugs.webkit.org/show_bug.cgi?id=170488
     5
     6        Reviewed by JF Bastien.
     7
     8        This patch adds a class called Wasm::Module. It contains the bits from
     9        JSWebAssemblyModule that were not VM specific. JSWebAssemblyModule
     10        now has a Ref<Wasm::Module>. Similarly, there is now a Wasm::CodeBlock,
     11        which owns the non-VM-specific bits that JSWebAssemblyCodeBlock used
     12        to own.
     13       
     14        This patch also simplifies how we verify and compile code. Wasm::Module
     15        now has an API for both sync/async validation and compilation. This
     16        API abstracts away how Wasm::Plan works.
     17       
     18        This is hopefully the last patch needed before we can implement
     19        window.postMessage for a JSWebAssemblyModule. I think all that's
     20        needed now to implement postMessage is simply creating a new
     21        JSWebAssemblyModule with the underlying Wasm::Module.
     22       
     23        This patch is neutral on WasmBench.
     24       
     25        Finally, this patch changes the promise deferred timer to
     26        allow for new tasks to be added while we're executing
     27        a task. Before, we'd deadlock if this happened.
     28
     29        * CMakeLists.txt:
     30        * JavaScriptCore.xcodeproj/project.pbxproj:
     31        * jsc.cpp:
     32        (functionTestWasmModuleFunctions):
     33        * runtime/PromiseDeferredTimer.cpp:
     34        (JSC::PromiseDeferredTimer::doWork):
     35        (JSC::PromiseDeferredTimer::scheduleWorkSoon):
     36        * runtime/PromiseDeferredTimer.h:
     37        * wasm/WasmB3IRGenerator.cpp:
     38        * wasm/WasmBinding.cpp:
     39        (JSC::Wasm::wasmToJs):
     40        (JSC::Wasm::wasmToWasm):
     41        (JSC::Wasm::exitStubGenerator): Deleted.
     42        * wasm/WasmBinding.h:
     43        * wasm/WasmCodeBlock.cpp: Added.
     44        (JSC::Wasm::CodeBlock::CodeBlock):
     45        (JSC::Wasm::CodeBlock::waitUntilFinished):
     46        (JSC::Wasm::CodeBlock::compileAsync):
     47        (JSC::Wasm::CodeBlock::isSafeToRun):
     48        * wasm/WasmCodeBlock.h: Added.
     49        (JSC::Wasm::CodeBlock::create):
     50        (JSC::Wasm::CodeBlock::compilationFinished):
     51        (JSC::Wasm::CodeBlock::runnable):
     52        (JSC::Wasm::CodeBlock::errorMessage):
     53        (JSC::Wasm::CodeBlock::functionImportCount):
     54        (JSC::Wasm::CodeBlock::jsEntrypointCalleeFromFunctionIndexSpace):
     55        (JSC::Wasm::CodeBlock::wasmEntrypointCalleeFromFunctionIndexSpace):
     56        * wasm/WasmModule.cpp: Added.
     57        (JSC::Wasm::Module::Module):
     58        (JSC::Wasm::makeValidationResult):
     59        (JSC::Wasm::Module::validateSyncImpl):
     60        (JSC::Wasm::Module::getOrCreateCodeBlock):
     61        (JSC::Wasm::Module::compileSync):
     62        (JSC::Wasm::Module::makeValidationCallback):
     63        (JSC::Wasm::Module::compileAsync):
     64        * wasm/WasmModule.h: Added.
     65        (JSC::Wasm::Module::create):
     66        (JSC::Wasm::Module::validateSync):
     67        (JSC::Wasm::Module::validateAsync):
     68        (JSC::Wasm::Module::signatureIndexFromFunctionIndexSpace):
     69        (JSC::Wasm::Module::moduleInformation):
     70        (JSC::Wasm::Module::nonNullCodeBlock):
     71        * wasm/WasmPlan.cpp:
     72        (JSC::Wasm::Plan::Plan):
     73        (JSC::Wasm::Plan::addCompletionTask):
     74        (JSC::Wasm::Plan::prepare):
     75        (JSC::Wasm::Plan::compileFunctions):
     76        (JSC::Wasm::Plan::complete):
     77        (JSC::Wasm::Plan::tryRemoveVMAndCancelIfLast):
     78        (JSC::Wasm::Plan::cancel): Deleted.
     79        * wasm/WasmPlan.h:
     80        (JSC::Wasm::Plan::dontFinalize):
     81        (JSC::Wasm::Plan::takeWasmToWasmExitStubs):
     82        (JSC::Wasm::Plan::mode):
     83        (JSC::Wasm::Plan::takeWasmExitStubs): Deleted.
     84        (JSC::Wasm::Plan::vm): Deleted.
     85        * wasm/WasmWorklist.cpp:
     86        (JSC::Wasm::Worklist::stopAllPlansForVM):
     87        * wasm/js/JSWebAssemblyCodeBlock.cpp:
     88        (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
     89        (JSC::JSWebAssemblyCodeBlock::isSafeToRun):
     90        (JSC::JSWebAssemblyCodeBlock::initialize): Deleted.
     91        * wasm/js/JSWebAssemblyCodeBlock.h:
     92        (JSC::JSWebAssemblyCodeBlock::create):
     93        (JSC::JSWebAssemblyCodeBlock::functionImportCount):
     94        (JSC::JSWebAssemblyCodeBlock::jsEntrypointCalleeFromFunctionIndexSpace):
     95        (JSC::JSWebAssemblyCodeBlock::wasmEntrypointCalleeFromFunctionIndexSpace):
     96        (JSC::JSWebAssemblyCodeBlock::wasmToJsCallStubForImport):
     97        (JSC::JSWebAssemblyCodeBlock::mode): Deleted.
     98        (JSC::JSWebAssemblyCodeBlock::initialized): Deleted.
     99        (JSC::JSWebAssemblyCodeBlock::plan): Deleted.
     100        (JSC::JSWebAssemblyCodeBlock::runnable): Deleted.
     101        (JSC::JSWebAssemblyCodeBlock::errorMessage): Deleted.
     102        (JSC::JSWebAssemblyCodeBlock::setJSEntrypointCallee): Deleted.
     103        (JSC::JSWebAssemblyCodeBlock::setWasmEntrypointCallee): Deleted.
     104        * wasm/js/JSWebAssemblyInstance.cpp:
     105        (JSC::JSWebAssemblyInstance::finalizeCreation):
     106        (JSC::JSWebAssemblyInstance::addUnitializedCodeBlock): Deleted.
     107        * wasm/js/JSWebAssemblyInstance.h:
     108        (JSC::JSWebAssemblyInstance::initialized): Deleted.
     109        * wasm/js/JSWebAssemblyModule.cpp:
     110        (JSC::JSWebAssemblyModule::createStub):
     111        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
     112        (JSC::JSWebAssemblyModule::finishCreation):
     113        * wasm/js/JSWebAssemblyModule.h:
     114        (JSC::JSWebAssemblyModule::moduleInformation):
     115        (JSC::JSWebAssemblyModule::signatureIndexFromFunctionIndexSpace):
     116        (JSC::JSWebAssemblyModule::module):
     117        * wasm/js/WebAssemblyFunction.cpp:
     118        (JSC::WebAssemblyFunction::create):
     119        * wasm/js/WebAssemblyInstanceConstructor.cpp:
     120        (JSC::constructJSWebAssemblyInstance):
     121        * wasm/js/WebAssemblyModuleConstructor.cpp:
     122        (JSC::WebAssemblyModuleConstructor::createModule):
     123        * wasm/js/WebAssemblyPrototype.cpp:
     124        (JSC::reject):
     125        (JSC::webAssemblyCompileFunc):
     126        (JSC::resolve):
     127        (JSC::instantiate):
     128        (JSC::compileAndInstantiate):
     129        (JSC::webAssemblyValidateFunc):
     130
    11312017-04-07  Carlos Garcia Campos  <[email protected]>
    2132
Note: See TracChangeset for help on using the changeset viewer.