Stop returning in-process senders from {CanvasPaintThread, WebGLPaintThread}::start.

This commit is contained in:
Ms2ger 2016-03-21 18:05:17 +01:00
parent fb1b0d1a09
commit 22447055b9
3 changed files with 10 additions and 15 deletions

View file

@ -125,12 +125,12 @@ impl<'a> CanvasPaintThread<'a> {
/// sender for it. /// sender for it.
pub fn start(size: Size2D<i32>, pub fn start(size: Size2D<i32>,
webrender_api_sender: Option<webrender_traits::RenderApiSender>) webrender_api_sender: Option<webrender_traits::RenderApiSender>)
-> (IpcSender<CanvasMsg>, Sender<CanvasMsg>) { -> IpcSender<CanvasMsg> {
// TODO(pcwalton): Ask the pipeline to create this for us instead of spawning it directly. // TODO(pcwalton): Ask the pipeline to create this for us instead of spawning it directly.
// This will be needed for multiprocess Servo. // This will be needed for multiprocess Servo.
let (out_of_process_chan, out_of_process_port) = ipc::channel::<CanvasMsg>().unwrap(); let (out_of_process_chan, out_of_process_port) = ipc::channel::<CanvasMsg>().unwrap();
let (in_process_chan, in_process_port) = channel(); let (in_process_chan, in_process_port) = channel();
ROUTER.route_ipc_receiver_to_mpsc_sender(out_of_process_port, in_process_chan.clone()); ROUTER.route_ipc_receiver_to_mpsc_sender(out_of_process_port, in_process_chan);
spawn_named("CanvasThread".to_owned(), move || { spawn_named("CanvasThread".to_owned(), move || {
let mut painter = CanvasPaintThread::new(size, webrender_api_sender); let mut painter = CanvasPaintThread::new(size, webrender_api_sender);
loop { loop {
@ -217,7 +217,7 @@ impl<'a> CanvasPaintThread<'a> {
} }
}); });
(out_of_process_chan, in_process_chan) out_of_process_chan
} }
fn save_context_state(&mut self) { fn save_context_state(&mut self) {

View file

@ -62,7 +62,7 @@ impl WebGLPaintThread {
pub fn start(size: Size2D<i32>, pub fn start(size: Size2D<i32>,
attrs: GLContextAttributes, attrs: GLContextAttributes,
webrender_api_sender: Option<webrender_traits::RenderApiSender>) webrender_api_sender: Option<webrender_traits::RenderApiSender>)
-> Result<(IpcSender<CanvasMsg>, Sender<CanvasMsg>), String> { -> Result<IpcSender<CanvasMsg>, String> {
let (in_process_chan, in_process_port) = channel(); let (in_process_chan, in_process_port) = channel();
let (result_chan, result_port) = channel(); let (result_chan, result_port) = channel();
spawn_named("WebGLThread".to_owned(), move || { spawn_named("WebGLThread".to_owned(), move || {
@ -106,8 +106,8 @@ impl WebGLPaintThread {
result_port.recv().unwrap().map(|_| { result_port.recv().unwrap().map(|_| {
let (out_of_process_chan, out_of_process_port) = ipc::channel::<CanvasMsg>().unwrap(); let (out_of_process_chan, out_of_process_port) = ipc::channel::<CanvasMsg>().unwrap();
ROUTER.route_ipc_receiver_to_mpsc_sender(out_of_process_port, in_process_chan.clone()); ROUTER.route_ipc_receiver_to_mpsc_sender(out_of_process_port, in_process_chan);
(out_of_process_chan, in_process_chan) out_of_process_chan
}) })
} }

View file

@ -1200,8 +1200,8 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF>
size: &Size2D<i32>, size: &Size2D<i32>,
response_sender: IpcSender<IpcSender<CanvasMsg>>) { response_sender: IpcSender<IpcSender<CanvasMsg>>) {
let webrender_api = self.webrender_api_sender.clone(); let webrender_api = self.webrender_api_sender.clone();
let (out_of_process_sender, _) = CanvasPaintThread::start(*size, webrender_api); let sender = CanvasPaintThread::start(*size, webrender_api);
response_sender.send(out_of_process_sender).unwrap() response_sender.send(sender).unwrap()
} }
fn handle_create_webgl_paint_thread_msg( fn handle_create_webgl_paint_thread_msg(
@ -1210,14 +1210,9 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF>
attributes: GLContextAttributes, attributes: GLContextAttributes,
response_sender: IpcSender<Result<IpcSender<CanvasMsg>, String>>) { response_sender: IpcSender<Result<IpcSender<CanvasMsg>, String>>) {
let webrender_api = self.webrender_api_sender.clone(); let webrender_api = self.webrender_api_sender.clone();
let response = match WebGLPaintThread::start(*size, attributes, webrender_api) { let sender = WebGLPaintThread::start(*size, attributes, webrender_api);
Ok((out_of_process_sender, _)) => {
Ok(out_of_process_sender)
},
Err(msg) => Err(msg),
};
response_sender.send(response).unwrap() response_sender.send(sender).unwrap()
} }
fn handle_webdriver_msg(&mut self, msg: WebDriverCommandMsg) { fn handle_webdriver_msg(&mut self, msg: WebDriverCommandMsg) {