diff options
author | Tim Kuehn <tkuehn@cmu.edu> | 2013-07-01 14:16:43 -0700 |
---|---|---|
committer | Tim Kuehn <tkuehn@cmu.edu> | 2013-07-02 17:26:46 -0700 |
commit | c9c6cb3bf57e08cac7e75f54e045ced26df82160 (patch) | |
tree | 345f20e13d02f4a671b1b9cd52512e2de0a95221 /src/components/gfx/render_task.rs | |
parent | a6eaffcd93c27fdec4f67eb0ebeeca7269fee013 (diff) | |
download | servo-c9c6cb3bf57e08cac7e75f54e045ced26df82160.tar.gz servo-c9c6cb3bf57e08cac7e75f54e045ced26df82160.zip |
new token-permissions model, and compositor filters paint messages based on id
Diffstat (limited to 'src/components/gfx/render_task.rs')
-rw-r--r-- | src/components/gfx/render_task.rs | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/components/gfx/render_task.rs b/src/components/gfx/render_task.rs index b0fed806ef2..e51ee22e08c 100644 --- a/src/components/gfx/render_task.rs +++ b/src/components/gfx/render_task.rs @@ -7,9 +7,9 @@ use azure::{AzFloat, AzGLContext}; use azure::azure_hl::{B8G8R8A8, DrawTarget}; use display_list::DisplayList; -use servo_msg::compositor::{RenderListener, IdleRenderState, RenderingRenderState, LayerBuffer}; -use servo_msg::compositor::{CompositorToken, LayerBufferSet}; -use servo_msg::constellation::{ConstellationChan, TokenSurrenderMsg}; +use servo_msg::compositor_msg::{RenderListener, IdleRenderState, RenderingRenderState, LayerBuffer}; +use servo_msg::compositor_msg::{CompositorToken, LayerBufferSet}; +use servo_msg::constellation_msg::{ConstellationChan}; use font_context::FontContext; use geom::matrix2d::Matrix2D; use geom::point::Point2D; @@ -33,8 +33,8 @@ pub struct RenderLayer { pub enum Msg { RenderMsg(RenderLayer), ReRenderMsg(f32), - TokenBestowMsg(~CompositorToken), - TokenProcureMsg, + TokenBestowMsg(CompositorToken), + TokenInvalidateMsg, ExitMsg(Chan<()>), } @@ -55,6 +55,7 @@ impl RenderChan { } priv struct RenderTask<C> { + id: uint, port: Port<Msg>, compositor: C, font_ctx: @mut FontContext, @@ -70,13 +71,14 @@ priv struct RenderTask<C> { /// A channel to the constellation for surrendering token constellation_chan: ConstellationChan, /// A token that grants permission to send paint messages to compositor - compositor_token: Option<~CompositorToken>, + compositor_token: Option<CompositorToken>, /// Cached copy of last layers rendered last_paint_msg: Option<(LayerBufferSet, Size2D<uint>)>, } impl<C: RenderListener + Owned> RenderTask<C> { - pub fn create(port: Port<Msg>, + pub fn create(id: uint, + port: Port<Msg>, compositor: C, opts: Opts, constellation_chan: ConstellationChan, @@ -95,6 +97,7 @@ impl<C: RenderListener + Owned> RenderTask<C> { // FIXME: rust/#5967 let mut render_task = RenderTask { + id: id, port: port.take(), compositor: compositor, font_ctx: @mut FontContext::new(opts.render_backend, @@ -130,14 +133,14 @@ impl<C: RenderListener + Owned> RenderTask<C> { self.compositor_token = Some(token); match self.last_paint_msg { Some((ref layer_buffer_set, ref layer_size)) => { - self.compositor.paint(layer_buffer_set.clone(), *layer_size); + self.compositor.paint(self.id, layer_buffer_set.clone(), *layer_size); self.compositor.set_render_state(IdleRenderState); } None => {} } } - TokenProcureMsg => { - self.constellation_chan.send(TokenSurrenderMsg(self.compositor_token.swap_unwrap())); + TokenInvalidateMsg => { + self.compositor_token = None; } ExitMsg(response_ch) => { response_ch.send(()); @@ -232,7 +235,7 @@ impl<C: RenderListener + Owned> RenderTask<C> { debug!("render_task: returning surface"); if self.compositor_token.is_some() { - self.compositor.paint(layer_buffer_set.clone(), render_layer.size); + self.compositor.paint(self.id, layer_buffer_set.clone(), render_layer.size); } debug!("caching paint msg"); self.last_paint_msg = Some((layer_buffer_set, render_layer.size)); |