mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Share styles to inline box children via SharedInlineStyles
(#36896)
`TextRun`s use their parent style to render. Previously, these styles were cloned and stored directly in the box tree `TextRun` and resulting `TextFragment`s. This presents a problem for incremental layout. Wrapping the style in another layer of shared ownership and mutability will allow updating all `TextFragment`s during repaint-only incremental layout by simply updating the box tree styles of the original text parents. This adds a new set of borrows when accessing text styles, but also makes it so that during box tree block construction `InlineFormattingContext`s are created lazily and now `InlineFormattingContextBuilder::finish` consumes the builder, making the API make a bit more sense. This should also improve performance of box tree block construction slightly. Testing: This should not change observable behavior and thus is covered by existing WPT tests. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Co-authored-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
db83601b62
commit
a0dd2c1beb
24 changed files with 369 additions and 187 deletions
|
@ -53,6 +53,7 @@ use std::ops::Range;
|
|||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
||||
use style::properties::ComputedValues;
|
||||
use style::values::generics::length::GenericLengthPercentageOrAuto;
|
||||
pub use stylo_malloc_size_of::MallocSizeOfOps;
|
||||
use uuid::Uuid;
|
||||
|
@ -750,6 +751,12 @@ impl<T: MallocSizeOf> MallocSizeOf for accountable_refcell::RefCell<T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl MallocSizeOf for servo_arc::Arc<ComputedValues> {
|
||||
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
self.conditional_size_of(ops)
|
||||
}
|
||||
}
|
||||
|
||||
malloc_size_of_hash_map!(indexmap::IndexMap<K, V, S>);
|
||||
malloc_size_of_hash_set!(indexmap::IndexSet<T, S>);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue