aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/gfx/render_task.rs
diff options
context:
space:
mode:
authorTim Kuehn <tkuehn@cmu.edu>2013-07-01 14:16:43 -0700
committerTim Kuehn <tkuehn@cmu.edu>2013-07-02 17:26:46 -0700
commitc9c6cb3bf57e08cac7e75f54e045ced26df82160 (patch)
tree345f20e13d02f4a671b1b9cd52512e2de0a95221 /src/components/gfx/render_task.rs
parenta6eaffcd93c27fdec4f67eb0ebeeca7269fee013 (diff)
downloadservo-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.rs25
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));