diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/layout/layout_task.rs | 16 | ||||
-rw-r--r-- | components/util/opts.rs | 11 |
2 files changed, 23 insertions, 4 deletions
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs index c86ecdedaff..7a615b02f6b 100644 --- a/components/layout/layout_task.rs +++ b/components/layout/layout_task.rs @@ -326,10 +326,18 @@ fn add_font_face_rules(stylesheet: &Stylesheet, outstanding_web_fonts_counter: &Arc<AtomicUsize>) { for font_face in stylesheet.effective_rules(&device).font_face() { for source in &font_face.sources { - outstanding_web_fonts_counter.fetch_add(1, Ordering::SeqCst); - font_cache_task.add_web_font(font_face.family.clone(), - (*source).clone(), - (*font_cache_sender).clone()); + if opts::get().load_webfonts_synchronously { + let (sender, receiver) = channel(); + font_cache_task.add_web_font(font_face.family.clone(), + (*source).clone(), + sender); + receiver.recv().unwrap(); + } else { + outstanding_web_fonts_counter.fetch_add(1, Ordering::SeqCst); + font_cache_task.add_web_font(font_face.family.clone(), + (*source).clone(), + (*font_cache_sender).clone()); + } } } } diff --git a/components/util/opts.rs b/components/util/opts.rs index fb68c24964d..6d91e0d6c42 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -74,6 +74,9 @@ pub struct Opts { /// 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, pub hard_fail: bool, @@ -267,6 +270,9 @@ pub struct DebugOptions { /// 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, } @@ -301,6 +307,7 @@ impl DebugOptions { "convert-mouse-to-touch" => debug_options.convert_mouse_to_touch = true, "replace-surrogates" => debug_options.replace_surrogates = true, "gc-profile" => debug_options.gc_profile = true, + "load-webfonts-synchronously" => debug_options.load_webfonts_synchronously = true, "" => {}, _ => return Err(option) }; @@ -345,6 +352,8 @@ pub fn print_debug_usage(app: &str) -> ! { 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"); println!(""); @@ -414,6 +423,7 @@ pub fn default_opts() -> Opts { output_file: None, replace_surrogates: false, gc_profile: false, + load_webfonts_synchronously: false, headless: true, hard_fail: true, bubble_inline_sizes_separately: false, @@ -632,6 +642,7 @@ pub fn from_cmdline_args(args: &[String]) { 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"), bubble_inline_sizes_separately: bubble_inline_sizes_separately, |