зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #2939 - Reftest harness explicitly knows whether to run servo in cpu or gpu mode (from glennw:reftest-mode)
Source-Repo: https://github.com/servo/servo Source-Revision: c2a8baff46b954003f3c5136de295ddfe0d1f079
This commit is contained in:
Родитель
7a5d849a38
Коммит
fa1bb312e7
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
Загрузка…
Ссылка в новой задаче