aboutsummaryrefslogtreecommitdiffstats
path: root/src/servo/engine.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-10-04 11:02:53 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-10-04 15:28:10 -0700
commit994c47d22b0a3603978d4b6dcb8ffed72e65ac9a (patch)
tree6939083c1dd3a6cf070a92214573c95cdd1f1833 /src/servo/engine.rs
parente105f3b5571f0cbfae3fc6a96938d4d039bb660d (diff)
downloadservo-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.rs157
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<()>)
+}