aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <infra@servo.org>2023-05-03 10:44:48 +0200
committerGitHub <noreply@github.com>2023-05-03 10:44:48 +0200
commita8f7c458117efdcdac64f0865885b372896f50d1 (patch)
tree9b37eb62ee4cd13ebbec1b35347ac1f0d3964fcf
parent0cffe557c24f88d560b8a7d67a752a528c9520ca (diff)
parent0a3797d1309b56692af5c93c4f6e1614105f551e (diff)
downloadservo-a8f7c458117efdcdac64f0865885b372896f50d1.tar.gz
servo-a8f7c458117efdcdac64f0865885b372896f50d1.zip
Auto merge of #29693 - mrobinson:cleanup-options, r=mukilan
Clean up how command-line options are passed around <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #29678 - [x] These changes do not require tests because they do not change behavior.
-rw-r--r--components/config/opts.rs412
-rw-r--r--components/constellation/pipeline.rs20
-rw-r--r--components/layout/construct.rs2
-rw-r--r--components/layout/display_list/builder.rs10
-rw-r--r--components/layout/parallel.rs2
-rw-r--r--components/layout/sequential.rs2
-rw-r--r--components/layout_thread/lib.rs117
-rw-r--r--components/layout_thread_2020/lib.rs102
-rw-r--r--components/layout_traits/lib.rs9
-rw-r--r--components/profile_traits/time.rs4
-rw-r--r--components/script/dom/bindings/conversions.rs2
-rw-r--r--components/script/script_runtime.rs2
-rw-r--r--components/script/script_thread.rs55
-rw-r--r--components/script_traits/lib.rs9
-rw-r--r--components/servo/lib.rs20
15 files changed, 220 insertions, 548 deletions
diff --git a/components/config/opts.rs b/components/config/opts.rs
index 1b85f884201..793f9a85566 100644
--- a/components/config/opts.rs
+++ b/components/config/opts.rs
@@ -58,55 +58,14 @@ pub struct Opts {
pub output_file: Option<String>,
- /// Replace unpaired surrogates in DOM strings with U+FFFD.
- /// See <https://github.com/servo/servo/issues/6564>
- pub replace_surrogates: bool,
-
- /// Log GC passes and their durations.
- pub gc_profile: bool,
-
- /// Load web fonts synchronously to avoid non-deterministic network-driven reflows.
- pub load_webfonts_synchronously: bool,
-
pub headless: bool,
/// True to exit on thread failure instead of displaying about:failure.
pub hard_fail: bool,
- /// True if we should bubble intrinsic widths sequentially (`-b`). If this is true, then
- /// intrinsic widths are computed as a separate pass instead of during flow construction. You
- /// may wish to turn this flag on in order to benchmark style recalculation against other
- /// browser engines.
- pub bubble_inline_sizes_separately: bool,
-
- /// True if we should show borders on all fragments for debugging purposes
- /// (`--show-debug-fragment-borders`).
- pub show_debug_fragment_borders: bool,
-
- /// True if we should paint borders around flows based on which thread painted them.
- pub show_debug_parallel_layout: 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 enable_text_antialiasing: bool,
-
- /// If set with --disable-subpixel, use subpixel antialiasing for glyphs. In the future
- /// this will likely become the default, but for now it's opt-in while we work
- /// out any bugs and improve the implementation.
- pub enable_subpixel_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. Setting this implies sequential layout
- /// and paint.
- pub trace_layout: bool,
-
- /// Periodically print out on which events script threads spend their processing time.
- pub profile_script_events: bool,
+ /// Debug options that are used by developers to control Servo
+ /// behavior for debugging purposes.
+ pub debug: DebugOptions,
/// Port number to start a server to listen to remote Firefox devtools connections.
/// 0 for random port.
@@ -139,63 +98,15 @@ pub struct Opts {
/// used for testing the hardening of the constellation.
pub random_pipeline_closure_seed: Option<usize>,
- /// Dumps the DOM after restyle.
- pub dump_style_tree: bool,
-
- /// Dumps the rule tree.
- pub dump_rule_tree: bool,
-
- /// Dumps the flow tree after a layout.
- pub dump_flow_tree: bool,
-
- /// Dumps the display list after a layout.
- pub dump_display_list: bool,
-
- /// Dumps the display list in JSON form after a layout.
- pub dump_display_list_json: bool,
-
- /// Emits notifications when there is a relayout.
- pub relayout_event: bool,
-
- /// Whether Style Sharing Cache is used
- pub disable_share_style_cache: bool,
-
- /// Whether to show in stdout style sharing cache stats after a restyle.
- pub style_sharing_stats: bool,
-
- /// Translate mouse input into touch events.
- pub convert_mouse_to_touch: bool,
-
/// True to exit after the page load (`-x`).
pub exit_after_load: bool,
- /// True to show webrender profiling stats on screen.
- pub webrender_stats: bool,
-
- /// True if webrender recording should be enabled.
- pub webrender_record: bool,
-
- /// True if webrender is allowed to batch draw calls as instances.
- pub webrender_batch: bool,
-
/// Load shaders from disk.
pub shaders_dir: Option<PathBuf>,
- /// 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,
-
/// Directory for a default config directory
pub config_dir: Option<PathBuf>,
- // don't skip any backtraces on panic
- pub full_backtraces: bool,
-
- /// True to use OS native signposting facilities. This makes profiling events (script activity,
- /// reflow, compositing, etc.) appear in Instruments.app on macOS.
- pub signpost: bool,
-
/// Print the version and exit.
pub is_printing_version: bool,
@@ -221,22 +132,30 @@ fn print_usage(app: &str, opts: &Options) {
}
/// Debug options for Servo, currently set on the command line with -Z
-#[derive(Default)]
+#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct DebugOptions {
/// List all the debug options.
pub help: bool,
- /// Bubble intrinsic widths separately like other engines.
- pub bubble_widths: bool,
+ /// True if we should bubble intrinsic widths sequentially. If this is true,
+ /// then intrinsic widths are computed as a separate pass instead of during
+ /// flow construction. You may wish to turn this flag on in order to
+ /// benchmark style recalculation against other browser engines.
+ pub bubble_inline_sizes_separately: bool,
- /// Disable antialiasing of rendered text.
- pub disable_text_aa: 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_aa: bool,
+ pub disable_subpixel_text_antialiasing: bool,
/// Disable antialiasing of rendered text on the HTML canvas element.
- pub disable_canvas_aa: 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 disable_canvas_antialiasing: bool,
/// Print the DOM after each restyle.
pub dump_style_tree: bool,
@@ -256,7 +175,7 @@ pub struct DebugOptions {
/// Print notifications when there is a relayout.
pub relayout_event: bool,
- /// Profile which events script threads spend their time on.
+ /// Periodically print out on which events script threads spend their processing time.
pub profile_script_events: bool,
/// Paint borders along fragment boundaries.
@@ -265,14 +184,16 @@ pub struct DebugOptions {
/// Mark which thread laid each flow out with colors.
pub show_parallel_layout: bool,
- /// Write layout trace to an external file for debugging.
+ /// True if each step of layout is traced to an external JSON file
+ /// for debugging purposes. Setting this implies sequential layout
+ /// and paint.
pub trace_layout: bool,
/// Disable the style sharing cache.
pub disable_share_style_cache: bool,
/// Whether to show in stdout style sharing cache stats after a restyle.
- pub style_sharing_stats: bool,
+ pub dump_style_statistics: bool,
/// Translate mouse input into touch events.
pub convert_mouse_to_touch: bool,
@@ -290,15 +211,6 @@ pub struct DebugOptions {
/// Show webrender profiling stats on screen.
pub webrender_stats: bool,
- /// Enable webrender recording.
- pub webrender_record: bool,
-
- /// Enable webrender instanced draw call batching.
- pub webrender_disable_batch: bool,
-
- // don't skip any backtraces on panic
- pub full_backtraces: 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.
@@ -314,127 +226,131 @@ impl DebugOptions {
for option in debug_string.split(',') {
match option {
"help" => self.help = true,
- "bubble-widths" => self.bubble_widths = true,
- "disable-text-aa" => self.disable_text_aa = true,
- "disable-subpixel-aa" => self.disable_subpixel_aa = true,
- "disable-canvas-aa" => self.disable_text_aa = true,
- "dump-style-tree" => self.dump_style_tree = true,
- "dump-rule-tree" => self.dump_rule_tree = true,
- "dump-flow-tree" => self.dump_flow_tree = true,
+ "bubble-inline-sizes-separately" => self.bubble_inline_sizes_separately = 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-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-json" => self.dump_display_list_json = true,
- "relayout-event" => self.relayout_event = true,
+ "dump-flow-tree" => self.dump_flow_tree = true,
+ "dump-rule-tree" => self.dump_rule_tree = true,
+ "dump-style-tree" => self.dump_style_tree = true,
+ "gc-profile" => self.gc_profile = true,
+ "load-webfonts-synchronously" => self.load_webfonts_synchronously = true,
+ "precache-shaders" => self.precache_shaders = true,
"profile-script-events" => self.profile_script_events = true,
+ "relayout-event" => self.relayout_event = true,
+ "replace-surrogates" => self.replace_surrogates = true,
"show-fragment-borders" => self.show_fragment_borders = true,
"show-parallel-layout" => self.show_parallel_layout = true,
+ "signpost" => self.signpost = true,
+ "dump-style-stats" => self.dump_style_statistics = true,
"trace-layout" => self.trace_layout = true,
- "disable-share-style-cache" => self.disable_share_style_cache = true,
- "style-sharing-stats" => self.style_sharing_stats = true,
- "convert-mouse-to-touch" => self.convert_mouse_to_touch = true,
- "replace-surrogates" => self.replace_surrogates = true,
- "gc-profile" => self.gc_profile = true,
- "load-webfonts-synchronously" => self.load_webfonts_synchronously = true,
"wr-stats" => self.webrender_stats = true,
- "wr-record" => self.webrender_record = true,
- "wr-no-batch" => self.webrender_disable_batch = true,
- "full-backtraces" => self.full_backtraces = true,
- "precache-shaders" => self.precache_shaders = true,
- "signpost" => self.signpost = true,
"" => {},
_ => return Err(String::from(option)),
};
}
- Ok(())
- }
-}
-
-fn print_debug_usage(app: &str) -> ! {
- fn print_option(name: &str, description: &str) {
- println!("\t{:<35} {}", name, description);
- }
- println!(
- "Usage: {} debug option,[options,...]\n\twhere options include\n\nOptions:",
- app
- );
+ if self.trace_layout {
+ self.bubble_inline_sizes_separately = true;
+ }
- print_option(
- "bubble-widths",
- "Bubble intrinsic widths separately like other engines.",
- );
- print_option("disable-text-aa", "Disable antialiasing of rendered text.");
- print_option(
- "disable-canvas-aa",
- "Disable antialiasing on the HTML canvas element.",
- );
- print_option(
- "dump-style-tree",
- "Print the DOM with computed styles after each restyle.",
- );
- print_option("dump-flow-tree", "Print the flow tree after each layout.");
- print_option(
- "dump-display-list",
- "Print the display list after each layout.",
- );
- print_option(
- "dump-display-list-json",
- "Print the display list in JSON form.",
- );
- print_option(
- "relayout-event",
- "Print notifications when there is a relayout.",
- );
- print_option(
- "profile-script-events",
- "Enable profiling of script-related events.",
- );
- print_option(
- "show-fragment-borders",
- "Paint borders along fragment boundaries.",
- );
- print_option(
- "show-parallel-layout",
- "Mark which thread laid each flow out with colors.",
- );
- print_option(
- "trace-layout",
- "Write layout trace to an external file for debugging.",
- );
- print_option(
- "disable-share-style-cache",
- "Disable the style sharing cache.",
- );
- print_option(
- "parallel-display-list-building",
- "Build display lists in parallel.",
- );
- print_option(
- "convert-mouse-to-touch",
- "Send touch events instead of mouse events",
- );
- print_option(
- "replace-surrogates",
- "Replace unpaires surrogates in DOM strings with U+FFFD. \
- See https://github.com/servo/servo/issues/6564",
- );
- print_option("gc-profile", "Log GC passes and their durations.");
- print_option(
- "load-webfonts-synchronously",
- "Load web fonts synchronously to avoid non-deterministic network-driven reflows",
- );
- print_option("wr-stats", "Show WebRender profiler on screen.");
- print_option("full-backtraces", "Print full backtraces for all errors");
- print_option("wr-debug", "Display webrender tile borders.");
- print_option("wr-no-batch", "Disable webrender instanced batching.");
- print_option("precache-shaders", "Compile all shaders during init.");
- print_option(
- "signpost",
- "Emit native OS signposts for profile events (currently macOS only)",
- );
+ Ok(())
+ }
- println!();
+ fn print_usage(app: &str) {
+ fn print_option(name: &str, description: &str) {
+ println!("\t{:<35} {}", name, description);
+ }
- process::exit(0)
+ println!(
+ "Usage: {} debug option,[options,...]\n\twhere options include\n\nOptions:",
+ app
+ );
+
+ print_option(
+ "bubble-inline-sizes-separately",
+ "Bubble intrinsic widths separately like other engines.",
+ );
+ print_option(
+ "convert-mouse-to-touch",
+ "Send touch events instead of mouse events",
+ );
+ print_option(
+ "disable-canvas-aa",
+ "Disable antialiasing on the HTML canvas element.",
+ );
+ print_option(
+ "disable-share-style-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(
+ "dump-display-list",
+ "Print the display list after each layout.",
+ );
+ print_option(
+ "dump-display-list-json",
+ "Print the display list in JSON form.",
+ );
+ print_option("dump-flow-tree", "Print the flow tree after each layout.");
+ print_option(
+ "dump-rule-tree",
+ "Print the style rule tree after each layout.",
+ );
+ print_option(
+ "dump-style-tree",
+ "Print the DOM with computed styles after each restyle.",
+ );
+ print_option("dump-style-stats", "Print style statistics each restyle.");
+ print_option("gc-profile", "Log GC passes and their durations.");
+ print_option(
+ "load-webfonts-synchronously",
+ "Load web fonts synchronously to avoid non-deterministic network-driven reflows",
+ );
+ print_option(
+ "parallel-display-list-building",
+ "Build display lists in parallel.",
+ );
+ print_option("precache-shaders", "Compile all shaders during init.");
+ print_option(
+ "profile-script-events",
+ "Enable profiling of script-related events.",
+ );
+ print_option(
+ "relayout-event",
+ "Print notifications when there is a relayout.",
+ );
+ print_option("replace-surrogates", "Replace unpaires surrogates in DOM strings with U+FFFD. See https://github.com/servo/servo/issues/6564");
+ print_option(
+ "show-fragment-borders",
+ "Paint borders along fragment boundaries.",
+ );
+ print_option(
+ "show-parallel-layout",
+ "Mark which thread laid each flow out with colors.",
+ );
+ print_option(
+ "signpost",
+ "Emit native OS signposts for profile events (currently macOS only)",
+ );
+ print_option(
+ "trace-layout",
+ "Write layout trace to an external file for debugging.",
+ );
+ print_option("wr-stats", "Show WebRender profiler on screen.");
+
+ println!();
+
+ process::exit(0)
+ }
}
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -468,18 +384,8 @@ pub fn default_opts() -> Opts {
userscripts: None,
user_stylesheets: Vec::new(),
output_file: None,
- replace_surrogates: false,
- gc_profile: false,
- load_webfonts_synchronously: false,
headless: false,
hard_fail: true,
- bubble_inline_sizes_separately: false,
- show_debug_fragment_borders: false,
- show_debug_parallel_layout: false,
- enable_text_antialiasing: true,
- enable_subpixel_text_antialiasing: true,
- enable_canvas_antialiasing: true,
- trace_layout: false,
devtools_port: 0,
devtools_server_enabled: false,
webdriver_port: None,
@@ -489,26 +395,11 @@ pub fn default_opts() -> Opts {
random_pipeline_closure_probability: None,
random_pipeline_closure_seed: None,
sandbox: false,
- dump_style_tree: false,
- dump_rule_tree: false,
- dump_flow_tree: false,
- dump_display_list: false,
- dump_display_list_json: false,
- relayout_event: false,
- profile_script_events: false,
- disable_share_style_cache: false,
- style_sharing_stats: false,
- convert_mouse_to_touch: false,
+ debug: Default::default(),
exit_after_load: false,
- webrender_stats: false,
config_dir: None,
- full_backtraces: false,
is_printing_version: false,
- webrender_record: false,
- webrender_batch: true,
shaders_dir: None,
- precache_shaders: false,
- signpost: false,
certificate_path: None,
unminify_js: false,
local_script_source: None,
@@ -673,7 +564,6 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
}
let mut debug_options = DebugOptions::default();
-
for debug_string in opt_match.opt_strs("Z") {
if let Err(e) = debug_options.extend(debug_string) {
args_fail(&format!("error: unrecognized debug option: {}", e));
@@ -681,7 +571,7 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
}
if debug_options.help {
- print_debug_usage(app_name)
+ DebugOptions::print_usage(app_name)
}
let cwd = env::current_dir().unwrap();
@@ -778,10 +668,8 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
})
});
- let mut bubble_inline_sizes_separately = debug_options.bubble_widths;
if debug_options.trace_layout {
layout_threads = Some(1);
- bubble_inline_sizes_separately = true;
}
let (devtools_server_enabled, devtools_port) = if opt_match.opt_present("devtools") {
@@ -841,12 +729,10 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
})
.collect();
- let enable_subpixel_text_antialiasing =
- !debug_options.disable_subpixel_aa && pref!(gfx.subpixel_text_antialiasing.enabled);
-
let is_printing_version = opt_match.opt_present("v") || opt_match.opt_present("version");
let opts = Opts {
+ debug: debug_options.clone(),
is_running_problem_test,
url: url_opt,
tile_size,
@@ -857,14 +743,8 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
userscripts: opt_match.opt_default("userscripts", ""),
user_stylesheets,
output_file: opt_match.opt_str("o"),
- replace_surrogates: debug_options.replace_surrogates,
- gc_profile: debug_options.gc_profile,
- load_webfonts_synchronously: debug_options.load_webfonts_synchronously,
headless: opt_match.opt_present("z"),
hard_fail: opt_match.opt_present("f") && !opt_match.opt_present("F"),
- bubble_inline_sizes_separately,
- profile_script_events: debug_options.profile_script_events,
- trace_layout: debug_options.trace_layout,
devtools_port,
devtools_server_enabled,
webdriver_port,
@@ -874,30 +754,10 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
sandbox: opt_match.opt_present("S"),
random_pipeline_closure_probability,
random_pipeline_closure_seed,
- show_debug_fragment_borders: debug_options.show_fragment_borders,
- show_debug_parallel_layout: debug_options.show_parallel_layout,
- enable_text_antialiasing: !debug_options.disable_text_aa,
- enable_subpixel_text_antialiasing,
- enable_canvas_antialiasing: !debug_options.disable_canvas_aa,
- dump_style_tree: debug_options.dump_style_tree,
- dump_rule_tree: debug_options.dump_rule_tree,
- dump_flow_tree: debug_options.dump_flow_tree,
- dump_display_list: debug_options.dump_display_list,
- dump_display_list_json: debug_options.dump_display_list_json,
- relayout_event: debug_options.relayout_event,
- disable_share_style_cache: debug_options.disable_share_style_cache,
- style_sharing_stats: debug_options.style_sharing_stats,
- convert_mouse_to_touch: debug_options.convert_mouse_to_touch,
exit_after_load: opt_match.opt_present("x"),
- webrender_stats: debug_options.webrender_stats,
config_dir: opt_match.opt_str("config-dir").map(Into::into),
- full_backtraces: debug_options.full_backtraces,
is_printing_version,
- webrender_record: debug_options.webrender_record,
- webrender_batch: !debug_options.webrender_disable_batch,
shaders_dir: opt_match.opt_str("shaders").map(Into::into),
- precache_shaders: debug_options.precache_shaders,
- signpost: debug_options.signpost,
certificate_path: opt_match.opt_str("certificate-path"),
unminify_js: opt_match.opt_present("unminify-js"),
local_script_source: opt_match.opt_str("local-script-source"),
diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs
index c368b57f2a1..b1fcca0097e 100644
--- a/components/constellation/pipeline.rs
+++ b/components/constellation/pipeline.rs
@@ -576,17 +576,6 @@ impl UnprivilegedPipelineContent {
inherited_secure_context: self.load_data.inherited_secure_context.clone(),
},
self.load_data.clone(),
- self.opts.profile_script_events,
- self.opts.print_pwm,
- self.opts.relayout_event,
- self.opts.output_file.is_some() ||
- self.opts.exit_after_load ||
- self.opts.webdriver_port.is_some(),
- self.opts.unminify_js,
- self.opts.local_script_source,
- self.opts.userscripts,
- self.opts.headless,
- self.opts.replace_surrogates,
self.user_agent,
);
@@ -607,16 +596,7 @@ impl UnprivilegedPipelineContent {
self.webrender_api_sender,
paint_time_metrics,
layout_thread_busy_flag.clone(),
- self.opts.load_webfonts_synchronously,
self.window_size,
- self.opts.dump_display_list,
- self.opts.dump_display_list_json,
- self.opts.dump_style_tree,
- self.opts.dump_rule_tree,
- self.opts.relayout_event,
- self.opts.nonincremental_layout,
- self.opts.trace_layout,
- self.opts.dump_flow_tree,
);
if wait_for_completion {
diff --git a/components/layout/construct.rs b/components/layout/construct.rs
index c17d52dd155..c3ebed7d1a3 100644
--- a/components/layout/construct.rs
+++ b/components/layout/construct.rs
@@ -2068,7 +2068,7 @@ impl FlowRef {
/// All flows must be finished at some point, or they will not have their intrinsic inline-sizes
/// properly computed. (This is not, however, a memory safety problem.)
fn finish(&mut self) {
- if !opts::get().bubble_inline_sizes_separately {
+ if !opts::get().debug.bubble_inline_sizes_separately {
FlowRef::deref_mut(self).bubble_inline_sizes();
FlowRef::deref_mut(self)
.mut_base()
diff --git a/components/layout/display_list/builder.rs b/components/layout/display_list/builder.rs
index 4b6aa8e7371..1b53ac90249 100644
--- a/components/layout/display_list/builder.rs
+++ b/components/layout/display_list/builder.rs
@@ -1713,7 +1713,7 @@ impl Fragment {
);
});
- if opts::get().show_debug_fragment_borders {
+ if opts::get().debug.show_fragment_borders {
self.build_debug_borders_around_fragment(state, stacking_relative_border_box, clip)
}
}
@@ -1772,7 +1772,7 @@ impl Fragment {
clip,
);
- if opts::get().show_debug_fragment_borders {
+ if opts::get().debug.show_fragment_borders {
self.build_debug_borders_around_text_fragments(
state,
self.style(),
@@ -1793,7 +1793,7 @@ impl Fragment {
clip,
);
- if opts::get().show_debug_fragment_borders {
+ if opts::get().debug.show_fragment_borders {
self.build_debug_borders_around_text_fragments(
state,
self.style(),
@@ -1817,7 +1817,7 @@ impl Fragment {
SpecificFragmentInfo::InlineAbsolute(_) |
SpecificFragmentInfo::TruncatedFragment(_) |
SpecificFragmentInfo::Svg(_) => {
- if opts::get().show_debug_fragment_borders {
+ if opts::get().debug.show_fragment_borders {
self.build_debug_borders_around_fragment(
state,
stacking_relative_border_box,
@@ -2885,7 +2885,7 @@ impl BaseFlow {
state: &mut DisplayListBuildState,
node: OpaqueNode,
) {
- if !opts::get().show_debug_parallel_layout {
+ if !opts::get().debug.show_parallel_layout {
return;
}
diff --git a/components/layout/parallel.rs b/components/layout/parallel.rs
index 4ad10b3db11..a5a4a51a5f3 100644
--- a/components/layout/parallel.rs
+++ b/components/layout/parallel.rs
@@ -196,7 +196,7 @@ pub fn reflow(
context: &LayoutContext,
queue: &rayon::ThreadPool,
) {
- if opts::get().bubble_inline_sizes_separately {
+ if opts::get().debug.bubble_inline_sizes_separately {
let bubble_inline_sizes = BubbleISizes {
layout_context: &context,
};
diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs
index 39e6ce4662f..9de4dada75b 100644
--- a/components/layout/sequential.rs
+++ b/components/layout/sequential.rs
@@ -55,7 +55,7 @@ pub fn reflow(root: &mut dyn Flow, layout_context: &LayoutContext, relayout_mode
}
}
- if opts::get().bubble_inline_sizes_separately {
+ if opts::get().debug.bubble_inline_sizes_separately {
let bubble_inline_sizes = BubbleISizes {
layout_context: &layout_context,
};
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs
index 6cabd0b046c..d6fb814b758 100644
--- a/components/layout_thread/lib.rs
+++ b/components/layout_thread/lib.rs
@@ -86,7 +86,7 @@ use script_traits::{Painter, WebrenderIpcSender};
use script_traits::{ScrollState, UntrustedNodeAddress, WindowSizeData};
use servo_arc::Arc as ServoArc;
use servo_atoms::Atom;
-use servo_config::opts;
+use servo_config::opts::{self, DebugOptions};
use servo_url::{ImmutableOrigin, ServoUrl};
use std::borrow::ToOwned;
use std::cell::{Cell, RefCell};
@@ -221,34 +221,12 @@ pub struct LayoutThread {
/// Flag that indicates if LayoutThread is busy handling a request.
busy: Arc<AtomicBool>,
- /// Load web fonts synchronously to avoid non-deterministic network-driven reflows.
- load_webfonts_synchronously: bool,
-
- /// Dumps the display list form after a layout.
- dump_display_list: bool,
-
- /// Dumps the display list in JSON form after a layout.
- dump_display_list_json: bool,
-
- /// Dumps the DOM after restyle.
- dump_style_tree: bool,
-
- /// Dumps the flow tree after a layout.
- dump_rule_tree: bool,
-
- /// Emits notifications when there is a relayout.
- relayout_event: bool,
+ /// Debug options, copied from configuration to this `LayoutThread` in order
+ /// to avoid having to constantly access the thread-safe global options.
+ debug: DebugOptions,
/// True to turn off incremental layout.
nonincremental_layout: bool,
-
- /// True if each step of layout is traced to an external JSON file
- /// for debugging purposes. Setting this implies sequential layout
- /// and paint.
- trace_layout: bool,
-
- /// Dumps the flow tree after a layout.
- dump_flow_tree: bool,
}
impl LayoutThreadFactory for LayoutThread {
@@ -272,16 +250,7 @@ impl LayoutThreadFactory for LayoutThread {
webrender_api_sender: WebrenderIpcSender,
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
- load_webfonts_synchronously: bool,
window_size: WindowSizeData,
- dump_display_list: bool,
- dump_display_list_json: bool,
- dump_style_tree: bool,
- dump_rule_tree: bool,
- relayout_event: bool,
- nonincremental_layout: bool,
- trace_layout: bool,
- dump_flow_tree: bool,
) {
thread::Builder::new()
.name(format!("Layout{}", id))
@@ -320,16 +289,7 @@ impl LayoutThreadFactory for LayoutThread {
webrender_api_sender,
paint_time_metrics,
busy,
- load_webfonts_synchronously,
window_size,
- dump_display_list,
- dump_display_list_json,
- dump_style_tree,
- dump_rule_tree,
- relayout_event,
- nonincremental_layout,
- trace_layout,
- dump_flow_tree,
);
let reporter_name = format!("layout-reporter-{}", id);
@@ -489,16 +449,7 @@ impl LayoutThread {
webrender_api: WebrenderIpcSender,
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
- load_webfonts_synchronously: bool,
window_size: WindowSizeData,
- dump_display_list: bool,
- dump_display_list_json: bool,
- dump_style_tree: bool,
- dump_rule_tree: bool,
- relayout_event: bool,
- nonincremental_layout: bool,
- trace_layout: bool,
- dump_flow_tree: bool,
) -> LayoutThread {
// Let webrender know about this pipeline by sending an empty display list.
webrender_api.send_initial_transaction(id.to_webrender());
@@ -519,22 +470,22 @@ impl LayoutThread {
ROUTER.route_ipc_receiver_to_new_crossbeam_receiver(ipc_font_cache_receiver);
LayoutThread {
- id: id,
+ id,
top_level_browsing_context_id: top_level_browsing_context_id,
- url: url,
- is_iframe: is_iframe,
- port: port,
+ url,
+ is_iframe,
+ port,
pipeline_port: pipeline_receiver,
- script_chan: script_chan,
+ script_chan,
background_hang_monitor,
constellation_chan: constellation_chan.clone(),
- time_profiler_chan: time_profiler_chan,
- mem_profiler_chan: mem_profiler_chan,
+ time_profiler_chan,
+ mem_profiler_chan,
registered_painters: RegisteredPaintersImpl(Default::default()),
- image_cache: image_cache,
- font_cache_thread: font_cache_thread,
+ image_cache,
+ font_cache_thread,
first_reflow: Cell::new(true),
- font_cache_receiver: font_cache_receiver,
+ font_cache_receiver,
font_cache_sender: ipc_font_cache_sender,
parallel_flag: true,
generation: Cell::new(0),
@@ -546,7 +497,7 @@ impl LayoutThread {
webrender_api,
stylist: Stylist::new(device, QuirksMode::NoQuirks),
rw_data: Arc::new(Mutex::new(LayoutThreadData {
- constellation_chan: constellation_chan,
+ constellation_chan,
display_list: None,
indexable_text: IndexableText::default(),
content_box_response: None,
@@ -564,19 +515,12 @@ impl LayoutThread {
inner_window_dimensions_response: None,
})),
webrender_image_cache: Arc::new(RwLock::new(FnvHashMap::default())),
- paint_time_metrics: paint_time_metrics,
+ paint_time_metrics,
layout_query_waiting_time: Histogram::new(),
last_iframe_sizes: Default::default(),
busy,
- load_webfonts_synchronously,
- dump_display_list,
- dump_display_list_json,
- dump_style_tree,
- dump_rule_tree,
- relayout_event,
- nonincremental_layout,
- trace_layout,
- dump_flow_tree,
+ debug: opts::get().debug.clone(),
+ nonincremental_layout: opts::get().nonincremental_layout,
}
}
@@ -855,16 +799,7 @@ impl LayoutThread {
self.webrender_api.clone(),
info.paint_time_metrics,
info.layout_is_busy,
- self.load_webfonts_synchronously,
info.window_size,
- self.dump_display_list,
- self.dump_display_list_json,
- self.dump_style_tree,
- self.dump_rule_tree,
- self.relayout_event,
- self.nonincremental_layout,
- self.trace_layout,
- self.dump_flow_tree,
);
}
@@ -917,7 +852,7 @@ impl LayoutThread {
&self.font_cache_thread,
&self.font_cache_sender,
&self.outstanding_web_fonts,
- self.load_webfonts_synchronously,
+ self.debug.load_webfonts_synchronously,
);
}
}
@@ -1124,10 +1059,10 @@ impl LayoutThread {
let display_list = rw_data.display_list.as_mut().unwrap();
- if self.dump_display_list {
+ if self.debug.dump_display_list {
display_list.print();
}
- if self.dump_display_list_json {
+ if self.debug.dump_display_list_json {
println!("{}", serde_json::to_string_pretty(&display_list).unwrap());
}
@@ -1467,14 +1402,14 @@ impl LayoutThread {
layout_context = traversal.destroy();
- if self.dump_style_tree {
+ if self.debug.dump_style_tree {
println!(
"{:?}",
ShowSubtreeDataAndPrimaryValues(root_element.as_node())
);
}
- if self.dump_rule_tree {
+ if self.debug.dump_rule_tree {
layout_context
.style_context
.stylist
@@ -1724,7 +1659,7 @@ impl LayoutThread {
},
);
- if self.trace_layout {
+ if self.debug.trace_layout {
layout_debug::begin_trace(root_flow.clone());
}
@@ -1821,11 +1756,11 @@ impl LayoutThread {
rw_data,
);
- if self.trace_layout {
+ if self.debug.trace_layout {
layout_debug::end_trace(self.generation.get());
}
- if self.dump_flow_tree {
+ if self.debug.dump_flow_tree {
root_flow.print("Post layout flow tree".to_owned());
}
diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs
index 18851ef905c..df7f2e90827 100644
--- a/components/layout_thread_2020/lib.rs
+++ b/components/layout_thread_2020/lib.rs
@@ -71,7 +71,7 @@ use script_traits::{
};
use servo_arc::Arc as ServoArc;
use servo_atoms::Atom;
-use servo_config::opts;
+use servo_config::opts::{self, DebugOptions};
use servo_url::{ImmutableOrigin, ServoUrl};
use std::cell::{Cell, RefCell};
use std::collections::HashMap;
@@ -200,30 +200,9 @@ pub struct LayoutThread {
/// Flag that indicates if LayoutThread is busy handling a request.
busy: Arc<AtomicBool>,
- /// Load web fonts synchronously to avoid non-deterministic network-driven reflows.
- load_webfonts_synchronously: bool,
-
- /// Dumps the display list form after a layout.
- dump_display_list: bool,
-
- /// Dumps the display list in JSON form after a layout.
- dump_display_list_json: bool,
-
- /// Dumps the DOM after restyle.
- dump_style_tree: bool,
-
- /// Dumps the flow tree after a layout.
- dump_rule_tree: bool,
-
- /// Dumps the flow tree after a layout.
- dump_flow_tree: bool,
-
- /// Emits notifications when there is a relayout.
- relayout_event: bool,
-
- /// True if each step of layout is traced to an external JSON file
- /// for debugging purposes.
- trace_layout: bool,
+ /// Debug options, copied from configuration to this `LayoutThread` in order
+ /// to avoid having to constantly access the thread-safe global options.
+ debug: DebugOptions,
}
impl LayoutThreadFactory for LayoutThread {
@@ -247,16 +226,7 @@ impl LayoutThreadFactory for LayoutThread {
webrender_api_sender: WebrenderIpcSender,
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
- load_webfonts_synchronously: bool,
window_size: WindowSizeData,
- dump_display_list: bool,
- dump_display_list_json: bool,
- dump_style_tree: bool,
- dump_rule_tree: bool,
- relayout_event: bool,
- _nonincremental_layout: bool,
- trace_layout: bool,
- dump_flow_tree: bool,
) {
thread::Builder::new()
.name(format!("Layout{}", id))
@@ -295,15 +265,7 @@ impl LayoutThreadFactory for LayoutThread {
webrender_api_sender,
paint_time_metrics,
busy,
- load_webfonts_synchronously,
window_size,
- relayout_event,
- dump_display_list,
- dump_display_list_json,
- dump_style_tree,
- dump_rule_tree,
- dump_flow_tree,
- trace_layout,
);
let reporter_name = format!("layout-reporter-{}", id);
@@ -463,15 +425,7 @@ impl LayoutThread {
webrender_api_sender: WebrenderIpcSender,
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
- load_webfonts_synchronously: bool,
window_size: WindowSizeData,
- relayout_event: bool,
- dump_display_list: bool,
- dump_display_list_json: bool,
- dump_style_tree: bool,
- dump_rule_tree: bool,
- dump_flow_tree: bool,
- trace_layout: bool,
) -> LayoutThread {
// Let webrender know about this pipeline by sending an empty display list.
webrender_api_sender.send_initial_transaction(id.to_webrender());
@@ -494,22 +448,22 @@ impl LayoutThread {
ROUTER.route_ipc_receiver_to_new_crossbeam_receiver(ipc_font_cache_receiver);
LayoutThread {
- id: id,
+ id,
top_level_browsing_context_id: top_level_browsing_context_id,
- url: url,
- is_iframe: is_iframe,
- port: port,
+ url,
+ is_iframe,
+ port,
pipeline_port: pipeline_receiver,
constellation_chan,
script_chan: script_chan.clone(),
background_hang_monitor,
- time_profiler_chan: time_profiler_chan,
- mem_profiler_chan: mem_profiler_chan,
+ time_profiler_chan,
+ mem_profiler_chan,
registered_painters: RegisteredPaintersImpl(Default::default()),
image_cache,
- font_cache_thread: font_cache_thread,
+ font_cache_thread,
first_reflow: Cell::new(true),
- font_cache_receiver: font_cache_receiver,
+ font_cache_receiver,
font_cache_sender: ipc_font_cache_sender,
generation: Cell::new(0),
outstanding_web_fonts: Arc::new(AtomicUsize::new(0)),
@@ -540,14 +494,7 @@ impl LayoutThread {
paint_time_metrics: paint_time_metrics,
last_iframe_sizes: Default::default(),
busy,
- load_webfonts_synchronously,
- relayout_event,
- dump_display_list,
- dump_display_list_json,
- dump_style_tree,
- dump_rule_tree,
- dump_flow_tree,
- trace_layout,
+ debug: opts::get().debug.clone(),
}
}
@@ -803,16 +750,7 @@ impl LayoutThread {
self.webrender_api.clone(),
info.paint_time_metrics,
info.layout_is_busy,
- self.load_webfonts_synchronously,
info.window_size,
- self.dump_display_list,
- self.dump_display_list_json,
- self.dump_style_tree,
- self.dump_rule_tree,
- self.relayout_event,
- true, // nonincremental_layout
- self.trace_layout, // trace_layout
- self.dump_flow_tree, // dump_flow_tree
);
}
@@ -850,7 +788,7 @@ impl LayoutThread {
&self.font_cache_thread,
&self.font_cache_sender,
&self.outstanding_web_fonts,
- self.load_webfonts_synchronously,
+ self.debug.load_webfonts_synchronously,
);
}
}
@@ -1116,14 +1054,14 @@ impl LayoutThread {
unsafe { element.unset_snapshot_flags() }
}
- if self.dump_style_tree {
+ if self.debug.dump_style_tree {
println!(
"{:?}",
style::dom::ShowSubtreeDataAndPrimaryValues(root_element.as_node())
);
}
- if self.dump_rule_tree {
+ if self.debug.dump_rule_tree {
layout_context
.style_context
.stylist
@@ -1302,7 +1240,7 @@ impl LayoutThread {
&fragment_tree,
);
- if self.trace_layout {
+ if self.debug.trace_layout {
if let Some(box_tree) = &*self.box_tree.borrow() {
layout_debug::begin_trace(box_tree.clone(), fragment_tree.clone());
}
@@ -1330,13 +1268,13 @@ impl LayoutThread {
// the display list for printing the serialized version when `finalize()` is called.
// We need to call this before adding any display items so that they are printed
// during `finalize()`.
- if self.dump_display_list {
+ if self.debug.dump_display_list {
display_list.wr.dump_serialized_display_list();
}
fragment_tree.build_display_list(&mut display_list);
- if self.dump_flow_tree {
+ if self.debug.dump_flow_tree {
fragment_tree.print();
}
debug!("Layout done!");
@@ -1364,7 +1302,7 @@ impl LayoutThread {
self.update_iframe_sizes(display_list.iframe_sizes);
- if self.trace_layout {
+ if self.debug.trace_layout {
layout_debug::end_trace(self.generation.get());
}
diff --git a/components/layout_traits/lib.rs b/components/layout_traits/lib.rs
index 416d0e5b662..b10ee62d5c1 100644
--- a/components/layout_traits/lib.rs
+++ b/components/layout_traits/lib.rs
@@ -46,15 +46,6 @@ pub trait LayoutThreadFactory {
webrender_api_sender: WebrenderIpcSender,
paint_time_metrics: PaintTimeMetrics,
busy: Arc<AtomicBool>,
- load_webfonts_synchronously: bool,
window_size: WindowSizeData,
- dump_display_list: bool,
- dump_display_list_json: bool,
- dump_style_tree: bool,
- dump_rule_tree: bool,
- relayout_event: bool,
- nonincremental_layout: bool,
- trace_layout: bool,
- dump_flow_tree: bool,
);
}
diff --git a/components/profile_traits/time.rs b/components/profile_traits/time.rs
index f89b25192e3..53868ef9b7a 100644
--- a/components/profile_traits/time.rs
+++ b/components/profile_traits/time.rs
@@ -133,7 +133,7 @@ pub fn profile<T, F>(
where
F: FnOnce() -> T,
{
- if opts::get().signpost {
+ if opts::get().debug.signpost {
signpost::start(category as u32, &[0, 0, 0, (category as usize) >> 4]);
}
let start_time = precise_time_ns();
@@ -141,7 +141,7 @@ where
let val = callback();
let end_time = precise_time_ns();
- if opts::get().signpost {
+ if opts::get().debug.signpost {
signpost::end(category as u32, &[0, 0, 0, (category as usize) >> 4]);
}
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs
index 25cd0f206b7..1e5a872431d 100644
--- a/components/script/dom/bindings/conversions.rs
+++ b/components/script/dom/bindings/conversions.rs
@@ -239,7 +239,7 @@ pub unsafe fn jsstring_to_str(cx: *mut JSContext, s: *mut JSString) -> DOMString
please comment on https://github.com/servo/servo/issues/6564"
};
}
- if opts::get().replace_surrogates {
+ if opts::get().debug.replace_surrogates {
error!(message!());
s.push('\u{FFFD}');
} else {
diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs
index fe88b017934..d9566f6b204 100644
--- a/components/script/script_runtime.rs
+++ b/components/script/script_runtime.rs
@@ -483,7 +483,7 @@ unsafe fn new_rt_and_cx_with_parent(
JS_SetGCCallback(cx, Some(debug_gc_callback), ptr::null_mut());
}
- if opts::get().gc_profile {
+ if opts::get().debug.gc_profile {
SetGCSliceCallback(cx, Some(gc_slice_callback));
}
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index f52fc0d777a..89b4ceab185 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -755,15 +755,6 @@ impl ScriptThreadFactory for ScriptThread {
fn create(
state: InitialScriptState,
load_data: LoadData,
- profile_script_events: bool,
- print_pwm: bool,
- relayout_event: bool,
- prepare_for_screenshot: bool,
- unminify_js: bool,
- local_script_source: Option<String>,
- userscripts_path: Option<String>,
- headless: bool,
- replace_surrogates: bool,
user_agent: Cow<'static, str>,
) -> (Sender<message::Msg>, Receiver<message::Msg>) {
let (script_chan, script_port) = unbounded();
@@ -788,21 +779,8 @@ impl ScriptThreadFactory for ScriptThread {
let window_size = state.window_size;
let layout_is_busy = state.layout_is_busy.clone();
- let script_thread = ScriptThread::new(
- state,
- script_port,
- script_chan.clone(),
- profile_script_events,
- print_pwm,
- relayout_event,
- prepare_for_screenshot,
- unminify_js,
- local_script_source,
- userscripts_path,
- headless,
- replace_surrogates,
- user_agent,
- );
+ let script_thread =
+ ScriptThread::new(state, script_port, script_chan.clone(), user_agent);
SCRIPT_THREAD_ROOT.with(|root| {
root.set(Some(&script_thread as *const _));
@@ -1273,17 +1251,12 @@ impl ScriptThread {
state: InitialScriptState,
port: Receiver<MainThreadScriptMsg>,
chan: Sender<MainThreadScriptMsg>,
- profile_script_events: bool,
- print_pwm: bool,
- relayout_event: bool,
- prepare_for_screenshot: bool,
- unminify_js: bool,
- local_script_source: Option<String>,
- userscripts_path: Option<String>,
- headless: bool,
- replace_surrogates: bool,
user_agent: Cow<'static, str>,
) -> ScriptThread {
+ let opts = opts::get();
+ let prepare_for_screenshot =
+ opts.output_file.is_some() || opts.exit_after_load || opts.webdriver_port.is_some();
+
let boxed_script_sender = Box::new(MainThreadScriptChan(chan.clone()));
let runtime = new_rt_and_cx(Some(NetworkingTaskSource(
@@ -1392,17 +1365,17 @@ impl ScriptThread {
webrender_document: state.webrender_document,
webrender_api_sender: state.webrender_api_sender,
- profile_script_events,
- print_pwm,
+ profile_script_events: opts.debug.profile_script_events,
+ print_pwm: opts.print_pwm,
+ relayout_event: opts.debug.relayout_event,
- relayout_event,
prepare_for_screenshot,
- unminify_js,
- local_script_source,
+ unminify_js: opts.unminify_js,
+ local_script_source: opts.local_script_source.clone(),
- userscripts_path,
- headless,
- replace_surrogates,
+ userscripts_path: opts.userscripts.clone(),
+ headless: opts.headless,
+ replace_surrogates: opts.debug.replace_surrogates,
user_agent,
player_context: state.player_context,
event_loop_waker: state.event_loop_waker,
diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs
index 14144d8880b..4eaf90ea7fc 100644
--- a/components/script_traits/lib.rs
+++ b/components/script_traits/lib.rs
@@ -700,15 +700,6 @@ pub trait ScriptThreadFactory {
fn create(
state: InitialScriptState,
load_data: LoadData,
- profile_script_events: bool,
- print_pwm: bool,
- relayout_event: bool,
- prepare_for_screenshot: bool,
- unminify_js: bool,
- local_script_source: Option<String>,
- userscripts_path: Option<String>,
- headless: bool,
- replace_surrogates: bool,
user_agent: Cow<'static, str>,
) -> (Sender<Self::Message>, Receiver<Self::Message>);
}
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index bfd708b037c..9a447f430b4 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -293,9 +293,9 @@ where
use std::sync::atomic::Ordering;
style::context::DEFAULT_DISABLE_STYLE_SHARING_CACHE
- .store(opts.disable_share_style_cache, Ordering::Relaxed);
+ .store(opts.debug.disable_share_style_cache, Ordering::Relaxed);
style::context::DEFAULT_DUMP_STYLE_STATISTICS
- .store(opts.style_sharing_stats, Ordering::Relaxed);
+ .store(opts.debug.dump_style_statistics, Ordering::Relaxed);
style::traversal::IS_SERVO_NONINCREMENTAL_LAYOUT
.store(opts.nonincremental_layout, Ordering::Relaxed);
@@ -374,7 +374,10 @@ where
let (mut webrender, webrender_api_sender) = {
let mut debug_flags = webrender::DebugFlags::empty();
- debug_flags.set(webrender::DebugFlags::PROFILER_DBG, opts.webrender_stats);
+ debug_flags.set(
+ webrender::DebugFlags::PROFILER_DBG,
+ opts.debug.webrender_stats,
+ );
let render_notifier = Box::new(RenderNotifier::new(compositor_proxy.clone()));
@@ -387,14 +390,15 @@ where
webrender::RendererOptions {
device_pixel_ratio,
resource_override_path: opts.shaders_dir.clone(),
- enable_aa: opts.enable_text_antialiasing,
+ enable_aa: !opts.debug.disable_text_antialiasing,
debug_flags: debug_flags,
- precache_flags: if opts.precache_shaders {
+ precache_flags: if opts.debug.precache_shaders {
ShaderPrecacheFlags::FULL_COMPILE
} else {
ShaderPrecacheFlags::empty()
},
- enable_subpixel_aa: opts.enable_subpixel_text_antialiasing,
+ enable_subpixel_aa: pref!(gfx.subpixel_text_antialiasing.enabled) &&
+ !opts.debug.disable_subpixel_text_antialiasing,
allow_texture_swizzling: pref!(gfx.texture_swizzling.enabled),
clear_color: None,
..Default::default()
@@ -542,7 +546,7 @@ where
opts.output_file.clone(),
opts.is_running_problem_test,
opts.exit_after_load,
- opts.convert_mouse_to_touch,
+ opts.debug.convert_mouse_to_touch,
browser_id,
);
@@ -936,7 +940,7 @@ fn create_constellation(
opts.random_pipeline_closure_seed,
opts.is_running_problem_test,
opts.hard_fail,
- opts.enable_canvas_antialiasing,
+ !opts.debug.disable_canvas_antialiasing,
canvas_chan,
ipc_canvas_chan,
);