зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #12839 - Fix a cached style cascade bug that only manifested in sequential mode (from notriddle:11818_sequential_layout_bug); r=emilio
When copying cached styles, keep the `writing_mode` up to date. --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #11818 (github issue number if applicable). - [X] There are tests for these changes EDIT: The test is now working. I ran it with the first commit (the actual fix) reverted and it failed. Source-Repo: https://github.com/servo/servo Source-Revision: 700bb911fcd8b34dcc5fbce22adcd8117cbf60d2
This commit is contained in:
Родитель
3e55dba029
Коммит
d3994a496f
|
@ -162,7 +162,7 @@ impl Pipeline {
|
|||
pipeline_port: pipeline_port,
|
||||
layout_to_constellation_chan: state.layout_to_constellation_chan.clone(),
|
||||
content_process_shutdown_chan: layout_content_process_shutdown_chan.clone(),
|
||||
layout_threads: opts::get().layout_threads,
|
||||
layout_threads: PREFS.get("layout.threads").as_u64().expect("count") as usize,
|
||||
};
|
||||
|
||||
if let Err(e) = script_chan.send(ConstellationControlMsg::AttachLayout(new_layout_info)) {
|
||||
|
@ -474,7 +474,8 @@ impl UnprivilegedPipelineContent {
|
|||
self.mem_profiler_chan,
|
||||
self.layout_content_process_shutdown_chan,
|
||||
self.webrender_api_sender,
|
||||
opts::get().layout_threads);
|
||||
self.prefs.get("layout.threads").expect("exists").value()
|
||||
.as_u64().expect("count") as usize);
|
||||
|
||||
if wait_for_completion {
|
||||
let _ = self.script_content_process_shutdown_port.recv();
|
||||
|
|
|
@ -1716,6 +1716,9 @@ fn cascade_with_cached_declarations(
|
|||
context.mutate_style().mutate_font().compute_font_hash();
|
||||
}
|
||||
|
||||
let mode = get_writing_mode(context.style.get_inheritedbox());
|
||||
context.style.set_writing_mode(mode);
|
||||
|
||||
context.style
|
||||
}
|
||||
|
||||
|
|
|
@ -55,10 +55,6 @@ pub struct Opts {
|
|||
/// and cause it to produce output on that interval (`-m`).
|
||||
pub mem_profiler_period: Option<f64>,
|
||||
|
||||
/// The number of threads to use for layout (`-y`). Defaults to 1, which results in a recursive
|
||||
/// sequential algorithm.
|
||||
pub layout_threads: usize,
|
||||
|
||||
pub nonincremental_layout: bool,
|
||||
|
||||
/// Where to load userscripts from, if any. An empty string will load from
|
||||
|
@ -481,7 +477,6 @@ pub fn default_opts() -> Opts {
|
|||
time_profiling: None,
|
||||
time_profiler_trace_path: None,
|
||||
mem_profiler_period: None,
|
||||
layout_threads: 1,
|
||||
nonincremental_layout: false,
|
||||
userscripts: None,
|
||||
user_stylesheets: Vec::new(),
|
||||
|
@ -671,7 +666,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
|||
Ok(interval) => Some(OutputOptions::Stdout(interval)) ,
|
||||
Err(_) => Some(OutputOptions::FileName(argument)),
|
||||
},
|
||||
None => Some(OutputOptions::Stdout(5 as f64)),
|
||||
None => Some(OutputOptions::Stdout(5.0 as f64)),
|
||||
}
|
||||
} else {
|
||||
// if the p option doesn't exist:
|
||||
|
@ -691,11 +686,11 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
|||
period.parse().unwrap_or_else(|err| args_fail(&format!("Error parsing option: -m ({})", err)))
|
||||
});
|
||||
|
||||
let mut layout_threads: usize = match opt_match.opt_str("y") {
|
||||
Some(layout_threads_str) => layout_threads_str.parse()
|
||||
.unwrap_or_else(|err| args_fail(&format!("Error parsing option: -y ({})", err))),
|
||||
None => cmp::max(num_cpus::get() * 3 / 4, 1),
|
||||
};
|
||||
let mut layout_threads: Option<usize> = opt_match.opt_str("y")
|
||||
.map(|layout_threads_str| {
|
||||
layout_threads_str.parse()
|
||||
.unwrap_or_else(|err| args_fail(&format!("Error parsing option: -y ({})", err)))
|
||||
});
|
||||
|
||||
let nonincremental_layout = opt_match.opt_present("i");
|
||||
|
||||
|
@ -714,7 +709,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
|||
let mut bubble_inline_sizes_separately = debug_options.bubble_widths;
|
||||
if debug_options.trace_layout {
|
||||
paint_threads = 1;
|
||||
layout_threads = 1;
|
||||
layout_threads = Some(1);
|
||||
bubble_inline_sizes_separately = true;
|
||||
}
|
||||
|
||||
|
@ -786,7 +781,6 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
|||
time_profiling: time_profiling,
|
||||
time_profiler_trace_path: opt_match.opt_str("profiler-trace-path"),
|
||||
mem_profiler_period: mem_profiler_period,
|
||||
layout_threads: layout_threads,
|
||||
nonincremental_layout: nonincremental_layout,
|
||||
userscripts: opt_match.opt_default("userscripts", ""),
|
||||
user_stylesheets: user_stylesheets,
|
||||
|
@ -855,6 +849,15 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
|
|||
};
|
||||
}
|
||||
|
||||
if let Some(layout_threads) = layout_threads {
|
||||
PREFS.set("layout.threads", PrefValue::Number(layout_threads as f64));
|
||||
} else if let Some(layout_threads) = PREFS.get("layout.threads").as_string() {
|
||||
PREFS.set("layout.threads", PrefValue::Number(layout_threads.parse::<f64>().unwrap()));
|
||||
} else if *PREFS.get("layout.threads") == PrefValue::Missing {
|
||||
let layout_threads = cmp::max(num_cpus::get() * 3 / 4, 1);
|
||||
PREFS.set("layout.threads", PrefValue::Number(layout_threads as f64));
|
||||
}
|
||||
|
||||
ArgumentParsingResult::ChromeProcess
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@ pub extern "C" fn cef_initialize(args: *const cef_main_args_t,
|
|||
|
||||
let mut temp_opts = opts::default_opts();
|
||||
temp_opts.paint_threads = rendering_threads;
|
||||
temp_opts.layout_threads = rendering_threads;
|
||||
temp_opts.headless = false;
|
||||
temp_opts.hard_fail = false;
|
||||
temp_opts.enable_text_antialiasing = true;
|
||||
|
|
Загрузка…
Ссылка в новой задаче