aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2014-07-28 07:56:18 +0530
committerManish Goregaokar <manishsmail@gmail.com>2014-07-28 07:56:18 +0530
commitc2a8baff46b954003f3c5136de295ddfe0d1f079 (patch)
treef6213d6f6bace6e44be035ad957600aee360707d
parent4b516c184dd07d9f53f415e7ef775a3c3d3b94a3 (diff)
parent6cc44bcc6d2500623421e4669b941ecd163178d1 (diff)
downloadservo-c2a8baff46b954003f3c5136de295ddfe0d1f079.tar.gz
servo-c2a8baff46b954003f3c5136de295ddfe0d1f079.zip
Merge pull request #2939 from glennw/reftest-mode
Reftest harness explicitly knows whether to run servo in cpu or gpu mode.
-rw-r--r--mk/check.mk4
-rw-r--r--src/test/harness/reftest/reftest.rs29
2 files changed, 25 insertions, 8 deletions
diff --git a/mk/check.mk b/mk/check.mk
index d294ebc215f..3644ed2d05d 100644
--- a/mk/check.mk
+++ b/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/src/test/harness/reftest/reftest.rs b/src/test/harness/reftest/reftest.rs
index eea2d9a5c22..71cd30c715e 100644
--- a/src/test/harness/reftest/reftest.rs
+++ b/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<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 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() {