diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2012-10-04 11:02:53 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2012-10-04 15:28:10 -0700 |
commit | 994c47d22b0a3603978d4b6dcb8ffed72e65ac9a (patch) | |
tree | 6939083c1dd3a6cf070a92214573c95cdd1f1833 /src/servo/engine.rs | |
parent | e105f3b5571f0cbfae3fc6a96938d4d039bb660d (diff) | |
download | servo-994c47d22b0a3603978d4b6dcb8ffed72e65ac9a.tar.gz servo-994c47d22b0a3603978d4b6dcb8ffed72e65ac9a.zip |
Update for language changes; remove pipe protocols.
Diffstat (limited to 'src/servo/engine.rs')
-rw-r--r-- | src/servo/engine.rs | 157 |
1 files changed, 66 insertions, 91 deletions
diff --git a/src/servo/engine.rs b/src/servo/engine.rs index bcba7bbbfb3..ace4fdd900b 100644 --- a/src/servo/engine.rs +++ b/src/servo/engine.rs @@ -1,112 +1,87 @@ -export EngineTask, EngineTask_, EngineProto; - use gfx::compositor::Compositor; -use gfx::render_task; -use render_task::RenderTask; -use pipes::{spawn_service, select}; +use mod gfx::render_task; +use gfx::render_task::{Renderer, RenderTask}; +use task::spawn_listener; use layout::layout_task; use layout_task::LayoutTask; -use content::content_task; -use content_task::{ContentTask}; +use mod content::content_task; +use content::content_task::{ContentTask, ExecuteMsg, ParseMsg, ExitMsg}; use resource::resource_task; -use resource::resource_task::{ResourceTask}; +use resource::resource_task::ResourceTask; use std::net::url::Url; use resource::image_cache_task; -use image_cache_task::{ImageCacheTask, ImageCacheTaskClient}; - +use image_cache_task::{ImageCacheTask, image_cache_task, ImageCacheTaskClient}; use pipes::{Port, Chan}; -fn macros() { - include!("macros.rs"); -} - -type EngineTask = EngineProto::client::Running; - -fn EngineTask<C: Compositor Send Copy>(+compositor: C) -> EngineTask { - let resource_task = ResourceTask(); - let image_cache_task = ImageCacheTask(resource_task); - EngineTask_(compositor, resource_task, image_cache_task) -} - -fn EngineTask_<C: Compositor Send Copy>( - +compositor: C, - resource_task: ResourceTask, - image_cache_task: ImageCacheTask -) -> EngineTask { - do spawn_service(EngineProto::init) |request, move compositor| { - - let render_task = RenderTask(compositor); - let layout_task = LayoutTask(render_task, image_cache_task); - let content_task = ContentTask(layout_task, compositor, resource_task, image_cache_task); - - Engine { - compositor: compositor, - render_task: render_task, - resource_task: resource_task, - image_cache_task: image_cache_task, - layout_task: layout_task, - content_task: content_task, - }.run(request); - } -} - - -struct Engine<C:Compositor> { +pub struct Engine<C:Compositor Send Copy> { compositor: C, - render_task: RenderTask, + render_task: Renderer, resource_task: ResourceTask, image_cache_task: ImageCacheTask, layout_task: LayoutTask, - content_task: ContentTask, + content_task: ContentTask } -impl<C: Compositor> Engine<C> { - fn run(+request: EngineProto::server::Running) { - use EngineProto::*; - let mut request = request; - - loop { - select!( - request => { - LoadURL(url) -> next { - // TODO: change copy to move once we have match move - let url = move_ref!(url); - if url.path.ends_with(".js") { - self.content_task.send(content_task::ExecuteMsg(url)) - } else { - self.content_task.send(content_task::ParseMsg(url)) - } - request = next; - }, - - Exit -> channel { - self.content_task.send(content_task::ExitMsg); - self.layout_task.send(layout_task::ExitMsg); - - let (response_chan, response_port) = pipes::stream(); - self.render_task.send(render_task::ExitMsg(response_chan)); - response_port.recv(); - - self.image_cache_task.exit(); - self.resource_task.send(resource_task::Exit); - - server::Exited(channel); - break - } - } - ) - } +pub fn Engine<C:Compositor Send Copy>(compositor: C, + resource_task: ResourceTask, + image_cache_task: ImageCacheTask) -> Engine<C> { + let render_task = RenderTask(compositor); + let layout_task = LayoutTask(render_task, image_cache_task); + let content_task = ContentTask(layout_task, compositor, resource_task, image_cache_task); + + Engine { + compositor: compositor, + render_task: render_task, + resource_task: resource_task, + image_cache_task: image_cache_task, + layout_task: layout_task, + content_task: content_task } } -proto! EngineProto( - Running:send { - LoadURL(Url) -> Running, - Exit -> Exiting +impl<C: Compositor Copy Send> Engine<C> { + fn start() -> comm::Chan<Msg> { + do spawn_listener::<Msg> |request| { + while self.handle_request(request.recv()) { + // Go on... + } + } } - Exiting:recv { - Exited -> ! + fn handle_request(request: Msg) -> bool { + match request { + LoadURLMsg(url) => { + // TODO: change copy to move once we have match move + let url = copy url; + if url.path.ends_with(".js") { + self.content_task.send(ExecuteMsg(url)) + } else { + self.content_task.send(ParseMsg(url)) + } + return true; + } + + ExitMsg(sender) => { + self.content_task.send(content_task::ExitMsg); + self.layout_task.send(layout_task::ExitMsg); + + let (response_chan, response_port) = pipes::stream(); + + self.render_task.send(render_task::ExitMsg(response_chan)); + response_port.recv(); + + self.image_cache_task.exit(); + self.resource_task.send(resource_task::Exit); + + sender.send(()); + return false; + } + } } -) +} + +pub enum Msg { + LoadURLMsg(Url), + ExitMsg(Chan<()>) +} |