Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Progressive Rendering #557

Merged
merged 9 commits into from Jul 11, 2013

Address metajack's comments

  • Loading branch information
eschweic
eschweic committed Jul 11, 2013
commit 435941e93238ac0494a92a82ceecc9d68b868b8f
@@ -31,12 +31,28 @@ pub struct RenderLayer {

pub enum Msg {
RenderMsg(RenderLayer),
ReRenderMsg(~[(Rect<uint>, Rect<f32>)], f32),
ReRenderMsg(~[BufferRequest], f32),
PaintPermissionGranted,
PaintPermissionRevoked,
ExitMsg(Chan<()>),
}

/// A request from the compositor to the renderer for tiles that need to be (re)displayed.
pub struct BufferRequest {
// The rect in pixels that will be drawn to the screen
screen_rect: Rect<uint>,

// The rect in page coordinates that this tile represents
page_rect: Rect<f32>,
}

pub fn BufferRequest(screen_rect: Rect<uint>, page_rect: Rect<f32>) -> BufferRequest {
BufferRequest {
screen_rect: screen_rect,
page_rect: page_rect,
}
}

#[deriving(Clone)]
pub struct RenderChan {
chan: SharedChan<Msg>,
@@ -145,7 +161,7 @@ impl<C: RenderListener + Send> RenderTask<C> {
}
}

fn render(&mut self, tiles: ~[(Rect<uint>, Rect<f32>)], scale: f32) {
fn render(&mut self, tiles: ~[BufferRequest], scale: f32) {
let render_layer;
match self.render_layer {
Some(ref r_layer) => {
@@ -162,18 +178,17 @@ impl<C: RenderListener + Send> RenderTask<C> {

// Divide up the layer into tiles.
do time::profile(time::RenderingPrepBuffCategory, self.profiler_chan.clone()) {
for tiles.each |tile_rects| {
let (screen_rect, page_rect) = *tile_rects;
let width = screen_rect.size.width;
let height = screen_rect.size.height;
for tiles.each |tile| {
let width = tile.screen_rect.size.width;
let height = tile.screen_rect.size.height;

let buffer = LayerBuffer {
draw_target: DrawTarget::new_with_fbo(self.opts.render_backend,
self.share_gl_context,
Size2D(width as i32, height as i32),
B8G8R8A8),
rect: page_rect,
screen_pos: screen_rect,
rect: tile.page_rect,
screen_pos: tile.screen_rect,
resolution: scale,
stride: (width * 4) as uint
};
@@ -14,7 +14,7 @@ use servo_msg::compositor_msg::{RenderListener, LayerBuffer, LayerBufferSet, Ren
use servo_msg::compositor_msg::{ReadyState, ScriptListener};
use servo_msg::constellation_msg::{CompositorAck, ConstellationChan};
use servo_msg::constellation_msg;
use gfx::render_task::{RenderChan, ReRenderMsg};
use gfx::render_task::{RenderChan, ReRenderMsg, BufferRequest};

use azure::azure_hl::{DataSourceSurface, DrawTarget, SourceSurfaceMethods, current_gl_context};
use azure::azure::AzGLContext;
@@ -261,7 +261,7 @@ impl CompositorTask {
// TODO: clamp tiles to page bounds
// TODO: add null buffer/checkerboard tile to stop a flood of requests
debug!("requesting tile: (%?, %?): %?", x, y, tile_size);
tile_request.push((tile_screen_pos, tile_page_pos));
tile_request.push(BufferRequest(tile_screen_pos, tile_page_pos));

x += tile_size;
}
@@ -517,6 +517,9 @@ impl CompositorTask {

root_layer.common.set_transform(scroll_transform);

// FIXME: ask_for_tiles() should be called here, but currently this sends a flood of requests
// to the renderer, which slows the application dramatically. Instead, ask_for_tiles() is only
// called on a click event.
// ask_for_tiles();

This comment has been minimized.

@metajack

metajack Jul 3, 2013

Contributor

Why is this commented out?


*recomposite = true;
@@ -557,6 +560,10 @@ impl CompositorTask {
window_size.height as f32 / -2f32,
0.0);
root_layer.common.set_transform(zoom_transform);

// FIXME: ask_for_tiles() should be called here, but currently this sends a flood of requests
// to the renderer, which slows the application dramatically. Instead, ask_for_tiles() is only
// called on a click event.
// ask_for_tiles();

This comment has been minimized.

@metajack

metajack Jul 3, 2013

Contributor

Why is this commented out?


*recomposite = true;
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.