mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Make Fragment
hold ArcRefCell
inside (#34923)
Push the interior mutability into enum variants of `Fragment`, so that they can be cloned. This saves memory in the `Fragment` tree as the `Fragment` enum is now a relatively wee 16 bytes and the interior parts can be a variety of sizes. Before, every `Fragment` was the size of the biggest kind (`BoxFragment` - 248 bytes). This a step on the way toward incremental layout. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Co-authored-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
c936dd6c4e
commit
de780dcde4
18 changed files with 257 additions and 233 deletions
|
@ -52,7 +52,7 @@ pub(crate) struct ContainingBlockManager<'a, T> {
|
|||
impl<'a, T> ContainingBlockManager<'a, T> {
|
||||
pub(crate) fn get_containing_block_for_fragment(&self, fragment: &Fragment) -> &T {
|
||||
if let Fragment::Box(box_fragment) = fragment {
|
||||
match box_fragment.style.clone_position() {
|
||||
match box_fragment.borrow().style.clone_position() {
|
||||
ComputedPosition::Fixed => self.for_absolute_and_fixed_descendants,
|
||||
ComputedPosition::Absolute => self
|
||||
.for_absolute_descendants
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue