mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
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:
parent
4b516c184d
commit
6cc44bcc6d
2 changed files with 25 additions and 8 deletions
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue