Skip to content

Commit

Permalink
auto merge of #2575 : mbrubeck/servo/2259-remove-old-layers, r=pcwalton
Browse files Browse the repository at this point in the history
This fixes #2259 which was caused by some of the previous layers sticking around incorrectly.  Depends on servo/rust-layers#69.

Also includes some related cleanup as separate commits.

No reftest because our test harness doesn't yet support navigating to a new page (#2574).
  • Loading branch information
bors-servo committed Jun 4, 2014
2 parents 33c4a7a + 81601c2 commit 473b9e4
Show file tree
Hide file tree
Showing 6 changed files with 7 additions and 73 deletions.
34 changes: 5 additions & 29 deletions src/components/main/compositing/compositor.rs
Expand Up @@ -298,10 +298,6 @@ impl IOCompositor {
self.set_layer_clip_rect(pipeline_id, layer_id, new_rect);
}

(Ok(DeleteLayerGroup(id)), _) => {
self.delete_layer(id);
}

(Ok(Paint(pipeline_id, layer_id, new_layer_buffer_set, epoch)), false) => {
self.paint(pipeline_id, layer_id, new_layer_buffer_set, epoch);
}
Expand Down Expand Up @@ -367,8 +363,10 @@ impl IOCompositor {
}
_ => {
match self.root_pipeline {
Some(ref root_pipeline) => (root_pipeline.clone(), LayerId::null()),
None => fail!("Compositor: Received new layer without initialized pipeline"),
Some(ref root_pipeline) if root_pipeline.id == id => {
(root_pipeline.clone(), LayerId::null())
},
_ => fail!("Compositor: Received new layer without initialized pipeline"),
}
}
};
Expand All @@ -381,13 +379,7 @@ impl IOCompositor {
self.opts.cpu_painting);
new_layer.unrendered_color = unrendered_color;

let first_child = self.root_layer.first_child.borrow().clone();
match first_child {
None => {}
Some(old_layer) => {
ContainerLayer::remove_child(self.root_layer.clone(), old_layer)
}
}
self.root_layer.remove_all_children();

assert!(new_layer.add_child_if_necessary(self.root_layer.clone(),
root_pipeline_id,
Expand Down Expand Up @@ -478,22 +470,6 @@ impl IOCompositor {
}
}

fn delete_layer(&mut self, id: PipelineId) {
let ask: bool = match self.compositor_layer {
Some(ref mut layer) => {
assert!(layer.delete(&self.graphics_context, id));
true
}
None => {
false
}
};

if ask {
self.ask_for_tiles();
}
}

fn paint(&mut self,
pipeline_id: PipelineId,
layer_id: LayerId,
Expand Down
34 changes: 0 additions & 34 deletions src/components/main/compositing/compositor_layer.rs
Expand Up @@ -857,40 +857,6 @@ impl CompositorLayer {
return None
}

// Deletes a specified sublayer, including hidden children. Returns false if the layer is not
// found.
pub fn delete(&mut self,
graphics_context: &NativeCompositingGraphicsContext,
pipeline_id: PipelineId)
-> bool {
match self.children.iter().position(|x| x.child.pipeline.id == pipeline_id) {
Some(i) => {
let mut child = self.children.remove(i);
match self.quadtree {
NoTree(..) => {} // Nothing to do
Tree(ref mut quadtree) => {
match *child.get_ref().container.scissor.borrow() {
Some(rect) => {
quadtree.set_status_page(rect, Normal, false); // Unhide this rect
}
None => {} // Nothing to do
}
}
}

// Send back all tiles to renderer.
child.get_mut_ref().child.clear_all_tiles();

self.build_layer_tree(graphics_context);
true
}
None => {
self.children.mut_iter().map(|x| &mut x.child)
.any(|x| x.delete(graphics_context, pipeline_id))
}
}
}

// Recursively sets occluded portions of quadtrees to Hidden, so that they do not ask for
// tile requests. If layers are moved, resized, or deleted, these portions may be updated.
fn set_occlusions(&mut self) {
Expand Down
6 changes: 0 additions & 6 deletions src/components/main/compositing/compositor_task.rs
Expand Up @@ -126,10 +126,6 @@ impl RenderListener for CompositorChan {
self.chan.send(SetLayerClipRect(pipeline_id, layer_id, new_rect))
}

fn delete_layer_group(&self, id: PipelineId) {
self.chan.send(DeleteLayerGroup(id))
}

fn set_render_state(&self, render_state: RenderState) {
self.chan.send(ChangeRenderState(render_state))
}
Expand Down Expand Up @@ -175,8 +171,6 @@ pub enum Msg {
SetLayerPageSize(PipelineId, LayerId, Size2D<f32>, Epoch),
/// Alerts the compositor that the specified layer's clipping rect has changed.
SetLayerClipRect(PipelineId, LayerId, Rect<f32>),
/// Alerts the compositor that the specified pipeline has been deleted.
DeleteLayerGroup(PipelineId),
/// Scroll a page in a window
ScrollFragmentPoint(PipelineId, LayerId, Point2D<f32>),
/// Requests that the compositor paint the given layer buffer set for the given page size.
Expand Down
2 changes: 1 addition & 1 deletion src/components/main/compositing/headless.rs
Expand Up @@ -78,7 +78,7 @@ impl NullCompositor {

CreateRootCompositorLayerIfNecessary(..) |
CreateDescendantCompositorLayerIfNecessary(..) | SetLayerPageSize(..) |
SetLayerClipRect(..) | DeleteLayerGroup(..) | Paint(..) |
SetLayerClipRect(..) | Paint(..) |
ChangeReadyState(..) | ChangeRenderState(..) | ScrollFragmentPoint(..) |
SetUnRenderedColor(..) | LoadComplete(..) => ()
}
Expand Down
2 changes: 0 additions & 2 deletions src/components/msg/compositor_msg.rs
Expand Up @@ -134,8 +134,6 @@ pub trait RenderListener {
layer_id: LayerId,
new_rect: Rect<uint>);

fn delete_layer_group(&self, PipelineId);

/// Sends new tiles for the given layer to the compositor.
fn paint(&self,
pipeline_id: PipelineId,
Expand Down
2 changes: 1 addition & 1 deletion src/support/layers/rust-layers

0 comments on commit 473b9e4

Please sign in to comment.