Skip to content

Commit

Permalink
Auto merge of #18696 - emilio:ua-sheets-reflow, r=jdm
Browse files Browse the repository at this point in the history
layout_thread: Avoid adding the UA sheets multiple times when there's no root flow.

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18696)
<!-- Reviewable:end -->
  • Loading branch information
bors-servo committed Oct 3, 2017
2 parents eff7686 + 8976b1a commit 3dc4614
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 16 deletions.
32 changes: 16 additions & 16 deletions components/layout_thread/lib.rs
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
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
@@ -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>

0 comments on commit 3dc4614

Please sign in to comment.