Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

layout_thread: Avoid adding the UA sheets multiple times when there's no root flow. #18696

Merged
merged 2 commits into from
Oct 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions components/layout_thread/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1318,6 +1318,7 @@ impl LayoutThread {
&mut layout_context);
}

self.first_reflow.set(false);
self.respond_to_query_if_necessary(&data.reflow_goal,
&mut *rw_data,
&mut layout_context,
Expand Down Expand Up @@ -1596,6 +1597,7 @@ impl LayoutThread {
});

self.perform_post_main_layout_passes(data,
root_flow,
reflow_goal,
document,
rw_data,
Expand All @@ -1604,30 +1606,28 @@ impl LayoutThread {

fn perform_post_main_layout_passes(&self,
data: &Reflow,
mut root_flow: &mut FlowRef,
reflow_goal: &ReflowGoal,
document: Option<&ServoLayoutDocument>,
rw_data: &mut LayoutThreadData,
layout_context: &mut LayoutContext) {
// Build the display list if necessary, and send it to the painter.
if let Some(mut root_flow) = self.root_flow.borrow().clone() {
self.compute_abs_pos_and_build_display_list(data,
reflow_goal,
document,
FlowRef::deref_mut(&mut root_flow),
&mut *layout_context,
rw_data);
self.first_reflow.set(false);

if opts::get().trace_layout {
layout_debug::end_trace(self.generation.get());
}
self.compute_abs_pos_and_build_display_list(data,
reflow_goal,
document,
FlowRef::deref_mut(&mut root_flow),
&mut *layout_context,
rw_data);

if opts::get().dump_flow_tree {
root_flow.print("Post layout flow tree".to_owned());
}
if opts::get().trace_layout {
layout_debug::end_trace(self.generation.get());
}

self.generation.set(self.generation.get() + 1);
if opts::get().dump_flow_tree {
root_flow.print("Post layout flow tree".to_owned());
}

self.generation.set(self.generation.get() + 1);
}

fn reflow_all_nodes(flow: &mut Flow) {
Expand Down
10 changes: 10 additions & 0 deletions tests/wpt/mozilla/meta/MANIFEST.json
Original file line number Diff line number Diff line change
Expand Up @@ -14546,6 +14546,12 @@
{}
]
],
"mozilla/first-reflow-sheet-assert.html": [
[
"/_mozilla/mozilla/first-reflow-sheet-assert.html",
{}
]
],
"mozilla/focus_blur.html": [
[
"/_mozilla/mozilla/focus_blur.html",
Expand Down Expand Up @@ -27925,6 +27931,10 @@
"f2ec5f89521fb4eda64a5e70249bbfb8850c4278",
"testharness"
],
"mozilla/first-reflow-sheet-assert.html": [
"8a0cf9152c3f2421d3e418f824f02c915092d78f",
"testharness"
],
"mozilla/focus_blur.html": [
"2735c5c482e38743b0976789af858075c54408c1",
"testharness"
Expand Down
16 changes: 16 additions & 0 deletions tests/wpt/mozilla/tests/mozilla/first-reflow-sheet-assert.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<title>Issue 18631: Assertion failure when double-adding the UA sheets to the page</title>
<style>
* { display: none }
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// Trigger two forced reflows.
test(function() {
document.documentElement.offsetTop;
document.documentElement.offsetTop;
assert_true(true, "Didn't assert");
}, "Passes if it doesn't assert");
</script>