Batch replies in RenderTask::render

This commit is contained in:
Cameron Zwarich 2014-07-10 01:31:48 -07:00
parent ec8f71d4b5
commit a832acc4c8

View file

@ -245,14 +245,20 @@ impl<C:RenderListener + Send> RenderTask<C> {
continue; continue;
} }
let mut replies = Vec::new();
for ReRenderRequest { buffer_requests, scale, layer_id, epoch } for ReRenderRequest { buffer_requests, scale, layer_id, epoch }
in requests.move_iter() { in requests.move_iter() {
if self.epoch == epoch { if self.epoch == epoch {
self.render(buffer_requests, scale, layer_id); self.render(&mut replies, buffer_requests, scale, layer_id);
} else { } else {
debug!("renderer epoch mismatch: {:?} != {:?}", self.epoch, epoch); debug!("renderer epoch mismatch: {:?} != {:?}", self.epoch, epoch);
} }
} }
debug!("render_task: returning surfaces");
for (layer_id, layer_buffer_set) in replies.move_iter() {
self.compositor.paint(self.id, layer_id, layer_buffer_set, self.epoch);
}
} }
UnusedBufferMsg(unused_buffers) => { UnusedBufferMsg(unused_buffers) => {
for buffer in unused_buffers.move_iter().rev() { for buffer in unused_buffers.move_iter().rev() {
@ -289,7 +295,11 @@ impl<C:RenderListener + Send> RenderTask<C> {
/// ///
/// FIXME(pcwalton): We will probably want to eventually send all layers belonging to a page in /// FIXME(pcwalton): We will probably want to eventually send all layers belonging to a page in
/// one transaction, to avoid the user seeing inconsistent states. /// one transaction, to avoid the user seeing inconsistent states.
fn render(&mut self, tiles: Vec<BufferRequest>, scale: f32, layer_id: LayerId) { fn render(&mut self,
replies: &mut Vec<(LayerId, Box<LayerBufferSet>)>,
tiles: Vec<BufferRequest>,
scale: f32,
layer_id: LayerId) {
time::profile(time::RenderingCategory, self.time_profiler_chan.clone(), || { time::profile(time::RenderingCategory, self.time_profiler_chan.clone(), || {
// FIXME: Try not to create a new array here. // FIXME: Try not to create a new array here.
let mut new_buffers = vec!(); let mut new_buffers = vec!();
@ -434,8 +444,7 @@ impl<C:RenderListener + Send> RenderTask<C> {
buffers: new_buffers, buffers: new_buffers,
}; };
debug!("render_task: returning surface"); replies.push((render_layer.id, layer_buffer_set));
self.compositor.paint(self.id, render_layer.id, layer_buffer_set, self.epoch);
self.compositor.set_render_state(IdleRenderState); self.compositor.set_render_state(IdleRenderState);
}) })
} }