diff options
Diffstat (limited to 'deps/v8/src/wasm/wasm-engine.cc')
-rw-r--r-- | deps/v8/src/wasm/wasm-engine.cc | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/deps/v8/src/wasm/wasm-engine.cc b/deps/v8/src/wasm/wasm-engine.cc index 4f772d9bdd..dc78797365 100644 --- a/deps/v8/src/wasm/wasm-engine.cc +++ b/deps/v8/src/wasm/wasm-engine.cc @@ -24,6 +24,8 @@ WasmEngine::WasmEngine() WasmEngine::~WasmEngine() { // All AsyncCompileJobs have been canceled. DCHECK(jobs_.empty()); + // All Isolates have been deregistered. + DCHECK(isolates_.empty()); } bool WasmEngine::SyncValidate(Isolate* isolate, const WasmFeatures& enabled, @@ -189,9 +191,11 @@ Handle<WasmModuleObject> WasmEngine::ImportNativeModule( Isolate* isolate, std::shared_ptr<NativeModule> shared_module) { CHECK_EQ(code_manager(), shared_module->code_manager()); Vector<const byte> wire_bytes = shared_module->wire_bytes(); - Handle<Script> script = CreateWasmScript(isolate, wire_bytes); + const WasmModule* module = shared_module->module(); + Handle<Script> script = + CreateWasmScript(isolate, wire_bytes, module->source_map_url); Handle<WasmModuleObject> module_object = - WasmModuleObject::New(isolate, shared_module, script); + WasmModuleObject::New(isolate, std::move(shared_module), script); // TODO(6792): Wrappers below might be cloned using {Factory::CopyCode}. // This requires unlocking the code space here. This should eventually be @@ -249,6 +253,7 @@ std::unique_ptr<AsyncCompileJob> WasmEngine::RemoveCompileJob( bool WasmEngine::HasRunningCompileJob(Isolate* isolate) { base::LockGuard<base::Mutex> guard(&mutex_); + DCHECK_EQ(1, isolates_.count(isolate)); for (auto& entry : jobs_) { if (entry.first->isolate() == isolate) return true; } @@ -257,6 +262,7 @@ bool WasmEngine::HasRunningCompileJob(Isolate* isolate) { void WasmEngine::DeleteCompileJobsOnIsolate(Isolate* isolate) { base::LockGuard<base::Mutex> guard(&mutex_); + DCHECK_EQ(1, isolates_.count(isolate)); for (auto it = jobs_.begin(); it != jobs_.end();) { if (it->first->isolate() == isolate) { it = jobs_.erase(it); @@ -266,6 +272,18 @@ void WasmEngine::DeleteCompileJobsOnIsolate(Isolate* isolate) { } } +void WasmEngine::AddIsolate(Isolate* isolate) { + base::LockGuard<base::Mutex> guard(&mutex_); + DCHECK_EQ(0, isolates_.count(isolate)); + isolates_.insert(isolate); +} + +void WasmEngine::RemoveIsolate(Isolate* isolate) { + base::LockGuard<base::Mutex> guard(&mutex_); + DCHECK_EQ(1, isolates_.count(isolate)); + isolates_.erase(isolate); +} + namespace { struct WasmEnginePointerConstructTrait final { @@ -284,16 +302,19 @@ base::LazyStaticInstance<std::shared_ptr<WasmEngine>, } // namespace +// static void WasmEngine::InitializeOncePerProcess() { if (!FLAG_wasm_shared_engine) return; global_wasm_engine.Pointer()->reset(new WasmEngine()); } +// static void WasmEngine::GlobalTearDown() { if (!FLAG_wasm_shared_engine) return; global_wasm_engine.Pointer()->reset(); } +// static std::shared_ptr<WasmEngine> WasmEngine::GetWasmEngine() { if (FLAG_wasm_shared_engine) return global_wasm_engine.Get(); return std::shared_ptr<WasmEngine>(new WasmEngine()); |