mirror of
https://github.com/servo/servo.git
synced 2025-08-02 12:10:29 +01:00
Simplify channel usage in canvas paint threads.
This commit is contained in:
parent
c4e112a3be
commit
d21cf30c2c
2 changed files with 7 additions and 15 deletions
|
@ -14,12 +14,10 @@ use euclid::size::Size2D;
|
||||||
use gfx_traits::color;
|
use gfx_traits::color;
|
||||||
use ipc_channel::ipc::IpcSharedMemory;
|
use ipc_channel::ipc::IpcSharedMemory;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use ipc_channel::router::ROUTER;
|
|
||||||
use num::ToPrimitive;
|
use num::ToPrimitive;
|
||||||
use premultiplytable::PREMULTIPLY_TABLE;
|
use premultiplytable::PREMULTIPLY_TABLE;
|
||||||
use std::borrow::ToOwned;
|
use std::borrow::ToOwned;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::sync::mpsc::channel;
|
|
||||||
use util::opts;
|
use util::opts;
|
||||||
use util::thread::spawn_named;
|
use util::thread::spawn_named;
|
||||||
use util::vec::byte_swap;
|
use util::vec::byte_swap;
|
||||||
|
@ -127,13 +125,11 @@ impl<'a> CanvasPaintThread<'a> {
|
||||||
-> IpcSender<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 (sender, receiver) = ipc::channel::<CanvasMsg>().unwrap();
|
||||||
let (in_process_chan, in_process_port) = channel();
|
|
||||||
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 {
|
||||||
let msg = in_process_port.recv();
|
let msg = receiver.recv();
|
||||||
match msg.unwrap() {
|
match msg.unwrap() {
|
||||||
CanvasMsg::Canvas2d(message) => {
|
CanvasMsg::Canvas2d(message) => {
|
||||||
match message {
|
match message {
|
||||||
|
@ -209,7 +205,7 @@ impl<'a> CanvasPaintThread<'a> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
out_of_process_chan
|
sender
|
||||||
}
|
}
|
||||||
|
|
||||||
fn save_context_state(&mut self) {
|
fn save_context_state(&mut self) {
|
||||||
|
|
|
@ -6,7 +6,6 @@ use canvas_traits::{CanvasCommonMsg, CanvasMsg, CanvasPixelData, CanvasData, Can
|
||||||
use euclid::size::Size2D;
|
use euclid::size::Size2D;
|
||||||
use gleam::gl;
|
use gleam::gl;
|
||||||
use ipc_channel::ipc::{self, IpcSender, IpcSharedMemory};
|
use ipc_channel::ipc::{self, IpcSender, IpcSharedMemory};
|
||||||
use ipc_channel::router::ROUTER;
|
|
||||||
use offscreen_gl_context::{ColorAttachmentType, GLContext, GLContextAttributes, NativeGLContext};
|
use offscreen_gl_context::{ColorAttachmentType, GLContext, GLContextAttributes, NativeGLContext};
|
||||||
use std::borrow::ToOwned;
|
use std::borrow::ToOwned;
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
|
@ -61,7 +60,7 @@ impl WebGLPaintThread {
|
||||||
attrs: GLContextAttributes,
|
attrs: GLContextAttributes,
|
||||||
webrender_api_sender: Option<webrender_traits::RenderApiSender>)
|
webrender_api_sender: Option<webrender_traits::RenderApiSender>)
|
||||||
-> Result<IpcSender<CanvasMsg>, String> {
|
-> Result<IpcSender<CanvasMsg>, String> {
|
||||||
let (in_process_chan, in_process_port) = channel();
|
let (sender, receiver) = ipc::channel::<CanvasMsg>().unwrap();
|
||||||
let (result_chan, result_port) = channel();
|
let (result_chan, result_port) = channel();
|
||||||
spawn_named("WebGLThread".to_owned(), move || {
|
spawn_named("WebGLThread".to_owned(), move || {
|
||||||
let mut painter = match WebGLPaintThread::new(size, attrs, webrender_api_sender) {
|
let mut painter = match WebGLPaintThread::new(size, attrs, webrender_api_sender) {
|
||||||
|
@ -76,7 +75,7 @@ impl WebGLPaintThread {
|
||||||
};
|
};
|
||||||
painter.init();
|
painter.init();
|
||||||
loop {
|
loop {
|
||||||
match in_process_port.recv().unwrap() {
|
match receiver.recv().unwrap() {
|
||||||
CanvasMsg::WebGL(message) => painter.handle_webgl_message(message),
|
CanvasMsg::WebGL(message) => painter.handle_webgl_message(message),
|
||||||
CanvasMsg::Common(message) => {
|
CanvasMsg::Common(message) => {
|
||||||
match message {
|
match message {
|
||||||
|
@ -96,11 +95,8 @@ impl WebGLPaintThread {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
result_port.recv().unwrap().map(|_| {
|
try!(result_port.recv().unwrap());
|
||||||
let (out_of_process_chan, out_of_process_port) = ipc::channel::<CanvasMsg>().unwrap();
|
Ok(sender)
|
||||||
ROUTER.route_ipc_receiver_to_mpsc_sender(out_of_process_port, in_process_chan);
|
|
||||||
out_of_process_chan
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_data(&mut self, chan: IpcSender<CanvasData>) {
|
fn send_data(&mut self, chan: IpcSender<CanvasData>) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue