Reftest harness explicitly knows whether to run servo in cpu or

gpu mode. This will make it easier to support different expected
behaviours depending on the rendering mode.
This commit is contained in:
Glenn Watson 2014-07-28 08:42:14 +10:00
parent 4b516c184d
commit 6cc44bcc6d
2 changed files with 25 additions and 8 deletions

View file

@ -82,12 +82,12 @@ check-servo: $(foreach lib_crate,$(SERVO_LIB_CRATES),check-servo-$(lib_crate)) s
.PHONY: check-ref-cpu .PHONY: check-ref-cpu
check-ref-cpu: reftest check-ref-cpu: reftest
@$(call E, check: reftests with CPU rendering) @$(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 .PHONY: check-ref-gpu
check-ref-gpu: reftest check-ref-gpu: reftest
@$(call E, check: reftests with GPU rendering) @$(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 .PHONY: check-ref
check-ref: check-ref-cpu check-ref-gpu check-ref: check-ref-cpu check-ref-gpu

View file

@ -20,6 +20,11 @@ use test::{AutoColor, DynTestName, DynTestFn, TestDesc, TestOpts, TestDescAndFn}
use test::run_tests_console; use test::run_tests_console;
use regex::Regex; use regex::Regex;
enum RenderMode {
CpuRendering,
GpuRendering,
}
fn main() { fn main() {
let args = os::args(); let args = os::args();
let mut parts = args.tail().split(|e| "--" == e.as_slice()); 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 harness_args = parts.next().unwrap(); // .split() is never empty
let servo_args = parts.next().unwrap_or(&[]); let servo_args = parts.next().unwrap_or(&[]);
let (manifest, testname) = match harness_args { let (render_mode_string, manifest, testname) = match harness_args {
[] => fail!("error: at least one reftest list must be given"), [] | [_] => fail!("USAGE: cpu|gpu manifest [testname regex]"),
[ref manifest] => (manifest, None), [ref render_mode_string, ref manifest] => (render_mode_string, manifest, None),
[ref manifest, ref testname, ..] => (manifest, Some(Regex::new(testname.as_slice()).unwrap())), [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 { let test_opts = TestOpts {
filter: testname, filter: testname,
run_ignored: false, run_ignored: false,
@ -67,9 +78,10 @@ struct Reftest {
files: [String, ..2], files: [String, ..2],
id: uint, id: uint,
servo_args: Vec<String>, servo_args: Vec<String>,
render_mode: RenderMode,
} }
fn parse_lists(file: &String, servo_args: &[String]) -> Vec<TestDescAndFn> { fn parse_lists(file: &String, servo_args: &[String], render_mode: RenderMode) -> Vec<TestDescAndFn> {
let mut tests = Vec::new(); let mut tests = Vec::new();
let mut next_id = 0; let mut next_id = 0;
let file_path = Path::new(file.clone()); let file_path = Path::new(file.clone());
@ -109,6 +121,7 @@ name: parts.get(1).to_string().append(" / ").append(*parts.get(2)),
kind: kind, kind: kind,
files: [file_left, file_right], files: [file_left, file_right],
id: next_id, id: next_id,
render_mode: render_mode,
servo_args: servo_args.iter().map(|x| x.clone()).collect(), 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 { fn capture(reftest: &Reftest, side: uint) -> png::Image {
let filename = format!("/tmp/servo-reftest-{:06u}-{:u}.png", reftest.id, side); let filename = format!("/tmp/servo-reftest-{:06u}-{:u}.png", reftest.id, side);
let mut args = reftest.servo_args.clone(); 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())); 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() { let retval = match Command::new("./servo").args(args.as_slice()).status() {