diff --git a/servo/mk/check.mk b/servo/mk/check.mk index d294ebc215f0..3644ed2d05dd 100644 --- a/servo/mk/check.mk +++ b/servo/mk/check.mk @@ -82,12 +82,12 @@ check-servo: $(foreach lib_crate,$(SERVO_LIB_CRATES),check-servo-$(lib_crate)) s .PHONY: check-ref-cpu check-ref-cpu: reftest @$(call E, check: reftests with CPU rendering) - $(Q)./reftest $(S)src/test/ref/basic.list $(TESTNAME) -- -c + $(Q)./reftest cpu $(S)src/test/ref/basic.list $(TESTNAME) .PHONY: check-ref-gpu check-ref-gpu: reftest @$(call E, check: reftests with GPU rendering) - $(Q)./reftest $(S)src/test/ref/basic.list $(TESTNAME) + $(Q)./reftest gpu $(S)src/test/ref/basic.list $(TESTNAME) .PHONY: check-ref check-ref: check-ref-cpu check-ref-gpu diff --git a/servo/src/test/harness/reftest/reftest.rs b/servo/src/test/harness/reftest/reftest.rs index eea2d9a5c22b..71cd30c715e3 100644 --- a/servo/src/test/harness/reftest/reftest.rs +++ b/servo/src/test/harness/reftest/reftest.rs @@ -20,6 +20,11 @@ use test::{AutoColor, DynTestName, DynTestFn, TestDesc, TestOpts, TestDescAndFn} use test::run_tests_console; use regex::Regex; +enum RenderMode { + CpuRendering, + GpuRendering, +} + fn main() { let args = os::args(); let mut parts = args.tail().split(|e| "--" == e.as_slice()); @@ -27,13 +32,19 @@ fn main() { let harness_args = parts.next().unwrap(); // .split() is never empty let servo_args = parts.next().unwrap_or(&[]); - let (manifest, testname) = match harness_args { - [] => fail!("error: at least one reftest list must be given"), - [ref manifest] => (manifest, None), - [ref manifest, ref testname, ..] => (manifest, Some(Regex::new(testname.as_slice()).unwrap())), + let (render_mode_string, manifest, testname) = match harness_args { + [] | [_] => fail!("USAGE: cpu|gpu manifest [testname regex]"), + [ref render_mode_string, ref manifest] => (render_mode_string, manifest, None), + [ref render_mode_string, ref manifest, ref testname, ..] => (render_mode_string, manifest, Some(Regex::new(testname.as_slice()).unwrap())), }; - let tests = parse_lists(manifest, servo_args); + let render_mode = match render_mode_string.as_slice() { + "cpu" => CpuRendering, + "gpu" => GpuRendering, + _ => fail!("First argument must specify cpu or gpu as rendering mode") + }; + + let tests = parse_lists(manifest, servo_args, render_mode); let test_opts = TestOpts { filter: testname, run_ignored: false, @@ -67,9 +78,10 @@ struct Reftest { files: [String, ..2], id: uint, servo_args: Vec, + render_mode: RenderMode, } -fn parse_lists(file: &String, servo_args: &[String]) -> Vec { +fn parse_lists(file: &String, servo_args: &[String], render_mode: RenderMode) -> Vec { let mut tests = Vec::new(); let mut next_id = 0; let file_path = Path::new(file.clone()); @@ -109,6 +121,7 @@ name: parts.get(1).to_string().append(" / ").append(*parts.get(2)), kind: kind, files: [file_left, file_right], id: next_id, + render_mode: render_mode, servo_args: servo_args.iter().map(|x| x.clone()).collect(), }; @@ -136,6 +149,10 @@ fn make_test(reftest: Reftest) -> TestDescAndFn { fn capture(reftest: &Reftest, side: uint) -> png::Image { let filename = format!("/tmp/servo-reftest-{:06u}-{:u}.png", reftest.id, side); let mut args = reftest.servo_args.clone(); + match reftest.render_mode { + CpuRendering => args.push("-c".to_string()), + _ => {} // GPU rendering is the default + } args.push_all_move(vec!("-f".to_string(), "-o".to_string(), filename.clone(), reftest.files[side].clone())); let retval = match Command::new("./servo").args(args.as_slice()).status() {