aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/gfx/render_task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/gfx/render_task.rs')
-rw-r--r--src/components/gfx/render_task.rs35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/components/gfx/render_task.rs b/src/components/gfx/render_task.rs
index d60a0d84885..24bbc360684 100644
--- a/src/components/gfx/render_task.rs
+++ b/src/components/gfx/render_task.rs
@@ -22,9 +22,9 @@ use servo_util::time::{ProfilerChan, profile};
use servo_util::time;
use servo_util::task::send_on_failure;
-use std::comm::{Chan, Port, SharedChan};
+use std::comm::{Chan, Port, Chan};
use std::task;
-use extra::arc::Arc;
+use sync::Arc;
use buffer_map::BufferMap;
use display_list::DisplayListCollection;
@@ -66,7 +66,7 @@ pub fn BufferRequest(screen_rect: Rect<uint>, page_rect: Rect<f32>) -> BufferReq
// FIXME(rust#9155): this should be a newtype struct, but
// generic newtypes ICE when compiled cross-crate
pub struct RenderChan<T> {
- chan: SharedChan<Msg<T>>,
+ chan: Chan<Msg<T>>,
}
impl<T: Send> Clone for RenderChan<T> {
@@ -79,7 +79,7 @@ impl<T: Send> Clone for RenderChan<T> {
impl<T: Send> RenderChan<T> {
pub fn new() -> (Port<Msg<T>>, RenderChan<T>) {
- let (port, chan) = SharedChan::new();
+ let (port, chan) = Chan::new();
let render_chan = RenderChan {
chan: chan,
};
@@ -149,9 +149,9 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> {
opts: Opts,
profiler_chan: ProfilerChan,
shutdown_chan: Chan<()>) {
- let mut builder = task::task();
- send_on_failure(&mut builder, FailureMsg(failure_msg), (*constellation_chan).clone());
- builder.name("RenderTask");
+ let mut builder = task::task().named("RenderTask");
+ let ConstellationChan(c) = constellation_chan.clone();
+ send_on_failure(&mut builder, FailureMsg(failure_msg), c);
builder.spawn(proc() {
{ // Ensures RenderTask and graphics context are destroyed before shutdown msg
@@ -191,8 +191,10 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> {
render_task.start();
// Destroy all the buffers.
- render_task.native_graphics_context.as_ref().map(
- |ctx| render_task.buffer_map.clear(ctx));
+ {
+ let ctx = render_task.native_graphics_context.as_ref().unwrap();
+ render_task.buffer_map.clear(ctx);
+ }
}
debug!("render_task: shutdown_chan send");
@@ -211,7 +213,8 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> {
self.compositor.set_layer_page_size_and_color(self.id, render_layer.size, self.epoch, render_layer.color);
} else {
debug!("render_task: render ready msg");
- self.constellation_chan.send(RendererReadyMsg(self.id));
+ let ConstellationChan(ref mut c) = self.constellation_chan;
+ c.send(RendererReadyMsg(self.id));
}
self.render_layer = Some(render_layer);
}
@@ -251,12 +254,8 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> {
}
fn render(&mut self, tiles: ~[BufferRequest], scale: f32) {
- let render_layer;
- match self.render_layer {
- Some(ref r_layer) => {
- render_layer = r_layer;
- }
- _ => return, // nothing to do
+ if self.render_layer.is_none() {
+ return
}
self.compositor.set_render_state(RenderingRenderState);
@@ -311,6 +310,7 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> {
// Draw the display list.
profile(time::RenderingDrawingCategory, self.profiler_chan.clone(), || {
+ let render_layer = self.render_layer.as_ref().unwrap();
render_layer.display_list_collection.get().draw_lists_into_context(&mut ctx);
ctx.draw_target.flush();
});
@@ -395,7 +395,8 @@ impl<C: RenderListener + Send,T:Send+Freeze> RenderTask<C,T> {
self.compositor.paint(self.id, layer_buffer_set, self.epoch);
} else {
debug!("render_task: RendererReadyMsg send");
- self.constellation_chan.send(RendererReadyMsg(self.id));
+ let ConstellationChan(ref mut c) = self.constellation_chan;
+ c.send(RendererReadyMsg(self.id));
}
self.compositor.set_render_state(IdleRenderState);
})