diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-08-10 21:02:30 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-10 21:02:30 -0500 |
commit | 1b2450339c40dbcb65e94a346ea434d45f0edf90 (patch) | |
tree | 5678ca02c5ed91097d523ab523c623bf6fef3408 /components/layout/construct.rs | |
parent | 3c7de6b82165d251e37f699d8f724fba0a0f4556 (diff) | |
parent | 9b8eac000f86badbd0224d1cb5b183c091fe7c1b (diff) | |
download | servo-1b2450339c40dbcb65e94a346ea434d45f0edf90.tar.gz servo-1b2450339c40dbcb65e94a346ea434d45f0edf90.zip |
Auto merge of #12757 - emilio:stylo, r=bholley,pcwalton
stylo: Stop restyling display: none elements, remove the has_changed hack that made us use ReconstructFrame unconditionally.
<!-- 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
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
r? @bholley
<!-- 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/12757)
<!-- Reviewable:end -->
Diffstat (limited to 'components/layout/construct.rs')
-rw-r--r-- | components/layout/construct.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/components/layout/construct.rs b/components/layout/construct.rs index 809ecaa406a..33b88f6b8c0 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -1374,12 +1374,20 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> // We visit the kids first and reset their HAS_NEWLY_CONSTRUCTED_FLOW flags after checking // them. NOTE: Make sure not to bail out early before resetting all the flags! let mut need_to_reconstruct = false; + + // If the node has display: none, it's possible that we haven't even + // styled the children once, so we need to bailout early here. + if node.style(self.style_context()).get_box().clone_display() == display::T::none { + return false; + } + for kid in node.children() { if kid.flags().contains(HAS_NEWLY_CONSTRUCTED_FLOW) { kid.remove_flags(HAS_NEWLY_CONSTRUCTED_FLOW); need_to_reconstruct = true } } + if need_to_reconstruct { return false } |