From 54a71a7d0c3f466034376ba63fca239a827822e0 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 15 Nov 2012 20:47:27 -0800 Subject: [PATCH] gfx: Allow tile size to be set on the command line --- src/servo-gfx/opts.rs | 14 +++++++++++--- src/servo-gfx/render_layers.rs | 12 ++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/servo-gfx/opts.rs b/src/servo-gfx/opts.rs index f6b2567c6e7..477baf04927 100644 --- a/src/servo-gfx/opts.rs +++ b/src/servo-gfx/opts.rs @@ -9,6 +9,7 @@ pub struct Opts { render_mode: RenderMode, render_backend: BackendType, n_render_threads: uint, + tile_size: uint, } pub enum RenderMode { @@ -23,9 +24,10 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { let args = args.tail(); let opts = ~[ - getopts::optopt(~"o"), - getopts::optopt(~"r"), - getopts::optopt(~"t"), + getopts::optopt(~"o"), // output file + getopts::optopt(~"r"), // rendering backend + getopts::optopt(~"s"), // size of tiles + getopts::optopt(~"t"), // threads to render with ]; let opt_match = match getopts::getopts(args, opts) { @@ -63,6 +65,11 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { None => CairoBackend }; + let tile_size: uint = match getopts::opt_maybe_str(copy opt_match, ~"s") { + Some(move tile_size_str) => from_str::from_str(tile_size_str).get(), + None => 512, + }; + let n_render_threads: uint = match getopts::opt_maybe_str(move opt_match, ~"t") { Some(move n_render_threads_str) => from_str::from_str(n_render_threads_str).get(), None => 1, // FIXME: Number of cores. @@ -73,5 +80,6 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { render_mode: move render_mode, render_backend: move render_backend, n_render_threads: n_render_threads, + tile_size: tile_size, } } diff --git a/src/servo-gfx/render_layers.rs b/src/servo-gfx/render_layers.rs index 82cf327c1d0..577db98bdea 100644 --- a/src/servo-gfx/render_layers.rs +++ b/src/servo-gfx/render_layers.rs @@ -14,8 +14,6 @@ use geom::size::Size2D; use std::arc::ARC; use std::arc; -const TILE_SIZE: uint = 512; - pub struct RenderLayer { display_list: DisplayList, size: Size2D @@ -33,6 +31,8 @@ pub fn render_layers(layer_ref: *RenderLayer, buffer_set: LayerBufferSet, opts: &Opts, f: RenderFn) -> LayerBufferSet { + let tile_size = opts.tile_size; + let mut buffers = match move buffer_set { LayerBufferSet { buffers: move b } => move b }; // FIXME: Try not to create a new array here. @@ -46,8 +46,8 @@ pub fn render_layers(layer_ref: *RenderLayer, let mut x = 0; while x < layer.size.width { // Figure out the dimension of this tile. - let right = uint::min(x + TILE_SIZE, layer.size.width); - let bottom = uint::min(y + TILE_SIZE, layer.size.height); + let right = uint::min(x + tile_size, layer.size.width); + let bottom = uint::min(y + tile_size, layer.size.height); let width = right - x; let height = bottom - y; @@ -119,9 +119,9 @@ pub fn render_layers(layer_ref: *RenderLayer, // Enqueue the port. new_buffer_ports.push(move new_buffer_port); - x += TILE_SIZE; + x += tile_size; } - y += TILE_SIZE; + y += tile_size; } }