mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #6745 - pcwalton:devtools-ipc, r=jdm
devtools: Convert the developer tools to run over IPC. This was a large, invasive change. r? @jdm <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6745) <!-- Reviewable:end -->
This commit is contained in:
commit
4bc1db3fe8
26 changed files with 295 additions and 141 deletions
|
@ -14,13 +14,14 @@ use dom::bindings::utils::{Reflectable, Reflector};
|
|||
use dom::document::DocumentHelpers;
|
||||
use dom::workerglobalscope::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
|
||||
use dom::window::{self, WindowHelpers};
|
||||
use devtools_traits::DevtoolsControlChan;
|
||||
use devtools_traits::ScriptToDevtoolsControlMsg;
|
||||
use script_task::{ScriptChan, ScriptPort, ScriptMsg, ScriptTask};
|
||||
|
||||
use msg::constellation_msg::{ConstellationChan, PipelineId, WorkerId};
|
||||
use net_traits::ResourceTask;
|
||||
use profile_traits::mem;
|
||||
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use js::{JSCLASS_IS_GLOBAL, JSCLASS_IS_DOMJSCLASS};
|
||||
use js::jsapi::{GetGlobalForObjectCrossCompartment};
|
||||
use js::jsapi::{JSContext, JSObject};
|
||||
|
@ -99,9 +100,9 @@ impl<'a> GlobalRef<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Get a `DevtoolsControlChan` to send messages to Devtools
|
||||
/// Get an `IpcSender<ScriptToDevtoolsControlMsg>` to send messages to Devtools
|
||||
/// task when available.
|
||||
pub fn devtools_chan(&self) -> Option<DevtoolsControlChan> {
|
||||
pub fn devtools_chan(&self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>> {
|
||||
match *self {
|
||||
GlobalRef::Window(window) => window.devtools_chan(),
|
||||
GlobalRef::Worker(worker) => worker.devtools_chan(),
|
||||
|
|
|
@ -8,7 +8,7 @@ use dom::bindings::global::{GlobalRef, GlobalField};
|
|||
use dom::bindings::js::Root;
|
||||
use dom::bindings::utils::{Reflector, reflect_dom_object};
|
||||
use dom::window::WindowHelpers;
|
||||
use devtools_traits::{DevtoolsControlMsg, ConsoleMessage, LogLevel};
|
||||
use devtools_traits::{ConsoleMessage, LogLevel, ScriptToDevtoolsControlMsg};
|
||||
use util::str::DOMString;
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/Console
|
||||
|
@ -101,7 +101,7 @@ fn propagate_console_msg(console: &&Console, console_message: ConsoleMessage) {
|
|||
GlobalRef::Window(window_ref) => {
|
||||
let pipelineId = window_ref.pipeline();
|
||||
console.global.root().r().as_window().devtools_chan().as_ref().map(|chan| {
|
||||
chan.send(DevtoolsControlMsg::SendConsoleMessage(
|
||||
chan.send(ScriptToDevtoolsControlMsg::SendConsoleMessage(
|
||||
pipelineId, console_message.clone())).unwrap();
|
||||
});
|
||||
},
|
||||
|
|
|
@ -26,7 +26,7 @@ use script_task::StackRootTLS;
|
|||
|
||||
use msg::constellation_msg::{ConstellationChan, PipelineId};
|
||||
|
||||
use devtools_traits::DevtoolsControlChan;
|
||||
use devtools_traits::ScriptToDevtoolsControlMsg;
|
||||
|
||||
use net_traits::{load_whole_resource, ResourceTask};
|
||||
use profile_traits::mem::{self, Reporter, ReporterRequest};
|
||||
|
@ -34,7 +34,7 @@ use util::task::spawn_named;
|
|||
use util::task_state;
|
||||
use util::task_state::{SCRIPT, IN_WORKER};
|
||||
|
||||
use ipc_channel::ipc;
|
||||
use ipc_channel::ipc::{self, IpcSender};
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::{JSContext, RootedValue, HandleValue};
|
||||
use js::jsapi::{JSAutoRequest, JSAutoCompartment};
|
||||
|
@ -110,7 +110,7 @@ impl DedicatedWorkerGlobalScope {
|
|||
fn new_inherited(worker_url: Url,
|
||||
id: PipelineId,
|
||||
mem_profiler_chan: mem::ProfilerChan,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
runtime: Rc<Runtime>,
|
||||
resource_task: ResourceTask,
|
||||
constellation_chan: ConstellationChan,
|
||||
|
@ -133,7 +133,7 @@ impl DedicatedWorkerGlobalScope {
|
|||
pub fn new(worker_url: Url,
|
||||
id: PipelineId,
|
||||
mem_profiler_chan: mem::ProfilerChan,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
runtime: Rc<Runtime>,
|
||||
resource_task: ResourceTask,
|
||||
constellation_chan: ConstellationChan,
|
||||
|
@ -152,7 +152,7 @@ impl DedicatedWorkerGlobalScope {
|
|||
pub fn run_worker_scope(worker_url: Url,
|
||||
id: PipelineId,
|
||||
mem_profiler_chan: mem::ProfilerChan,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
worker: TrustedWorkerAddress,
|
||||
resource_task: ResourceTask,
|
||||
constellation_chan: ConstellationChan,
|
||||
|
|
|
@ -38,7 +38,8 @@ use script_traits::ScriptControlChan;
|
|||
use timers::{IsInterval, TimerId, TimerManager, TimerCallback};
|
||||
use webdriver_handlers::jsval_to_webdriver;
|
||||
|
||||
use devtools_traits::{DevtoolsControlChan, TimelineMarker, TimelineMarkerType, TracingMetadata};
|
||||
use devtools_traits::{ScriptToDevtoolsControlMsg, TimelineMarker, TimelineMarkerType};
|
||||
use devtools_traits::{TracingMetadata};
|
||||
use msg::compositor_msg::ScriptListener;
|
||||
use msg::constellation_msg::{LoadData, PipelineId, SubpageId, ConstellationChan, WindowSizeData, WorkerId};
|
||||
use msg::webdriver_msg::{WebDriverJSError, WebDriverJSResult};
|
||||
|
@ -68,7 +69,7 @@ use std::default::Default;
|
|||
use std::ffi::CString;
|
||||
use std::mem as std_mem;
|
||||
use std::rc::Rc;
|
||||
use std::sync::mpsc::{channel, Receiver, Sender};
|
||||
use std::sync::mpsc::{channel, Receiver};
|
||||
use std::sync::mpsc::TryRecvError::{Empty, Disconnected};
|
||||
use time;
|
||||
|
||||
|
@ -124,11 +125,11 @@ pub struct Window {
|
|||
mem_profiler_chan: mem::ProfilerChan,
|
||||
|
||||
/// For providing instructions to an optional devtools server.
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
/// For sending timeline markers. Will be ignored if
|
||||
/// no devtools server
|
||||
devtools_markers: RefCell<HashSet<TimelineMarkerType>>,
|
||||
devtools_marker_sender: RefCell<Option<Sender<TimelineMarker>>>,
|
||||
devtools_marker_sender: RefCell<Option<IpcSender<TimelineMarker>>>,
|
||||
|
||||
/// A flag to indicate whether the developer tools have requested live updates of
|
||||
/// page changes.
|
||||
|
@ -547,7 +548,7 @@ pub trait WindowHelpers {
|
|||
fn get_url(self) -> Url;
|
||||
fn resource_task(self) -> ResourceTask;
|
||||
fn mem_profiler_chan(self) -> mem::ProfilerChan;
|
||||
fn devtools_chan(self) -> Option<DevtoolsControlChan>;
|
||||
fn devtools_chan(self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>>;
|
||||
fn layout_chan(self) -> LayoutChan;
|
||||
fn constellation_chan(self) -> ConstellationChan;
|
||||
fn windowproxy_handler(self) -> WindowProxyHandler;
|
||||
|
@ -564,7 +565,9 @@ pub trait WindowHelpers {
|
|||
fn freeze(self);
|
||||
fn need_emit_timeline_marker(self, timeline_type: TimelineMarkerType) -> bool;
|
||||
fn emit_timeline_marker(self, marker: TimelineMarker);
|
||||
fn set_devtools_timeline_marker(self, marker: TimelineMarkerType, reply: Sender<TimelineMarker>);
|
||||
fn set_devtools_timeline_marker(self,
|
||||
marker: TimelineMarkerType,
|
||||
reply: IpcSender<TimelineMarker>);
|
||||
fn drop_devtools_timeline_markers(self);
|
||||
fn set_webdriver_script_chan(self, chan: Option<IpcSender<WebDriverJSResult>>);
|
||||
fn is_alive(self) -> bool;
|
||||
|
@ -832,7 +835,7 @@ impl<'a> WindowHelpers for &'a Window {
|
|||
self.mem_profiler_chan.clone()
|
||||
}
|
||||
|
||||
fn devtools_chan(self) -> Option<DevtoolsControlChan> {
|
||||
fn devtools_chan(self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>> {
|
||||
self.devtools_chan.clone()
|
||||
}
|
||||
|
||||
|
@ -935,7 +938,9 @@ impl<'a> WindowHelpers for &'a Window {
|
|||
sender.send(marker).unwrap();
|
||||
}
|
||||
|
||||
fn set_devtools_timeline_marker(self, marker: TimelineMarkerType, reply: Sender<TimelineMarker>) {
|
||||
fn set_devtools_timeline_marker(self,
|
||||
marker: TimelineMarkerType,
|
||||
reply: IpcSender<TimelineMarker>) {
|
||||
*self.devtools_marker_sender.borrow_mut() = Some(reply);
|
||||
self.devtools_markers.borrow_mut().insert(marker);
|
||||
}
|
||||
|
@ -978,7 +983,7 @@ impl Window {
|
|||
resource_task: ResourceTask,
|
||||
storage_task: StorageTask,
|
||||
mem_profiler_chan: mem::ProfilerChan,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
constellation_chan: ConstellationChan,
|
||||
layout_chan: LayoutChan,
|
||||
id: PipelineId,
|
||||
|
|
|
@ -22,10 +22,11 @@ use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
|||
use dom::messageevent::MessageEvent;
|
||||
use script_task::{ScriptChan, ScriptMsg, Runnable};
|
||||
|
||||
use devtools_traits::{DevtoolsControlMsg, DevtoolsPageInfo};
|
||||
use devtools_traits::{DevtoolsPageInfo, ScriptToDevtoolsControlMsg};
|
||||
|
||||
use util::str::DOMString;
|
||||
|
||||
use ipc_channel::ipc;
|
||||
use js::jsapi::{JSContext, HandleValue, RootedValue};
|
||||
use js::jsapi::{JSAutoRequest, JSAutoCompartment};
|
||||
use js::jsval::UndefinedValue;
|
||||
|
@ -78,16 +79,16 @@ impl Worker {
|
|||
|
||||
if let Some(ref chan) = global.devtools_chan() {
|
||||
let pipeline_id = global.pipeline();
|
||||
let (devtools_sender, _) = channel();
|
||||
let (devtools_sender, _) = ipc::channel().unwrap();
|
||||
let title = format!("Worker for {}", worker_url);
|
||||
let page_info = DevtoolsPageInfo {
|
||||
title: title,
|
||||
url: worker_url.clone(),
|
||||
};
|
||||
let worker_id = global.get_next_worker_id();
|
||||
chan.send(
|
||||
DevtoolsControlMsg::NewGlobal((pipeline_id, Some(worker_id)), devtools_sender.clone(), page_info)
|
||||
).unwrap();
|
||||
chan.send(ScriptToDevtoolsControlMsg::NewGlobal((pipeline_id, Some(worker_id)),
|
||||
devtools_sender.clone(),
|
||||
page_info)).unwrap();
|
||||
}
|
||||
|
||||
DedicatedWorkerGlobalScope::run_worker_scope(
|
||||
|
|
|
@ -20,13 +20,14 @@ use dom::window::{base64_atob, base64_btoa};
|
|||
use script_task::{ScriptChan, TimerSource, ScriptPort, ScriptMsg};
|
||||
use timers::{IsInterval, TimerId, TimerManager, TimerCallback};
|
||||
|
||||
use devtools_traits::DevtoolsControlChan;
|
||||
use devtools_traits::ScriptToDevtoolsControlMsg;
|
||||
|
||||
use msg::constellation_msg::{ConstellationChan, PipelineId, WorkerId};
|
||||
use profile_traits::mem;
|
||||
use net_traits::{load_whole_resource, ResourceTask};
|
||||
use util::str::DOMString;
|
||||
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use js::jsapi::{JSContext, HandleValue};
|
||||
use js::rust::Runtime;
|
||||
use url::{Url, UrlParser};
|
||||
|
@ -54,7 +55,7 @@ pub struct WorkerGlobalScope {
|
|||
crypto: MutNullableHeap<JS<Crypto>>,
|
||||
timers: TimerManager,
|
||||
mem_profiler_chan: mem::ProfilerChan,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
constellation_chan: ConstellationChan,
|
||||
}
|
||||
|
||||
|
@ -64,8 +65,9 @@ impl WorkerGlobalScope {
|
|||
runtime: Rc<Runtime>,
|
||||
resource_task: ResourceTask,
|
||||
mem_profiler_chan: mem::ProfilerChan,
|
||||
devtools_chan: Option<DevtoolsControlChan>,
|
||||
constellation_chan: ConstellationChan) -> WorkerGlobalScope {
|
||||
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
|
||||
constellation_chan: ConstellationChan)
|
||||
-> WorkerGlobalScope {
|
||||
WorkerGlobalScope {
|
||||
eventtarget: EventTarget::new_inherited(EventTargetTypeId::WorkerGlobalScope(type_id)),
|
||||
next_worker_id: Cell::new(WorkerId(0)),
|
||||
|
@ -87,7 +89,7 @@ impl WorkerGlobalScope {
|
|||
self.mem_profiler_chan.clone()
|
||||
}
|
||||
|
||||
pub fn devtools_chan(&self) -> Option<DevtoolsControlChan> {
|
||||
pub fn devtools_chan(&self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>> {
|
||||
self.devtools_chan.clone()
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue