Stop reference-counting Runtime for workers.

This commit is contained in:
Ms2ger 2016-03-29 15:52:49 +02:00
parent c4e112a3be
commit aeab05cd6e
2 changed files with 10 additions and 10 deletions

View file

@ -32,7 +32,6 @@ use script_thread::ScriptThreadEventCategory::WorkerEvent;
use script_thread::{ScriptThread, ScriptChan, ScriptPort, StackRootTLS, CommonScriptMsg}; use script_thread::{ScriptThread, ScriptChan, ScriptPort, StackRootTLS, CommonScriptMsg};
use script_traits::{TimerEvent, TimerSource}; use script_traits::{TimerEvent, TimerSource};
use std::mem::replace; use std::mem::replace;
use std::rc::Rc;
use std::sync::mpsc::{Receiver, RecvError, Select, Sender, channel}; use std::sync::mpsc::{Receiver, RecvError, Select, Sender, channel};
use url::Url; use url::Url;
use util::str::DOMString; use util::str::DOMString;
@ -158,7 +157,7 @@ impl DedicatedWorkerGlobalScope {
worker_url: Url, worker_url: Url,
id: PipelineId, id: PipelineId,
from_devtools_receiver: Receiver<DevtoolScriptControlMsg>, from_devtools_receiver: Receiver<DevtoolScriptControlMsg>,
runtime: Rc<Runtime>, runtime: Runtime,
parent_sender: Box<ScriptChan + Send>, parent_sender: Box<ScriptChan + Send>,
own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>, own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>,
receiver: Receiver<(TrustedWorkerAddress, WorkerScriptMsg)>, receiver: Receiver<(TrustedWorkerAddress, WorkerScriptMsg)>,
@ -185,24 +184,25 @@ impl DedicatedWorkerGlobalScope {
worker_url: Url, worker_url: Url,
id: PipelineId, id: PipelineId,
from_devtools_receiver: Receiver<DevtoolScriptControlMsg>, from_devtools_receiver: Receiver<DevtoolScriptControlMsg>,
runtime: Rc<Runtime>, runtime: Runtime,
parent_sender: Box<ScriptChan + Send>, parent_sender: Box<ScriptChan + Send>,
own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>, own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>,
receiver: Receiver<(TrustedWorkerAddress, WorkerScriptMsg)>, receiver: Receiver<(TrustedWorkerAddress, WorkerScriptMsg)>,
timer_event_chan: IpcSender<TimerEvent>, timer_event_chan: IpcSender<TimerEvent>,
timer_event_port: Receiver<(TrustedWorkerAddress, TimerEvent)>) timer_event_port: Receiver<(TrustedWorkerAddress, TimerEvent)>)
-> Root<DedicatedWorkerGlobalScope> { -> Root<DedicatedWorkerGlobalScope> {
let cx = runtime.cx();
let scope = box DedicatedWorkerGlobalScope::new_inherited(init, let scope = box DedicatedWorkerGlobalScope::new_inherited(init,
worker_url, worker_url,
id, id,
from_devtools_receiver, from_devtools_receiver,
runtime.clone(), runtime,
parent_sender, parent_sender,
own_sender, own_sender,
receiver, receiver,
timer_event_chan, timer_event_chan,
timer_event_port); timer_event_port);
DedicatedWorkerGlobalScopeBinding::Wrap(runtime.cx(), scope) DedicatedWorkerGlobalScopeBinding::Wrap(cx, scope)
} }
pub fn run_worker_scope(init: WorkerGlobalScopeInit, pub fn run_worker_scope(init: WorkerGlobalScopeInit,
@ -235,7 +235,7 @@ impl DedicatedWorkerGlobalScope {
} }
}; };
let runtime = Rc::new(ScriptThread::new_rt_and_cx()); let runtime = ScriptThread::new_rt_and_cx();
let (devtools_mpsc_chan, devtools_mpsc_port) = channel(); let (devtools_mpsc_chan, devtools_mpsc_port) = channel();
ROUTER.route_ipc_receiver_to_mpsc_sender(from_devtools_receiver, devtools_mpsc_chan); ROUTER.route_ipc_receiver_to_mpsc_sender(from_devtools_receiver, devtools_mpsc_chan);
@ -249,7 +249,7 @@ impl DedicatedWorkerGlobalScope {
}); });
let global = DedicatedWorkerGlobalScope::new( let global = DedicatedWorkerGlobalScope::new(
init, url, id, devtools_mpsc_port, runtime.clone(), init, url, id, devtools_mpsc_port, runtime,
parent_sender.clone(), own_sender, receiver, parent_sender.clone(), own_sender, receiver,
timer_ipc_chan, timer_rx); timer_ipc_chan, timer_rx);
// FIXME(njn): workers currently don't have a unique ID suitable for using in reporter // FIXME(njn): workers currently don't have a unique ID suitable for using in reporter

View file

@ -55,8 +55,8 @@ pub struct WorkerGlobalScope {
eventtarget: EventTarget, eventtarget: EventTarget,
worker_id: WorkerId, worker_id: WorkerId,
worker_url: Url, worker_url: Url,
#[ignore_heap_size_of = "Defined in std"] #[ignore_heap_size_of = "Defined in js"]
runtime: Rc<Runtime>, runtime: Runtime,
next_worker_id: Cell<WorkerId>, next_worker_id: Cell<WorkerId>,
#[ignore_heap_size_of = "Defined in std"] #[ignore_heap_size_of = "Defined in std"]
resource_thread: ResourceThread, resource_thread: ResourceThread,
@ -94,7 +94,7 @@ pub struct WorkerGlobalScope {
impl WorkerGlobalScope { impl WorkerGlobalScope {
pub fn new_inherited(init: WorkerGlobalScopeInit, pub fn new_inherited(init: WorkerGlobalScopeInit,
worker_url: Url, worker_url: Url,
runtime: Rc<Runtime>, runtime: Runtime,
from_devtools_receiver: Receiver<DevtoolScriptControlMsg>, from_devtools_receiver: Receiver<DevtoolScriptControlMsg>,
timer_event_chan: IpcSender<TimerEvent>) timer_event_chan: IpcSender<TimerEvent>)
-> WorkerGlobalScope { -> WorkerGlobalScope {