mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Implement epochs; fix integration bugs
This commit is contained in:
parent
f2c00f7e28
commit
eb6973c7dc
9 changed files with 114 additions and 48 deletions
|
@ -32,7 +32,7 @@ pub struct RenderLayer {
|
|||
|
||||
pub enum Msg {
|
||||
RenderMsg(RenderLayer),
|
||||
ReRenderMsg(~[BufferRequest], f32, PipelineId),
|
||||
ReRenderMsg(~[BufferRequest], f32, PipelineId, uint),
|
||||
PaintPermissionGranted,
|
||||
PaintPermissionRevoked,
|
||||
ExitMsg(Chan<()>),
|
||||
|
@ -89,6 +89,8 @@ struct RenderTask<C> {
|
|||
paint_permission: bool,
|
||||
/// Cached copy of last layers rendered
|
||||
last_paint_msg: Option<(arc::Arc<LayerBufferSet>, Size2D<uint>)>,
|
||||
/// A counter for epoch messages
|
||||
epoch_counter: uint,
|
||||
}
|
||||
|
||||
impl<C: RenderListener + Send> RenderTask<C> {
|
||||
|
@ -123,6 +125,7 @@ impl<C: RenderListener + Send> RenderTask<C> {
|
|||
|
||||
paint_permission: false,
|
||||
last_paint_msg: None,
|
||||
epoch_counter: 0,
|
||||
};
|
||||
|
||||
render_task.start();
|
||||
|
@ -136,18 +139,24 @@ impl<C: RenderListener + Send> RenderTask<C> {
|
|||
match self.port.recv() {
|
||||
RenderMsg(render_layer) => {
|
||||
if self.paint_permission {
|
||||
self.compositor.set_layer_page_size(self.id, render_layer.size);
|
||||
self.epoch_counter += 1;
|
||||
self.compositor.set_layer_page_size(self.id, render_layer.size, self.epoch_counter);
|
||||
}
|
||||
self.render_layer = Some(render_layer);
|
||||
}
|
||||
ReRenderMsg(tiles, scale, id) => {
|
||||
self.render(tiles, scale, id);
|
||||
ReRenderMsg(tiles, scale, id, epoch) => {
|
||||
if self.epoch_counter == epoch {
|
||||
self.render(tiles, scale, id);
|
||||
} else {
|
||||
debug!("renderer epoch mismatch: %? != %?", self.epoch_counter, epoch);
|
||||
}
|
||||
}
|
||||
PaintPermissionGranted => {
|
||||
self.paint_permission = true;
|
||||
match self.render_layer {
|
||||
Some(ref render_layer) => {
|
||||
self.compositor.set_layer_page_size(self.id, render_layer.size);
|
||||
self.epoch_counter += 1;
|
||||
self.compositor.set_layer_page_size(self.id, render_layer.size, self.epoch_counter);
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
|
@ -235,7 +244,7 @@ impl<C: RenderListener + Send> RenderTask<C> {
|
|||
|
||||
debug!("render_task: returning surface");
|
||||
if self.paint_permission {
|
||||
self.compositor.paint(id, layer_buffer_set.clone());
|
||||
self.compositor.paint(id, layer_buffer_set.clone(), self.epoch_counter);
|
||||
}
|
||||
debug!("caching paint msg");
|
||||
self.last_paint_msg = Some((layer_buffer_set, render_layer.size));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue