diff --git a/components/canvas/canvas_paint_task.rs b/components/canvas/canvas_paint_task.rs index 3cc7abebe3e..c3e8b0fa35f 100644 --- a/components/canvas/canvas_paint_task.rs +++ b/components/canvas/canvas_paint_task.rs @@ -14,6 +14,7 @@ use geom::size::Size2D; use layers::platform::surface::NativeSurface; use gfx_traits::color; use num::ToPrimitive; +use util::opts; use util::task::spawn_named; use util::vec::byte_swap; @@ -174,8 +175,14 @@ struct CanvasPaintState<'a> { impl<'a> CanvasPaintState<'a> { fn new() -> CanvasPaintState<'a> { + let antialias = if opts::get().enable_canvas_antialiasing { + AntialiasMode::Default + } else { + AntialiasMode::None + }; + CanvasPaintState { - draw_options: DrawOptions::default(), + draw_options: DrawOptions::new(1.0, CompositionOp::Over, antialias), fill_style: Pattern::Color(ColorPattern::new(color::black())), stroke_style: Pattern::Color(ColorPattern::new(color::black())), stroke_opts: StrokeOptions::new(1.0, JoinStyle::MiterOrBevel, CapStyle::Butt, 10.0, &[]), diff --git a/components/util/opts.rs b/components/util/opts.rs index 0b19f815596..598d27fbd0b 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -99,6 +99,10 @@ pub struct Opts { /// font for layout tests. pub enable_text_antialiasing: bool, + /// If set with --disable-canvas-aa, disable antialiasing on the HTML canvas element. + /// Like --disable-text-aa, this is useful for reftests where pixel perfect results are required. + pub enable_canvas_antialiasing: bool, + /// True if each step of layout is traced to an external JSON file /// for debugging purposes. Settings this implies sequential layout /// and paint. @@ -220,6 +224,7 @@ pub fn default_opts() -> Opts { show_debug_parallel_layout: false, paint_flashing: false, enable_text_antialiasing: false, + enable_canvas_antialiasing: false, trace_layout: false, devtools_port: None, webdriver_port: None, @@ -398,6 +403,7 @@ pub fn from_cmdline_args(args: &[String]) -> bool { show_debug_parallel_layout: debug_options.contains(&"show-parallel-layout"), paint_flashing: debug_options.contains(&"paint-flashing"), enable_text_antialiasing: !debug_options.contains(&"disable-text-aa"), + enable_canvas_antialiasing: !debug_options.contains(&"disable-canvas-aa"), dump_flow_tree: debug_options.contains(&"dump-flow-tree"), dump_display_list: debug_options.contains(&"dump-display-list"), dump_display_list_optimized: debug_options.contains(&"dump-display-list-optimized"), diff --git a/ports/cef/core.rs b/ports/cef/core.rs index 04a88991838..3f929b84e51 100644 --- a/ports/cef/core.rs +++ b/ports/cef/core.rs @@ -73,6 +73,7 @@ pub extern "C" fn cef_initialize(args: *const cef_main_args_t, temp_opts.headless = false; temp_opts.hard_fail = false; temp_opts.enable_text_antialiasing = true; + temp_opts.enable_canvas_antialiasing = true; temp_opts.resources_path = None; temp_opts.url = None; opts::set(temp_opts); diff --git a/tests/reftest.rs b/tests/reftest.rs index b0592bb2e8e..9aaf8e68caf 100644 --- a/tests/reftest.rs +++ b/tests/reftest.rs @@ -250,9 +250,9 @@ fn capture(reftest: &Reftest, side: usize) -> (u32, u32, Vec) { .stdout(Stdio::null()) .stderr(Stdio::null()) .args(&reftest.servo_args[..]) - // Allows pixel perfect rendering of Ahem font for reftests. + // Allows pixel perfect rendering of Ahem font and the HTML canvas for reftests. .arg("-Z") - .arg("disable-text-aa") + .arg("disable-text-aa,disable-canvas-aa") .args(&["-f", "-o"]) .arg(&png_filename) .arg(&{ diff --git a/tests/wpt/harness/wptrunner/executors/executorservo.py b/tests/wpt/harness/wptrunner/executors/executorservo.py index 9de859b37e4..3dba844dc32 100644 --- a/tests/wpt/harness/wptrunner/executors/executorservo.py +++ b/tests/wpt/harness/wptrunner/executors/executorservo.py @@ -186,7 +186,7 @@ class ServoRefTestExecutor(ProcessTestExecutor): with TempFilename(self.tempdir) as output_path: self.command = [self.binary, "--cpu", "--hard-fail", "--exit", - "-Z", "disable-text-aa", "--output=%s" % output_path, + "-Z", "disable-text-aa,disable-canvas-aa", "--output=%s" % output_path, full_url] env = os.environ.copy()