prefs: Move some DebugOptions to Preferences and clean up (#34998)

- Move options configuring antialiasing and WebRender shader precache to
  the `Preferences` to group them with other related WebRender and DOM
  settings.
- Remove the option to disable antialiasing for canvases. This was
  unused.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-01-17 12:47:47 +01:00 committed by GitHub
parent e1b4649faf
commit 2d09552234
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 24 additions and 81 deletions

View file

@ -25,7 +25,6 @@ use webrender_api::units::{DeviceIntSize, RectExt as RectExt_};
use webrender_api::{ImageDescriptor, ImageDescriptorFlags, ImageFormat, ImageKey}; use webrender_api::{ImageDescriptor, ImageDescriptorFlags, ImageFormat, ImageKey};
use webrender_traits::{CrossProcessCompositorApi, ImageUpdate, SerializableImageData}; use webrender_traits::{CrossProcessCompositorApi, ImageUpdate, SerializableImageData};
use crate::canvas_paint_thread::AntialiasMode;
use crate::raqote_backend::Repetition; use crate::raqote_backend::Repetition;
/// The canvas data stores a state machine for the current status of /// The canvas data stores a state machine for the current status of
@ -445,7 +444,6 @@ impl<'a> CanvasData<'a> {
pub fn new( pub fn new(
size: Size2D<u64>, size: Size2D<u64>,
compositor_api: CrossProcessCompositorApi, compositor_api: CrossProcessCompositorApi,
antialias: AntialiasMode,
font_context: Arc<FontContext>, font_context: Arc<FontContext>,
) -> CanvasData<'a> { ) -> CanvasData<'a> {
let backend = create_backend(); let backend = create_backend();
@ -454,7 +452,7 @@ impl<'a> CanvasData<'a> {
backend, backend,
drawtarget: draw_target, drawtarget: draw_target,
path_state: None, path_state: None,
state: CanvasPaintState::new(antialias), state: CanvasPaintState::default(),
saved_states: vec![], saved_states: vec![],
compositor_api, compositor_api,
image_key: None, image_key: None,

View file

@ -20,11 +20,6 @@ use webrender_traits::CrossProcessCompositorApi;
use crate::canvas_data::*; use crate::canvas_data::*;
pub enum AntialiasMode {
Default,
None,
}
pub struct CanvasPaintThread<'a> { pub struct CanvasPaintThread<'a> {
canvases: HashMap<CanvasId, CanvasData<'a>>, canvases: HashMap<CanvasId, CanvasData<'a>>,
next_canvas_id: CanvasId, next_canvas_id: CanvasId,
@ -95,12 +90,8 @@ impl<'a> CanvasPaintThread<'a> {
} }
recv(create_receiver) -> msg => { recv(create_receiver) -> msg => {
match msg { match msg {
Ok(ConstellationCanvasMsg::Create { Ok(ConstellationCanvasMsg::Create { id_sender: creator, size }) => {
id_sender: creator, let canvas_id = canvas_paint_thread.create_canvas(size);
size,
antialias
}) => {
let canvas_id = canvas_paint_thread.create_canvas(size, antialias);
creator.send(canvas_id).unwrap(); creator.send(canvas_id).unwrap();
}, },
Ok(ConstellationCanvasMsg::Exit) => break, Ok(ConstellationCanvasMsg::Exit) => break,
@ -118,22 +109,12 @@ impl<'a> CanvasPaintThread<'a> {
(create_sender, ipc_sender) (create_sender, ipc_sender)
} }
pub fn create_canvas(&mut self, size: Size2D<u64>, antialias: bool) -> CanvasId { pub fn create_canvas(&mut self, size: Size2D<u64>) -> CanvasId {
let antialias = if antialias {
AntialiasMode::Default
} else {
AntialiasMode::None
};
let canvas_id = self.next_canvas_id; let canvas_id = self.next_canvas_id;
self.next_canvas_id.0 += 1; self.next_canvas_id.0 += 1;
let canvas_data = CanvasData::new( let canvas_data =
size, CanvasData::new(size, self.compositor_api.clone(), self.font_context.clone());
self.compositor_api.clone(),
antialias,
self.font_context.clone(),
);
self.canvases.insert(canvas_id, canvas_data); self.canvases.insert(canvas_id, canvas_data);
canvas_id canvas_id

View file

@ -21,7 +21,6 @@ use crate::canvas_data::{
self, Backend, CanvasPaintState, Color, CompositionOp, DrawOptions, Filter, GenericDrawTarget, self, Backend, CanvasPaintState, Color, CompositionOp, DrawOptions, Filter, GenericDrawTarget,
GenericPathBuilder, GradientStop, GradientStops, Path, SourceSurface, StrokeOptions, TextRun, GenericPathBuilder, GradientStop, GradientStops, Path, SourceSurface, StrokeOptions, TextRun,
}; };
use crate::canvas_paint_thread::AntialiasMode;
thread_local! { thread_local! {
/// The shared font cache used by all canvases that render on a thread. It would be nicer /// The shared font cache used by all canvases that render on a thread. It would be nicer
@ -85,12 +84,12 @@ impl Backend for RaqoteBackend {
} }
fn recreate_paint_state<'a>(&self, _state: &CanvasPaintState<'a>) -> CanvasPaintState<'a> { fn recreate_paint_state<'a>(&self, _state: &CanvasPaintState<'a>) -> CanvasPaintState<'a> {
CanvasPaintState::new(AntialiasMode::Default) CanvasPaintState::default()
} }
} }
impl<'a> CanvasPaintState<'a> { impl Default for CanvasPaintState<'_> {
pub fn new(_antialias: AntialiasMode) -> CanvasPaintState<'a> { fn default() -> Self {
let pattern = Pattern::Color(255, 0, 0, 0); let pattern = Pattern::Color(255, 0, 0, 0);
CanvasPaintState { CanvasPaintState {
draw_options: DrawOptions::Raqote(raqote::DrawOptions::new()), draw_options: DrawOptions::Raqote(raqote::DrawOptions::new()),

View file

@ -121,20 +121,6 @@ pub struct DebugOptions {
/// List all the debug options. /// List all the debug options.
pub help: bool, pub help: bool,
/// If set with `disable-text-aa`, disable antialiasing on fonts. This is
/// primarily useful for reftests where pixel perfect results are required
/// when using fonts such as the Ahem font for layout tests.
pub disable_text_antialiasing: bool,
/// Disable subpixel antialiasing of rendered text.
pub disable_subpixel_text_antialiasing: bool,
/// Disable antialiasing of rendered text on the HTML canvas element.
/// 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 disable_canvas_antialiasing: bool,
/// Print the DOM after each restyle. /// Print the DOM after each restyle.
pub dump_style_tree: bool, pub dump_style_tree: bool,
@ -180,11 +166,6 @@ pub struct DebugOptions {
/// Show webrender profiling stats on screen. /// Show webrender profiling stats on screen.
pub webrender_stats: bool, pub webrender_stats: bool,
/// True to compile all webrender shaders at init time. This is mostly
/// useful when modifying the shaders, to ensure they all compile
/// after each change is made.
pub precache_shaders: bool,
/// True to use OS native signposting facilities. This makes profiling events (script activity, /// True to use OS native signposting facilities. This makes profiling events (script activity,
/// reflow, compositing, etc.) appear in Instruments.app on macOS. /// reflow, compositing, etc.) appear in Instruments.app on macOS.
pub signpost: bool, pub signpost: bool,
@ -196,17 +177,13 @@ impl DebugOptions {
match option { match option {
"help" => self.help = true, "help" => self.help = true,
"convert-mouse-to-touch" => self.convert_mouse_to_touch = true, "convert-mouse-to-touch" => self.convert_mouse_to_touch = true,
"disable-canvas-aa" => self.disable_canvas_antialiasing = true,
"disable-share-style-cache" => self.disable_share_style_cache = true, "disable-share-style-cache" => self.disable_share_style_cache = true,
"disable-subpixel-aa" => self.disable_subpixel_text_antialiasing = true,
"disable-text-aa" => self.disable_text_antialiasing = true,
"dump-display-list" => self.dump_display_list = true, "dump-display-list" => self.dump_display_list = true,
"dump-stacking-context-tree" => self.dump_stacking_context_tree = true, "dump-stacking-context-tree" => self.dump_stacking_context_tree = true,
"dump-flow-tree" => self.dump_flow_tree = true, "dump-flow-tree" => self.dump_flow_tree = true,
"dump-rule-tree" => self.dump_rule_tree = true, "dump-rule-tree" => self.dump_rule_tree = true,
"dump-style-tree" => self.dump_style_tree = true, "dump-style-tree" => self.dump_style_tree = true,
"gc-profile" => self.gc_profile = true, "gc-profile" => self.gc_profile = true,
"precache-shaders" => self.precache_shaders = true,
"profile-script-events" => self.profile_script_events = true, "profile-script-events" => self.profile_script_events = true,
"relayout-event" => self.relayout_event = true, "relayout-event" => self.relayout_event = true,
"replace-surrogates" => self.replace_surrogates = true, "replace-surrogates" => self.replace_surrogates = true,

View file

@ -136,6 +136,13 @@ pub struct Preferences {
pub dom_worklet_blockingsleep: bool, pub dom_worklet_blockingsleep: bool,
pub dom_worklet_testing_enabled: bool, pub dom_worklet_testing_enabled: bool,
pub dom_worklet_timeout_ms: i64, pub dom_worklet_timeout_ms: i64,
/// True to compile all WebRender shaders when Servo initializes. This is mostly
/// useful when modifying the shaders, to ensure they all compile after each change is
/// made.
pub gfx_precache_shaders: bool,
/// Whether or not antialiasing is enabled for text rendering.
pub gfx_text_antialiasing_enabled: bool,
/// Whether or not subpixel antialiasing is enabled for text rendering.
pub gfx_subpixel_text_antialiasing_enabled: bool, pub gfx_subpixel_text_antialiasing_enabled: bool,
pub gfx_texture_swizzling_enabled: bool, pub gfx_texture_swizzling_enabled: bool,
pub js_asmjs_enabled: bool, pub js_asmjs_enabled: bool,
@ -305,6 +312,8 @@ impl Preferences {
fonts_monospace: String::new(), fonts_monospace: String::new(),
fonts_sans_serif: String::new(), fonts_sans_serif: String::new(),
fonts_serif: String::new(), fonts_serif: String::new(),
gfx_precache_shaders: true,
gfx_text_antialiasing_enabled: true,
gfx_subpixel_text_antialiasing_enabled: true, gfx_subpixel_text_antialiasing_enabled: true,
gfx_texture_swizzling_enabled: true, gfx_texture_swizzling_enabled: true,
js_asmjs_enabled: true, js_asmjs_enabled: true,

View file

@ -463,12 +463,6 @@ pub struct Constellation<STF, SWF> {
/// If True, exits on thread failure instead of displaying about:failure /// If True, exits on thread failure instead of displaying about:failure
hard_fail: bool, hard_fail: 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.
enable_canvas_antialiasing: bool,
/// Entry point to create and get channels to a GLPlayerThread. /// Entry point to create and get channels to a GLPlayerThread.
glplayer_threads: Option<GLPlayerThreads>, glplayer_threads: Option<GLPlayerThreads>,
@ -622,7 +616,6 @@ where
random_pipeline_closure_probability: Option<f32>, random_pipeline_closure_probability: Option<f32>,
random_pipeline_closure_seed: Option<usize>, random_pipeline_closure_seed: Option<usize>,
hard_fail: bool, hard_fail: bool,
enable_canvas_antialiasing: bool,
canvas_create_sender: Sender<ConstellationCanvasMsg>, canvas_create_sender: Sender<ConstellationCanvasMsg>,
canvas_ipc_sender: IpcSender<CanvasMsg>, canvas_ipc_sender: IpcSender<CanvasMsg>,
) -> Sender<FromCompositorMsg> { ) -> Sender<FromCompositorMsg> {
@ -762,7 +755,6 @@ where
pending_approval_navigations: HashMap::new(), pending_approval_navigations: HashMap::new(),
pressed_mouse_buttons: 0, pressed_mouse_buttons: 0,
hard_fail, hard_fail,
enable_canvas_antialiasing,
glplayer_threads: state.glplayer_threads, glplayer_threads: state.glplayer_threads,
player_context: state.player_context, player_context: state.player_context,
active_media_session: None, active_media_session: None,
@ -4551,7 +4543,6 @@ where
if let Err(e) = self.canvas_sender.send(ConstellationCanvasMsg::Create { if let Err(e) = self.canvas_sender.send(ConstellationCanvasMsg::Create {
id_sender: canvas_id_sender, id_sender: canvas_id_sender,
size, size,
antialias: self.enable_canvas_antialiasing,
}) { }) {
return warn!("Create canvas paint thread failed ({})", e); return warn!("Create canvas paint thread failed ({})", e);
} }

View file

@ -374,15 +374,14 @@ where
// See: https://github.com/servo/servo/issues/31726 // See: https://github.com/servo/servo/issues/31726
use_optimized_shaders: true, use_optimized_shaders: true,
resource_override_path: opts.shaders_dir.clone(), resource_override_path: opts.shaders_dir.clone(),
enable_aa: !opts.debug.disable_text_antialiasing,
debug_flags, debug_flags,
precache_flags: if opts.debug.precache_shaders { precache_flags: if pref!(gfx_precache_shaders) {
ShaderPrecacheFlags::FULL_COMPILE ShaderPrecacheFlags::FULL_COMPILE
} else { } else {
ShaderPrecacheFlags::empty() ShaderPrecacheFlags::empty()
}, },
enable_subpixel_aa: pref!(gfx_subpixel_text_antialiasing_enabled) && enable_aa: pref!(gfx_text_antialiasing_enabled),
!opts.debug.disable_subpixel_text_antialiasing, enable_subpixel_aa: pref!(gfx_subpixel_text_antialiasing_enabled),
allow_texture_swizzling: pref!(gfx_texture_swizzling_enabled), allow_texture_swizzling: pref!(gfx_texture_swizzling_enabled),
clear_color, clear_color,
upload_method, upload_method,
@ -1150,7 +1149,6 @@ fn create_constellation(
opts.random_pipeline_closure_probability, opts.random_pipeline_closure_probability,
opts.random_pipeline_closure_seed, opts.random_pipeline_closure_seed,
opts.hard_fail, opts.hard_fail,
!opts.debug.disable_canvas_antialiasing,
canvas_create_sender, canvas_create_sender,
canvas_ipc_sender, canvas_ipc_sender,
) )

View file

@ -19,7 +19,6 @@ pub enum ConstellationCanvasMsg {
Create { Create {
id_sender: Sender<CanvasId>, id_sender: Sender<CanvasId>,
size: Size2D<u64>, size: Size2D<u64>,
antialias: bool,
}, },
Exit, Exit,
} }

View file

@ -611,19 +611,10 @@ fn print_debug_options_usage(app: &str) {
"convert-mouse-to-touch", "convert-mouse-to-touch",
"Send touch events instead of mouse events", "Send touch events instead of mouse events",
); );
print_option(
"disable-canvas-aa",
"Disable antialiasing on the HTML canvas element.",
);
print_option( print_option(
"disable-share-style-cache", "disable-share-style-cache",
"Disable the style sharing cache.", "Disable the style sharing cache.",
); );
print_option(
"disable-subpixel-aa",
"Disable subpixel text antialiasing overriding preference.",
);
print_option("disable-text-aa", "Disable antialiasing of rendered text.");
print_option( print_option(
"dump-stacking-context-tree", "dump-stacking-context-tree",
"Print the stacking context tree after each layout.", "Print the stacking context tree after each layout.",
@ -658,7 +649,6 @@ fn print_debug_options_usage(app: &str) {
"parallel-display-list-building", "parallel-display-list-building",
"Build display lists in parallel.", "Build display lists in parallel.",
); );
print_option("precache-shaders", "Compile all shaders during init.");
print_option( print_option(
"profile-script-events", "profile-script-events",
"Enable profiling of script-related events.", "Enable profiling of script-related events.",

View file

@ -1,4 +1,5 @@
{ {
"dom_webxr_test": true, "dom_webxr_test": true,
"gfx_text_antialiasing_enabled": false,
"network_tls_ignore_unexpected_eof": true "network_tls_ignore_unexpected_eof": true
} }

View file

@ -503873,7 +503873,7 @@
[] []
], ],
"executorservo.py": [ "executorservo.py": [
"8b6db6091a84e9e83ec8d161fc86b1d0387f41e6", "bc2021e1f5c05d55ce5a2a3fa35518efdd616415",
[] []
], ],
"executorservodriver.py": [ "executorservodriver.py": [

View file

@ -231,7 +231,7 @@ class ServoRefTestExecutor(ServoExecutor):
extra_args = ["--exit", extra_args = ["--exit",
"--output=%s" % output_path, "--output=%s" % output_path,
"--window-size", viewport_size or "800x600"] "--window-size", viewport_size or "800x600"]
debug_opts = "disable-text-aa,replace-surrogates" debug_opts = "replace-surrogates"
if dpi: if dpi:
extra_args += ["--device-pixel-ratio", dpi] extra_args += ["--device-pixel-ratio", dpi]