aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/abstractworkerglobalscope.rs30
-rw-r--r--components/script/dom/bindings/trace.rs2
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs13
-rw-r--r--components/script/dom/paintworkletglobalscope.rs14
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs10
-rw-r--r--components/script/dom/servoparser/async_html.rs6
-rw-r--r--components/script/dom/testworkletglobalscope.rs2
-rw-r--r--components/script/dom/vrdisplay.rs4
-rw-r--r--components/script/dom/window.rs23
-rw-r--r--components/script/dom/worker.rs4
-rw-r--r--components/script/dom/workerglobalscope.rs2
-rw-r--r--components/script/dom/worklet.rs12
-rw-r--r--components/script/dom/workletglobalscope.rs2
13 files changed, 63 insertions, 61 deletions
diff --git a/components/script/dom/abstractworkerglobalscope.rs b/components/script/dom/abstractworkerglobalscope.rs
index e01b98cf944..14cbabd3cf0 100644
--- a/components/script/dom/abstractworkerglobalscope.rs
+++ b/components/script/dom/abstractworkerglobalscope.rs
@@ -11,8 +11,8 @@ use crate::dom::worker::TrustedWorkerAddress;
use crate::dom::workerglobalscope::WorkerGlobalScope;
use crate::script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort};
use crate::task_queue::{QueuedTaskConversion, TaskQueue};
+use crossbeam_channel::{Receiver, Sender};
use devtools_traits::DevtoolScriptControlMsg;
-use servo_channel::{Receiver, Sender};
/// A ScriptChan that can be cloned freely and will silently send a TrustedWorkerAddress with
/// common event loop messages. While this SendableWorkerScriptChan is alive, the associated
@@ -69,9 +69,9 @@ impl ScriptChan for WorkerThreadWorkerChan {
impl ScriptPort for Receiver<DedicatedWorkerScriptMsg> {
fn recv(&self) -> Result<CommonScriptMsg, ()> {
let common_msg = match self.recv() {
- Some(DedicatedWorkerScriptMsg::CommonWorker(_worker, common_msg)) => common_msg,
- None => return Err(()),
- Some(DedicatedWorkerScriptMsg::WakeUp) => panic!("unexpected worker event message!"),
+ Ok(DedicatedWorkerScriptMsg::CommonWorker(_worker, common_msg)) => common_msg,
+ Err(_) => return Err(()),
+ Ok(DedicatedWorkerScriptMsg::WakeUp) => panic!("unexpected worker event message!"),
};
match common_msg {
WorkerScriptMsg::Common(script_msg) => Ok(script_msg),
@@ -108,17 +108,18 @@ pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>(
let scope = worker_scope.upcast::<WorkerGlobalScope>();
let timer_event_port = worker_scope.timer_event_port();
let devtools_port = match scope.from_devtools_sender() {
- Some(_) => Some(scope.from_devtools_receiver().select()),
+ Some(_) => Some(scope.from_devtools_receiver()),
None => None,
};
let task_queue = worker_scope.task_queue();
let event = select! {
- recv(task_queue.select(), msg) => {
+ recv(task_queue.select()) -> msg => {
task_queue.take_tasks(msg.unwrap());
worker_scope.from_worker_msg(task_queue.recv().unwrap())
},
- recv(timer_event_port.select(), msg) => worker_scope.from_timer_msg(msg.unwrap()),
- recv(devtools_port, msg) => worker_scope.from_devtools_msg(msg.unwrap()),
+ recv(timer_event_port) -> msg => worker_scope.from_timer_msg(msg.unwrap()),
+ recv(devtools_port.unwrap_or(&crossbeam_channel::never())) -> msg =>
+ worker_scope.from_devtools_msg(msg.unwrap()),
};
let mut sequential = vec![];
sequential.push(event);
@@ -131,14 +132,15 @@ pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>(
// Batch all events that are ready.
// The task queue will throttle non-priority tasks if necessary.
match task_queue.try_recv() {
- None => match timer_event_port.try_recv() {
- None => match devtools_port.and_then(|port| port.try_recv()) {
- None => break,
- Some(ev) => sequential.push(worker_scope.from_devtools_msg(ev)),
+ Err(_) => match timer_event_port.try_recv() {
+ Err(_) => match devtools_port.map(|port| port.try_recv()) {
+ None => {},
+ Some(Err(_)) => break,
+ Some(Ok(ev)) => sequential.push(worker_scope.from_devtools_msg(ev)),
},
- Some(ev) => sequential.push(worker_scope.from_timer_msg(ev)),
+ Ok(ev) => sequential.push(worker_scope.from_timer_msg(ev)),
},
- Some(ev) => sequential.push(worker_scope.from_worker_msg(ev)),
+ Ok(ev) => sequential.push(worker_scope.from_worker_msg(ev)),
}
}
// Step 3
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index f3cc904e807..c1b059b0ea0 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -49,6 +49,7 @@ use crate::dom::bindings::utils::WindowProxyHandler;
use crate::dom::document::PendingRestyle;
use crate::dom::htmlimageelement::SourceSet;
use crate::dom::htmlmediaelement::MediaFrameRenderer;
+use crossbeam_channel::{Receiver, Sender};
use cssparser::RGBA;
use devtools_traits::{CSSError, TimelineMarkerType, WorkerId};
use encoding_rs::{Decoder, Encoding};
@@ -93,7 +94,6 @@ use selectors::matching::ElementSelectorFlags;
use serde::{Deserialize, Serialize};
use servo_arc::Arc as ServoArc;
use servo_atoms::Atom;
-use servo_channel::{Receiver, Sender};
use servo_media::audio::analyser_node::AnalysisEngine;
use servo_media::audio::buffer_source_node::AudioBuffer;
use servo_media::audio::context::AudioContext;
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index f9a3debe9b4..362177ea72b 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -26,6 +26,7 @@ use crate::script_runtime::ScriptThreadEventCategory::WorkerEvent;
use crate::script_runtime::{new_rt_and_cx, CommonScriptMsg, Runtime, ScriptChan, ScriptPort};
use crate::task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue};
use crate::task_source::TaskSourceName;
+use crossbeam_channel::{unbounded, Receiver, Sender};
use devtools_traits::DevtoolScriptControlMsg;
use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
@@ -38,7 +39,6 @@ use msg::constellation_msg::TopLevelBrowsingContextId;
use net_traits::request::{CredentialsMode, Destination, RequestInit};
use net_traits::{load_whole_resource, IpcSend};
use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin};
-use servo_channel::{channel, route_ipc_receiver_to_new_servo_sender, Receiver, Sender};
use servo_rand::random;
use servo_url::ServoUrl;
use std::mem::replace;
@@ -329,10 +329,13 @@ impl DedicatedWorkerGlobalScope {
let runtime = unsafe { new_rt_and_cx() };
- let (devtools_mpsc_chan, devtools_mpsc_port) = channel();
- route_ipc_receiver_to_new_servo_sender(from_devtools_receiver, devtools_mpsc_chan);
+ let (devtools_mpsc_chan, devtools_mpsc_port) = unbounded();
+ ROUTER.route_ipc_receiver_to_crossbeam_sender(
+ from_devtools_receiver,
+ devtools_mpsc_chan,
+ );
- let (timer_tx, timer_rx) = channel();
+ let (timer_tx, timer_rx) = unbounded();
let (timer_ipc_chan, timer_ipc_port) = ipc::channel().unwrap();
let worker_for_route = worker.clone();
ROUTER.add_route(
@@ -404,7 +407,7 @@ impl DedicatedWorkerGlobalScope {
}
pub fn new_script_pair(&self) -> (Box<dyn ScriptChan + Send>, Box<dyn ScriptPort + Send>) {
- let (tx, rx) = channel();
+ let (tx, rx) = unbounded();
let chan = Box::new(SendableWorkerScriptChan {
sender: tx,
worker: self.worker.borrow().as_ref().unwrap().clone(),
diff --git a/components/script/dom/paintworkletglobalscope.rs b/components/script/dom/paintworkletglobalscope.rs
index 6a9a517298f..61eaabb1b03 100644
--- a/components/script/dom/paintworkletglobalscope.rs
+++ b/components/script/dom/paintworkletglobalscope.rs
@@ -23,6 +23,7 @@ use crate::dom::worklet::WorkletExecutor;
use crate::dom::workletglobalscope::WorkletGlobalScope;
use crate::dom::workletglobalscope::WorkletGlobalScopeInit;
use crate::dom::workletglobalscope::WorkletTask;
+use crossbeam_channel::{unbounded, Sender};
use dom_struct::dom_struct;
use euclid::TypedScale;
use euclid::TypedSize2D;
@@ -49,8 +50,6 @@ use profile_traits::ipc;
use script_traits::Painter;
use script_traits::{DrawAPaintImageResult, PaintWorkletError};
use servo_atoms::Atom;
-use servo_channel::base_channel;
-use servo_channel::{channel, Sender};
use servo_config::prefs::PREFS;
use servo_url::ServoUrl;
use std::cell::Cell;
@@ -426,7 +425,7 @@ impl PaintWorkletGlobalScope {
arguments: Vec<String>,
) -> Result<DrawAPaintImageResult, PaintWorkletError> {
let name = self.name.clone();
- let (sender, receiver) = channel();
+ let (sender, receiver) = unbounded();
let task = PaintWorkletTask::DrawAPaintImage(
name,
size,
@@ -445,12 +444,9 @@ impl PaintWorkletGlobalScope {
.as_u64()
.unwrap_or(10u64);
- select! {
- recv(base_channel::after(Duration::from_millis(timeout))) => {
- Err(PaintWorkletError::Timeout)
- }
- recv(receiver.select(), msg) => msg.ok_or(PaintWorkletError::Timeout)
- }
+ receiver
+ .recv_timeout(Duration::from_millis(timeout))
+ .map_err(|e| PaintWorkletError::from(e))
}
}
Box::new(WorkletPainter {
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index 45e8934d0de..6916cd41f96 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -22,9 +22,11 @@ use crate::dom::workerglobalscope::WorkerGlobalScope;
use crate::script_runtime::{new_rt_and_cx, CommonScriptMsg, Runtime, ScriptChan};
use crate::task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue};
use crate::task_source::TaskSourceName;
+use crossbeam_channel::{unbounded, Receiver, Sender};
use devtools_traits::DevtoolScriptControlMsg;
use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
+use ipc_channel::router::ROUTER;
use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback};
use js::jsval::UndefinedValue;
use net_traits::request::{CredentialsMode, Destination, RequestInit};
@@ -32,7 +34,6 @@ use net_traits::{load_whole_resource, CustomResponseMediator, IpcSend};
use script_traits::{
ScopeThings, ServiceWorkerMsg, TimerEvent, WorkerGlobalScopeInit, WorkerScriptLoadOrigin,
};
-use servo_channel::{channel, route_ipc_receiver_to_new_servo_sender, Receiver, Sender};
use servo_config::prefs::PREFS;
use servo_rand::random;
use servo_url::ServoUrl;
@@ -293,11 +294,12 @@ impl ServiceWorkerGlobalScope {
let runtime = unsafe { new_rt_and_cx() };
- let (devtools_mpsc_chan, devtools_mpsc_port) = channel();
- route_ipc_receiver_to_new_servo_sender(devtools_receiver, devtools_mpsc_chan);
+ let (devtools_mpsc_chan, devtools_mpsc_port) = unbounded();
+ ROUTER
+ .route_ipc_receiver_to_crossbeam_sender(devtools_receiver, devtools_mpsc_chan);
// TODO XXXcreativcoder use this timer_ipc_port, when we have a service worker instance here
let (timer_ipc_chan, _timer_ipc_port) = ipc::channel().unwrap();
- let (timer_chan, timer_port) = channel();
+ let (timer_chan, timer_port) = unbounded();
let global = ServiceWorkerGlobalScope::new(
init,
url,
diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs
index d982c75e975..39b94c9c644 100644
--- a/components/script/dom/servoparser/async_html.rs
+++ b/components/script/dom/servoparser/async_html.rs
@@ -20,6 +20,7 @@ use crate::dom::node::Node;
use crate::dom::processinginstruction::ProcessingInstruction;
use crate::dom::servoparser::{create_element_for_token, ElementAttribute, ParsingAlgorithm};
use crate::dom::virtualmethods::vtable_for;
+use crossbeam_channel::{unbounded, Receiver, Sender};
use html5ever::buffer_queue::BufferQueue;
use html5ever::tendril::fmt::UTF8;
use html5ever::tendril::{SendTendril, StrTendril, Tendril};
@@ -29,7 +30,6 @@ use html5ever::tree_builder::{
};
use html5ever::tree_builder::{TreeBuilder, TreeBuilderOpts};
use html5ever::{Attribute as HtmlAttribute, ExpandedName, QualName};
-use servo_channel::{channel, Receiver, Sender};
use servo_url::ServoUrl;
use std::borrow::Cow;
use std::cell::Cell;
@@ -215,9 +215,9 @@ impl Tokenizer {
fragment_context: Option<super::FragmentContext>,
) -> Self {
// Messages from the Tokenizer (main thread) to HtmlTokenizer (parser thread)
- let (to_html_tokenizer_sender, html_tokenizer_receiver) = channel();
+ let (to_html_tokenizer_sender, html_tokenizer_receiver) = unbounded();
// Messages from HtmlTokenizer and Sink (parser thread) to Tokenizer (main thread)
- let (to_tokenizer_sender, tokenizer_receiver) = channel();
+ let (to_tokenizer_sender, tokenizer_receiver) = unbounded();
let mut tokenizer = Tokenizer {
document: Dom::from_ref(document),
diff --git a/components/script/dom/testworkletglobalscope.rs b/components/script/dom/testworkletglobalscope.rs
index e443dfa8e6b..a7e6f4f9de5 100644
--- a/components/script/dom/testworkletglobalscope.rs
+++ b/components/script/dom/testworkletglobalscope.rs
@@ -10,10 +10,10 @@ use crate::dom::bindings::str::DOMString;
use crate::dom::worklet::WorkletExecutor;
use crate::dom::workletglobalscope::WorkletGlobalScope;
use crate::dom::workletglobalscope::WorkletGlobalScopeInit;
+use crossbeam_channel::Sender;
use dom_struct::dom_struct;
use js::rust::Runtime;
use msg::constellation_msg::PipelineId;
-use servo_channel::Sender;
use servo_url::ServoUrl;
use std::collections::HashMap;
diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs
index 1cf43df4553..312ee71a9a3 100644
--- a/components/script/dom/vrdisplay.rs
+++ b/components/script/dom/vrdisplay.rs
@@ -33,11 +33,11 @@ use crate::dom::webglrenderingcontext::WebGLRenderingContext;
use crate::script_runtime::CommonScriptMsg;
use crate::script_runtime::ScriptThreadEventCategory::WebVREvent;
use crate::task_source::TaskSourceName;
+use crossbeam_channel::{unbounded, Sender};
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use profile_traits::ipc;
use serde_bytes::ByteBuf;
-use servo_channel::{channel, Sender};
use std::cell::Cell;
use std::mem;
use std::ops::Deref;
@@ -538,7 +538,7 @@ impl VRDisplay {
thread::Builder::new()
.name("WebVR_RAF".into())
.spawn(move || {
- let (raf_sender, raf_receiver) = channel();
+ let (raf_sender, raf_receiver) = unbounded();
let mut near = near_init;
let mut far = far_init;
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 51c379145c2..a8a9ce1d960 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -68,6 +68,7 @@ use crate::task_manager::TaskManager;
use crate::task_source::TaskSourceName;
use crate::timers::{IsInterval, TimerCallback};
use crate::webdriver_handlers::jsval_to_webdriver;
+use crossbeam_channel::{unbounded, Sender, TryRecvError};
use cssparser::{Parser, ParserInput};
use devtools_traits::{ScriptToDevtoolsControlMsg, TimelineMarker, TimelineMarkerType};
use dom_struct::dom_struct;
@@ -104,7 +105,6 @@ use script_traits::{ConstellationControlMsg, DocumentState, LoadData};
use script_traits::{ScriptMsg, ScriptToConstellationChan, ScrollState, TimerEvent, TimerEventId};
use script_traits::{TimerSchedulerMsg, UntrustedNodeAddress, WindowSizeData, WindowSizeType};
use selectors::attr::CaseSensitivity;
-use servo_channel::{channel, Sender};
use servo_config::opts;
use servo_geometry::{f32_rect_to_au_rect, MaxRect};
use servo_url::{Host, ImmutableOrigin, MutableOrigin, ServoUrl};
@@ -348,7 +348,7 @@ impl Window {
}
pub fn new_script_pair(&self) -> (Box<dyn ScriptChan + Send>, Box<dyn ScriptPort + Send>) {
- let (tx, rx) = channel();
+ let (tx, rx) = unbounded();
(Box::new(SendableMainThreadScriptChan(tx)), Box::new(rx))
}
@@ -1394,7 +1394,7 @@ impl Window {
};
// Layout will let us know when it's done.
- let (join_chan, join_port) = channel();
+ let (join_chan, join_port) = unbounded();
// On debug mode, print the reflow event information.
if opts::get().relayout_event {
@@ -1427,16 +1427,15 @@ impl Window {
debug!("script: layout forked");
- let complete = select! {
- recv(join_port.select(), msg) => if let Some(reflow_complete) = msg {
- reflow_complete
- } else {
- panic!("Layout thread failed while script was waiting for a result.");
- },
- default => {
+ let complete = match join_port.try_recv() {
+ Err(TryRecvError::Empty) => {
info!("script: waiting on layout");
join_port.recv().unwrap()
- }
+ },
+ Ok(reflow_complete) => reflow_complete,
+ Err(TryRecvError::Disconnected) => {
+ panic!("Layout thread failed while script was waiting for a result.");
+ },
};
debug!("script: layout joined");
@@ -2033,7 +2032,7 @@ impl Window {
webrender_api_sender: RenderApiSender,
) -> DomRoot<Self> {
let layout_rpc: Box<dyn LayoutRPC + Send> = {
- let (rpc_send, rpc_recv) = channel();
+ let (rpc_send, rpc_recv) = unbounded();
layout_chan.send(Msg::GetRPC(rpc_send)).unwrap();
rpc_recv.recv().unwrap()
};
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 957d630ece1..ca55ba8ee98 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -21,6 +21,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::messageevent::MessageEvent;
use crate::dom::workerglobalscope::prepare_workerscope_init;
use crate::task::TaskOnce;
+use crossbeam_channel::{unbounded, Sender};
use devtools_traits::{DevtoolsPageInfo, ScriptToDevtoolsControlMsg};
use dom_struct::dom_struct;
use ipc_channel::ipc;
@@ -28,7 +29,6 @@ use js::jsapi::{JSAutoCompartment, JSContext, JS_RequestInterruptCallback};
use js::jsval::UndefinedValue;
use js::rust::HandleValue;
use script_traits::WorkerScriptLoadOrigin;
-use servo_channel::{channel, Sender};
use std::cell::Cell;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
@@ -79,7 +79,7 @@ impl Worker {
Err(_) => return Err(Error::Syntax),
};
- let (sender, receiver) = channel();
+ let (sender, receiver) = unbounded();
let closing = Arc::new(AtomicBool::new(false));
let worker = Worker::new(global, sender.clone(), closing.clone());
global.track_worker(closing.clone());
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 015c18f2644..59307e5700d 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -32,6 +32,7 @@ use crate::task_source::performance_timeline::PerformanceTimelineTaskSource;
use crate::task_source::remote_event::RemoteEventTaskSource;
use crate::task_source::websocket::WebsocketTaskSource;
use crate::timers::{IsInterval, TimerCallback};
+use crossbeam_channel::Receiver;
use devtools_traits::{DevtoolScriptControlMsg, WorkerId};
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
@@ -44,7 +45,6 @@ use net_traits::request::{CredentialsMode, Destination, RequestInit as NetReques
use net_traits::{load_whole_resource, IpcSend};
use script_traits::WorkerGlobalScopeInit;
use script_traits::{TimerEvent, TimerEventId};
-use servo_channel::Receiver;
use servo_url::{MutableOrigin, ServoUrl};
use std::default::Default;
use std::rc::Rc;
diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs
index 48405c626fb..312c362e61e 100644
--- a/components/script/dom/worklet.rs
+++ b/components/script/dom/worklet.rs
@@ -39,6 +39,7 @@ use crate::script_runtime::ScriptThreadEventCategory;
use crate::script_thread::{MainThreadScriptMsg, ScriptThread};
use crate::task::TaskBox;
use crate::task_source::TaskSourceName;
+use crossbeam_channel::{unbounded, Receiver, Sender};
use dom_struct::dom_struct;
use js::jsapi::JSGCParamKey;
use js::jsapi::JSTracer;
@@ -50,7 +51,6 @@ use net_traits::request::Destination;
use net_traits::request::RequestInit;
use net_traits::request::RequestMode;
use net_traits::IpcSend;
-use servo_channel::{channel, Receiver, Sender};
use servo_url::ImmutableOrigin;
use servo_url::ServoUrl;
use std::cmp::max;
@@ -334,7 +334,7 @@ impl WorkletThreadPool {
/// For testing.
pub fn test_worklet_lookup(&self, id: WorkletId, key: String) -> Option<String> {
- let (sender, receiver) = channel();
+ let (sender, receiver) = unbounded();
let msg = WorkletData::Task(id, WorkletTask::Test(TestWorkletTask::Lookup(key, sender)));
let _ = self.primary_sender.send(msg);
receiver.recv().expect("Test worklet has died?")
@@ -388,7 +388,7 @@ struct WorkletThreadRole {
impl WorkletThreadRole {
fn new(is_hot_backup: bool, is_cold_backup: bool) -> WorkletThreadRole {
- let (sender, receiver) = channel();
+ let (sender, receiver) = unbounded();
WorkletThreadRole {
sender: sender,
receiver: receiver,
@@ -452,7 +452,7 @@ impl WorkletThread {
#[allow(unsafe_code)]
#[allow(unrooted_must_root)]
fn spawn(role: WorkletThreadRole, init: WorkletThreadInit) -> Sender<WorkletControl> {
- let (control_sender, control_receiver) = channel();
+ let (control_sender, control_receiver) = unbounded();
// TODO: name this thread
thread::spawn(move || {
// TODO: add a new IN_WORKLET thread state?
@@ -522,12 +522,12 @@ impl WorkletThread {
if let Some(control) = self.control_buffer.take() {
self.process_control(control);
}
- while let Some(control) = self.control_receiver.try_recv() {
+ while let Ok(control) = self.control_receiver.try_recv() {
self.process_control(control);
}
self.gc();
} else if self.control_buffer.is_none() {
- if let Some(control) = self.control_receiver.try_recv() {
+ if let Ok(control) = self.control_receiver.try_recv() {
self.control_buffer = Some(control);
let msg = WorkletData::StartSwapRoles(self.role.sender.clone());
let _ = self.cold_backup_sender.send(msg);
diff --git a/components/script/dom/workletglobalscope.rs b/components/script/dom/workletglobalscope.rs
index 3d971390614..65b837ac350 100644
--- a/components/script/dom/workletglobalscope.rs
+++ b/components/script/dom/workletglobalscope.rs
@@ -11,6 +11,7 @@ use crate::dom::testworkletglobalscope::TestWorkletGlobalScope;
use crate::dom::testworkletglobalscope::TestWorkletTask;
use crate::dom::worklet::WorkletExecutor;
use crate::script_thread::MainThreadScriptMsg;
+use crossbeam_channel::Sender;
use devtools_traits::ScriptToDevtoolsControlMsg;
use dom_struct::dom_struct;
use ipc_channel::ipc;
@@ -26,7 +27,6 @@ use profile_traits::time;
use script_traits::{Painter, ScriptMsg};
use script_traits::{ScriptToConstellationChan, TimerSchedulerMsg};
use servo_atoms::Atom;
-use servo_channel::Sender;
use servo_url::ImmutableOrigin;
use servo_url::MutableOrigin;
use servo_url::ServoUrl;