mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Use pipes for exit messages.
This commit is contained in:
parent
38968323bd
commit
41a68d1813
5 changed files with 31 additions and 27 deletions
|
@ -73,8 +73,8 @@ class Document {
|
||||||
class Content<S:Sink send copy> {
|
class Content<S:Sink send copy> {
|
||||||
let sink: S;
|
let sink: S;
|
||||||
let layout: Layout;
|
let layout: Layout;
|
||||||
let from_master: port<ControlMsg>;
|
let from_master: comm::port<ControlMsg>;
|
||||||
let event_port: port<Event>;
|
let event_port: comm::port<Event>;
|
||||||
|
|
||||||
let scope: NodeScope;
|
let scope: NodeScope;
|
||||||
let jsrt: jsrt;
|
let jsrt: jsrt;
|
||||||
|
|
|
@ -5,12 +5,14 @@ import layout::layout_task;
|
||||||
import layout_task::Layout;
|
import layout_task::Layout;
|
||||||
import content::{Content, ExecuteMsg, ParseMsg, ExitMsg, create_content};
|
import content::{Content, ExecuteMsg, ParseMsg, ExitMsg, create_content};
|
||||||
|
|
||||||
|
import pipes::{port, chan};
|
||||||
|
|
||||||
class Engine<S:Sink send copy> {
|
class Engine<S:Sink send copy> {
|
||||||
let sink: S;
|
let sink: S;
|
||||||
|
|
||||||
let renderer: Renderer;
|
let renderer: Renderer;
|
||||||
let layout: Layout;
|
let layout: Layout;
|
||||||
let content: chan<content::ControlMsg>;
|
let content: comm::chan<content::ControlMsg>;
|
||||||
|
|
||||||
new(+sink: S) {
|
new(+sink: S) {
|
||||||
self.sink = sink;
|
self.sink = sink;
|
||||||
|
@ -24,7 +26,7 @@ class Engine<S:Sink send copy> {
|
||||||
self.content = content;
|
self.content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start() -> chan<Msg> {
|
fn start() -> comm::chan<Msg> {
|
||||||
do spawn_listener::<Msg> |request| {
|
do spawn_listener::<Msg> |request| {
|
||||||
while self.handle_request(request.recv()) {
|
while self.handle_request(request.recv()) {
|
||||||
// Go on...
|
// Go on...
|
||||||
|
@ -47,10 +49,12 @@ class Engine<S:Sink send copy> {
|
||||||
ExitMsg(sender) {
|
ExitMsg(sender) {
|
||||||
self.content.send(content::ExitMsg);
|
self.content.send(content::ExitMsg);
|
||||||
self.layout.send(layout_task::ExitMsg);
|
self.layout.send(layout_task::ExitMsg);
|
||||||
do listen |response_channel| {
|
|
||||||
self.renderer.send(renderer::ExitMsg(response_channel));
|
let (response_chan, response_port) = pipes::stream();
|
||||||
response_channel.recv();
|
|
||||||
}
|
self.renderer.send(renderer::ExitMsg(response_chan));
|
||||||
|
response_port.recv();
|
||||||
|
|
||||||
sender.send(());
|
sender.send(());
|
||||||
ret false;
|
ret false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,10 +131,9 @@ fn sanity_check() {
|
||||||
|
|
||||||
let dlist : display_list = dvec();
|
let dlist : display_list = dvec();
|
||||||
renderer.send(RenderMsg(dlist));
|
renderer.send(RenderMsg(dlist));
|
||||||
listen(|from_renderer| {
|
let (exit_chan, exit_response_from_engine) = pipes::stream();
|
||||||
renderer.send(renderer::ExitMsg(from_renderer));
|
renderer.send(renderer::ExitMsg(exit_chan));
|
||||||
from_renderer.recv();
|
exit_response_from_engine.recv();
|
||||||
});
|
|
||||||
|
|
||||||
sink.send(Exit)
|
sink.send(Exit)
|
||||||
})
|
})
|
||||||
|
|
|
@ -15,11 +15,13 @@ import azure_hl::AsAzureRect;
|
||||||
import ptr::addr_of;
|
import ptr::addr_of;
|
||||||
import arc::arc;
|
import arc::arc;
|
||||||
|
|
||||||
type Renderer = chan<Msg>;
|
import pipes::{port, chan};
|
||||||
|
|
||||||
|
type Renderer = comm::chan<Msg>;
|
||||||
|
|
||||||
enum Msg {
|
enum Msg {
|
||||||
RenderMsg(dl::display_list),
|
RenderMsg(dl::display_list),
|
||||||
ExitMsg(comm::chan<()>)
|
ExitMsg(pipes::chan<()>)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc = "
|
#[doc = "
|
||||||
|
@ -29,12 +31,12 @@ each rendered frame and submit them to be drawn to the display
|
||||||
FIXME: Change this name to Compositor.
|
FIXME: Change this name to Compositor.
|
||||||
"]
|
"]
|
||||||
iface Sink {
|
iface Sink {
|
||||||
fn begin_drawing(next_dt: chan<AzDrawTargetRef>);
|
fn begin_drawing(next_dt: comm::chan<AzDrawTargetRef>);
|
||||||
fn draw(next_dt: chan<AzDrawTargetRef>, draw_me: AzDrawTargetRef);
|
fn draw(next_dt: comm::chan<AzDrawTargetRef>, draw_me: AzDrawTargetRef);
|
||||||
fn add_event_listener(listener: chan<Event>);
|
fn add_event_listener(listener: comm::chan<Event>);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn Renderer<S: Sink send copy>(sink: S) -> chan<Msg> {
|
fn Renderer<S: Sink send copy>(sink: S) -> comm::chan<Msg> {
|
||||||
task::spawn_listener::<Msg>(|po| {
|
task::spawn_listener::<Msg>(|po| {
|
||||||
listen(|draw_target_ch| {
|
listen(|draw_target_ch| {
|
||||||
#debug("renderer: beginning rendering loop");
|
#debug("renderer: beginning rendering loop");
|
||||||
|
|
|
@ -5,7 +5,7 @@ import osmain::{OSMain, AddKeyHandler};
|
||||||
import opts::{Opts, Screen, Png};
|
import opts::{Opts, Screen, Png};
|
||||||
import engine::{Engine, LoadURLMsg};
|
import engine::{Engine, LoadURLMsg};
|
||||||
|
|
||||||
import pipes::port;
|
import pipes::{port, chan};
|
||||||
|
|
||||||
fn main(args: ~[~str]) {
|
fn main(args: ~[~str]) {
|
||||||
run(opts::from_cmdline_args(args))
|
run(opts::from_cmdline_args(args))
|
||||||
|
@ -52,10 +52,10 @@ fn run_pipeline_screen(urls: ~[~str]) {
|
||||||
|
|
||||||
// Shut everything down
|
// Shut everything down
|
||||||
#debug["master: Shut down"];
|
#debug["master: Shut down"];
|
||||||
listen(|exit_response_from_engine| {
|
let (exit_chan, exit_response_from_engine) = pipes::stream();
|
||||||
engine_chan.send(engine::ExitMsg(exit_response_from_engine));
|
engine_chan.send(engine::ExitMsg(exit_chan));
|
||||||
exit_response_from_engine.recv();
|
exit_response_from_engine.recv();
|
||||||
});
|
|
||||||
osmain.send(osmain::Exit);
|
osmain.send(osmain::Exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,10 +79,9 @@ fn run_pipeline_png(-url: ~str, outfile: ~str) {
|
||||||
}
|
}
|
||||||
err(e) { fail e }
|
err(e) { fail e }
|
||||||
}
|
}
|
||||||
listen(|exit_response_from_engine| {
|
let (exit_chan, exit_response_from_engine) = pipes::stream();
|
||||||
engine_chan.send(engine::ExitMsg(exit_response_from_engine));
|
engine_chan.send(engine::ExitMsg(exit_chan));
|
||||||
exit_response_from_engine.recv();
|
exit_response_from_engine.recv();
|
||||||
});
|
|
||||||
sink.send(pngsink::Exit);
|
sink.send(pngsink::Exit);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue