mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Changes to support latest rust-layers
Now tiles are stored in TileGrid and layer methods are simple instance methods.
This commit is contained in:
parent
d97ec69957
commit
d9540475f0
4 changed files with 30 additions and 24 deletions
|
@ -11,9 +11,8 @@ use geom::matrix::identity;
|
||||||
use geom::point::TypedPoint2D;
|
use geom::point::TypedPoint2D;
|
||||||
use geom::rect::Rect;
|
use geom::rect::Rect;
|
||||||
use geom::size::{Size2D, TypedSize2D};
|
use geom::size::{Size2D, TypedSize2D};
|
||||||
use gfx::render_task::{ReRenderRequest, RenderChan, UnusedBufferMsg};
|
use gfx::render_task::{ReRenderRequest, ReRenderMsg, RenderChan, UnusedBufferMsg};
|
||||||
use layers::layers::{Layer, Flip, LayerBuffer, LayerBufferSet, NoFlip, TextureLayer};
|
use layers::layers::{Layer, Flip, LayerBuffer, LayerBufferSet, NoFlip, TextureLayer, Tile};
|
||||||
use layers::quadtree::Tile;
|
|
||||||
use layers::platform::surface::{NativeCompositingGraphicsContext, NativeSurfaceMethods};
|
use layers::platform::surface::{NativeCompositingGraphicsContext, NativeSurfaceMethods};
|
||||||
use layers::texturegl::{Texture, TextureTarget};
|
use layers::texturegl::{Texture, TextureTarget};
|
||||||
use servo_msg::compositor_msg::{Epoch, FixedPosition, LayerId};
|
use servo_msg::compositor_msg::{Epoch, FixedPosition, LayerId};
|
||||||
|
@ -112,11 +111,9 @@ impl CompositorData {
|
||||||
layer_properties.scroll_policy,
|
layer_properties.scroll_policy,
|
||||||
layer_properties.background_color);
|
layer_properties.background_color);
|
||||||
let new_kid = Rc::new(Layer::new(layer_properties.rect,
|
let new_kid = Rc::new(Layer::new(layer_properties.rect,
|
||||||
Layer::tile_size(layer.clone()),
|
layer.tile_size,
|
||||||
new_compositor_data));
|
new_compositor_data));
|
||||||
|
layer.add_child(new_kid.clone());
|
||||||
// Place the kid's layer in the container passed in.
|
|
||||||
Layer::add_child(layer.clone(), new_kid.clone());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Given the current window size, determine which tiles need to be (re-)rendered and sends them
|
// Given the current window size, determine which tiles need to be (re-)rendered and sends them
|
||||||
|
@ -129,7 +126,7 @@ impl CompositorData {
|
||||||
window_rect: Rect<f32>,
|
window_rect: Rect<f32>,
|
||||||
scale: f32)
|
scale: f32)
|
||||||
-> bool {
|
-> bool {
|
||||||
let (request, unused) = Layer::get_tile_rects_page(layer.clone(), window_rect, scale);
|
let (request, unused) = layer.get_tile_rects_page(window_rect, scale);
|
||||||
let redisplay = !unused.is_empty();
|
let redisplay = !unused.is_empty();
|
||||||
if redisplay {
|
if redisplay {
|
||||||
// Send back unused tiles.
|
// Send back unused tiles.
|
||||||
|
@ -207,7 +204,6 @@ impl CompositorData {
|
||||||
new_rect))
|
new_rect))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -215,11 +211,8 @@ impl CompositorData {
|
||||||
layer.extra_data.borrow_mut().epoch = layer_properties.epoch;
|
layer.extra_data.borrow_mut().epoch = layer_properties.epoch;
|
||||||
layer.extra_data.borrow_mut().unrendered_color = layer_properties.background_color;
|
layer.extra_data.borrow_mut().unrendered_color = layer_properties.background_color;
|
||||||
|
|
||||||
let unused_buffers = Layer::resize(layer.clone(), layer_properties.rect.size);
|
layer.resize(layer_properties.rect.size);
|
||||||
if !unused_buffers.is_empty() {
|
layer.contents_changed();
|
||||||
let msg = UnusedBufferMsg(unused_buffers);
|
|
||||||
let _ = layer.extra_data.borrow().pipeline.render_chan.send_opt(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call scroll for bounds checking if the page shrunk. Use (-1, -1) as the
|
// Call scroll for bounds checking if the page shrunk. Use (-1, -1) as the
|
||||||
// cursor position to make sure the scroll isn't propagated downwards.
|
// cursor position to make sure the scroll isn't propagated downwards.
|
||||||
|
@ -292,7 +285,7 @@ impl CompositorData {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect buffers from the quadtree. This method IS NOT recursive, so child layers
|
// Collect buffers from the layer. This method IS NOT recursive, so child layers
|
||||||
// are not rebuilt directly from this method.
|
// are not rebuilt directly from this method.
|
||||||
pub fn build_layer_tree(layer: Rc<Layer<CompositorData>>,
|
pub fn build_layer_tree(layer: Rc<Layer<CompositorData>>,
|
||||||
graphics_context: &NativeCompositingGraphicsContext) {
|
graphics_context: &NativeCompositingGraphicsContext) {
|
||||||
|
@ -300,7 +293,7 @@ impl CompositorData {
|
||||||
layer.tiles.borrow_mut().clear();
|
layer.tiles.borrow_mut().clear();
|
||||||
|
|
||||||
// Add new tiles.
|
// Add new tiles.
|
||||||
Layer::do_for_all_tiles(layer.clone(), |buffer: &Box<LayerBuffer>| {
|
layer.do_for_all_tiles(|buffer: &Box<LayerBuffer>| {
|
||||||
debug!("osmain: compositing buffer rect {}", buffer.rect);
|
debug!("osmain: compositing buffer rect {}", buffer.rect);
|
||||||
|
|
||||||
let size = Size2D(buffer.screen_pos.size.width as int,
|
let size = Size2D(buffer.screen_pos.size.width as int,
|
||||||
|
@ -354,24 +347,37 @@ impl CompositorData {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut unused_tiles = vec!();
|
|
||||||
for buffer in new_buffers.buffers.move_iter().rev() {
|
for buffer in new_buffers.buffers.move_iter().rev() {
|
||||||
unused_tiles.push_all_move(Layer::add_tile_pixel(layer.clone(), buffer));
|
layer.add_tile_pixel(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let unused_tiles = layer.collect_unused_tiles();
|
||||||
if !unused_tiles.is_empty() { // send back unused buffers
|
if !unused_tiles.is_empty() { // send back unused buffers
|
||||||
let msg = UnusedBufferMsg(unused_tiles);
|
let msg = UnusedBufferMsg(unused_tiles);
|
||||||
let _ = layer.extra_data.borrow().pipeline.render_chan.send_opt(msg);
|
let _ = layer.extra_data.borrow().pipeline.render_chan.send_opt(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let (pending_buffer_requests, scale) = layer.flush_pending_buffer_requests();
|
||||||
|
if !pending_buffer_requests.is_empty() {
|
||||||
|
let mut requests = vec!();
|
||||||
|
requests.push(ReRenderRequest {
|
||||||
|
buffer_requests: pending_buffer_requests,
|
||||||
|
scale: scale,
|
||||||
|
layer_id: layer.extra_data.borrow().id,
|
||||||
|
epoch: layer.extra_data.borrow().epoch,
|
||||||
|
});
|
||||||
|
let _ = layer.extra_data.borrow().pipeline.render_chan.send_opt(ReRenderMsg(requests));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CompositorData::build_layer_tree(layer.clone(), graphics_context);
|
CompositorData::build_layer_tree(layer.clone(), graphics_context);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destroys all quadtree tiles, sending the buffers back to the renderer to be destroyed or
|
/// Destroys all layer tiles, sending the buffers back to the renderer to be destroyed or
|
||||||
/// reused.
|
/// reused.
|
||||||
fn clear(layer: Rc<Layer<CompositorData>>) {
|
fn clear(layer: Rc<Layer<CompositorData>>) {
|
||||||
let mut tiles = Layer::collect_tiles(layer.clone());
|
let mut tiles = layer.collect_tiles();
|
||||||
|
|
||||||
if !tiles.is_empty() {
|
if !tiles.is_empty() {
|
||||||
// We have no way of knowing without a race whether the render task is even up and
|
// We have no way of knowing without a race whether the render task is even up and
|
||||||
|
@ -400,7 +406,7 @@ impl CompositorData {
|
||||||
///
|
///
|
||||||
/// This is used during shutdown, when we know the render task is going away.
|
/// This is used during shutdown, when we know the render task is going away.
|
||||||
pub fn forget_all_tiles(layer: Rc<Layer<CompositorData>>) {
|
pub fn forget_all_tiles(layer: Rc<Layer<CompositorData>>) {
|
||||||
let tiles = Layer::collect_tiles(layer.clone());
|
let tiles = layer.collect_tiles();
|
||||||
for tile in tiles.move_iter() {
|
for tile in tiles.move_iter() {
|
||||||
let mut tile = tile;
|
let mut tile = tile;
|
||||||
tile.mark_wont_leak()
|
tile.mark_wont_leak()
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
use std::collections::hashmap::HashMap;
|
use std::collections::hashmap::HashMap;
|
||||||
use geom::size::Size2D;
|
use geom::size::Size2D;
|
||||||
use layers::platform::surface::NativePaintingGraphicsContext;
|
use layers::platform::surface::NativePaintingGraphicsContext;
|
||||||
use layers::quadtree::Tile;
|
use layers::layers::Tile;
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
use std::hash::sip::SipState;
|
use std::hash::sip::SipState;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 862af73433f36f156519ff24bd87abd3a8c10790
|
Subproject commit 76e5b8281ce988b6cc58a18932c66287e8252be3
|
|
@ -1 +1 @@
|
||||||
Subproject commit 3f116aef7db600654e6311aad2ac1968cbabf88a
|
Subproject commit fc8332bdd278531e3c498813b366b147c96a8b37
|
Loading…
Add table
Add a link
Reference in a new issue