mirror of
https://github.com/servo/servo.git
synced 2025-06-25 17:44:33 +01:00
Begin threading the ResourceTask through the engine
This commit is contained in:
parent
c01899233a
commit
f48309739f
3 changed files with 22 additions and 6 deletions
|
@ -35,6 +35,9 @@ import result::extensions;
|
||||||
import dom::bindings::utils::rust_box;
|
import dom::bindings::utils::rust_box;
|
||||||
import js::rust::compartment;
|
import js::rust::compartment;
|
||||||
|
|
||||||
|
import resource::resource_task;
|
||||||
|
import resource_task::{ResourceTask};
|
||||||
|
|
||||||
type Content = chan<ControlMsg>;
|
type Content = chan<ControlMsg>;
|
||||||
|
|
||||||
enum ControlMsg {
|
enum ControlMsg {
|
||||||
|
@ -81,7 +84,9 @@ class Content<S:Sink send copy> {
|
||||||
|
|
||||||
let mut document: option<@Document>;
|
let mut document: option<@Document>;
|
||||||
|
|
||||||
new(layout: Layout, sink: S, from_master: port<ControlMsg>) {
|
let resource_task: ResourceTask;
|
||||||
|
|
||||||
|
new(layout: Layout, sink: S, from_master: port<ControlMsg>, resource_task: ResourceTask) {
|
||||||
self.layout = layout;
|
self.layout = layout;
|
||||||
self.sink = sink;
|
self.sink = sink;
|
||||||
self.from_master = from_master;
|
self.from_master = from_master;
|
||||||
|
@ -93,6 +98,8 @@ class Content<S:Sink send copy> {
|
||||||
self.document = none;
|
self.document = none;
|
||||||
|
|
||||||
self.sink.add_event_listener(self.event_port.chan());
|
self.sink.add_event_listener(self.event_port.chan());
|
||||||
|
|
||||||
|
self.resource_task = resource_task;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start() {
|
fn start() {
|
||||||
|
@ -119,7 +126,7 @@ class Content<S:Sink send copy> {
|
||||||
|
|
||||||
// Note: we can parse the next document in parallel
|
// Note: we can parse the next document in parallel
|
||||||
// with any previous documents.
|
// with any previous documents.
|
||||||
let stream = spawn_html_lexer_task(copy filename);
|
let stream = spawn_html_lexer_task(copy filename, self.resource_task);
|
||||||
let (root, style_port, js_port) = build_dom(self.scope, stream);
|
let (root, style_port, js_port) = build_dom(self.scope, stream);
|
||||||
let css_rules = style_port.recv();
|
let css_rules = style_port.recv();
|
||||||
let js_scripts = js_port.recv();
|
let js_scripts = js_port.recv();
|
||||||
|
@ -210,9 +217,9 @@ class Content<S:Sink send copy> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_content<S: Sink send copy>(layout: Layout, sink: S) -> chan<ControlMsg> {
|
fn create_content<S: Sink send copy>(layout: Layout, sink: S, resource_task: ResourceTask) -> chan<ControlMsg> {
|
||||||
do spawn_listener::<ControlMsg> |from_master| {
|
do spawn_listener::<ControlMsg> |from_master| {
|
||||||
Content(layout, sink, from_master).start();
|
Content(layout, sink, from_master, resource_task).start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ import comm::chan;
|
||||||
import layout::layout_task;
|
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 resource::resource_task;
|
||||||
|
import resource::resource_task::{ResourceTask};
|
||||||
|
|
||||||
import pipes::{port, chan};
|
import pipes::{port, chan};
|
||||||
|
|
||||||
|
@ -12,6 +14,7 @@ class Engine<S:Sink send copy> {
|
||||||
|
|
||||||
let renderer: Renderer;
|
let renderer: Renderer;
|
||||||
let layout: Layout;
|
let layout: Layout;
|
||||||
|
let resource_task: ResourceTask;
|
||||||
let content: comm::chan<content::ControlMsg>;
|
let content: comm::chan<content::ControlMsg>;
|
||||||
|
|
||||||
new(+sink: S) {
|
new(+sink: S) {
|
||||||
|
@ -19,10 +22,12 @@ class Engine<S:Sink send copy> {
|
||||||
|
|
||||||
let renderer = Renderer(sink);
|
let renderer = Renderer(sink);
|
||||||
let layout = Layout(renderer);
|
let layout = Layout(renderer);
|
||||||
let content = create_content(layout, sink);
|
let resource_task = ResourceTask();
|
||||||
|
let content = create_content(layout, sink, resource_task);
|
||||||
|
|
||||||
self.renderer = renderer;
|
self.renderer = renderer;
|
||||||
self.layout = layout;
|
self.layout = layout;
|
||||||
|
self.resource_task = resource_task;
|
||||||
self.content = content;
|
self.content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +60,8 @@ class Engine<S:Sink send copy> {
|
||||||
self.renderer.send(renderer::ExitMsg(response_chan));
|
self.renderer.send(renderer::ExitMsg(response_chan));
|
||||||
response_port.recv();
|
response_port.recv();
|
||||||
|
|
||||||
|
self.resource_task.send(resource_task::Exit);
|
||||||
|
|
||||||
sender.send(());
|
sender.send(());
|
||||||
ret false;
|
ret false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import option::is_none;
|
||||||
import str::from_bytes;
|
import str::from_bytes;
|
||||||
import vec::push;
|
import vec::push;
|
||||||
import lexer_util::*;
|
import lexer_util::*;
|
||||||
|
import resource::resource_task;
|
||||||
|
import resource_task::{ResourceTask};
|
||||||
|
|
||||||
enum Token {
|
enum Token {
|
||||||
StartOpeningTag(~str),
|
StartOpeningTag(~str),
|
||||||
|
@ -168,7 +170,7 @@ fn lexer(reader: io::reader, state : ParseState) -> HtmlLexer {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[warn(no_non_implicitly_copyable_typarams)]
|
#[warn(no_non_implicitly_copyable_typarams)]
|
||||||
fn spawn_html_lexer_task(-filename: ~str) -> port<Token> {
|
fn spawn_html_lexer_task(-filename: ~str, resource_task: ResourceTask) -> port<Token> {
|
||||||
let html_port = port();
|
let html_port = port();
|
||||||
let html_chan = chan(html_port);
|
let html_chan = chan(html_port);
|
||||||
let html_file = copy filename;
|
let html_file = copy filename;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue