From 3d5bed35e032ee20e4fe34cad925202c6f0c0d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 18 Feb 2020 14:47:11 -0500 Subject: refactor: remove run_worker_loop (#4028) * remove run_worker_loop, impl poll for WebWorker * store JoinHandle to worker thread --- cli/compilers/compiler_worker.rs | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'cli/compilers/compiler_worker.rs') diff --git a/cli/compilers/compiler_worker.rs b/cli/compilers/compiler_worker.rs index 123c29abb..f0489e641 100644 --- a/cli/compilers/compiler_worker.rs +++ b/cli/compilers/compiler_worker.rs @@ -1,11 +1,17 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. use crate::ops; use crate::state::State; -use crate::worker::Worker; +use crate::web_worker::WebWorker; +use core::task::Context; use deno_core; +use deno_core::ErrBox; use deno_core::StartupData; +use futures::future::Future; +use futures::future::FutureExt; use std::ops::Deref; use std::ops::DerefMut; +use std::pin::Pin; +use std::task::Poll; /// This worker is used to host TypeScript and WASM compilers. /// @@ -20,22 +26,15 @@ use std::ops::DerefMut; /// /// TODO(bartlomieju): add support to reuse the worker - or in other /// words support stateful TS compiler -pub struct CompilerWorker(Worker); +pub struct CompilerWorker(WebWorker); impl CompilerWorker { pub fn new(name: String, startup_data: StartupData, state: State) -> Self { let state_ = state.clone(); - let mut worker = Worker::new(name, startup_data, state_); + let mut worker = WebWorker::new(name, startup_data, state_); { let isolate = &mut worker.isolate; - ops::runtime::init(isolate, &state); ops::compiler::init(isolate, &state); - ops::web_worker::init(isolate, &state, &worker.internal_channels.sender); - ops::errors::init(isolate, &state); - // for compatibility with Worker scope, though unused at - // the moment - ops::timers::init(isolate, &state); - ops::fetch::init(isolate, &state); // TODO(bartlomieju): CompilerWorker should not // depend on those ops ops::os::init(isolate, &state); @@ -48,7 +47,7 @@ impl CompilerWorker { } impl Deref for CompilerWorker { - type Target = Worker; + type Target = WebWorker; fn deref(&self) -> &Self::Target { &self.0 } @@ -59,3 +58,12 @@ impl DerefMut for CompilerWorker { &mut self.0 } } + +impl Future for CompilerWorker { + type Output = Result<(), ErrBox>; + + fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll { + let inner = self.get_mut(); + inner.0.poll_unpin(cx) + } +} -- cgit v1.2.3