mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Report memory usage for fragment and box trees. (#36553)
Add memory reporter integration for the fragment and box trees that are persisted in the layout thread. Testing: Looked at the numbers for https://servo.org and https://html.spec.whatwg.org/. The former was very small, but the latter was 700mb. --------- Signed-off-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
parent
add8c51f47
commit
c787688afc
33 changed files with 230 additions and 69 deletions
|
@ -13,6 +13,7 @@ path = "lib.rs"
|
|||
[dependencies]
|
||||
accountable-refcell = { workspace = true }
|
||||
app_units = { workspace = true }
|
||||
atomic_refcell = { workspace = true }
|
||||
content-security-policy = { workspace = true }
|
||||
crossbeam-channel = { workspace = true }
|
||||
euclid = { workspace = true }
|
||||
|
@ -28,8 +29,11 @@ string_cache = { workspace = true }
|
|||
stylo = { workspace = true }
|
||||
stylo_dom = { workspace = true }
|
||||
stylo_malloc_size_of = { workspace = true }
|
||||
taffy = { workspace = true }
|
||||
thin-vec = { workspace = true }
|
||||
tokio = { workspace = true, features = ["sync"] }
|
||||
unicode-bidi = { workspace = true }
|
||||
unicode-script = { workspace = true }
|
||||
url = { workspace = true }
|
||||
uuid = { workspace = true }
|
||||
webrender_api = { workspace = true }
|
||||
|
|
|
@ -52,6 +52,7 @@ use std::hash::{BuildHasher, Hash};
|
|||
use std::ops::Range;
|
||||
use std::sync::Arc;
|
||||
|
||||
use style::values::generics::length::GenericLengthPercentageOrAuto;
|
||||
pub use stylo_malloc_size_of::MallocSizeOfOps;
|
||||
use uuid::Uuid;
|
||||
|
||||
|
@ -219,6 +220,26 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: MallocConditionalSizeOf> MallocConditionalSizeOf for Option<T> {
|
||||
fn conditional_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
if let Some(val) = self.as_ref() {
|
||||
val.conditional_size_of(ops)
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: MallocConditionalSizeOf> MallocConditionalSizeOf for Vec<T> {
|
||||
fn conditional_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
let mut n = self.shallow_size_of(ops);
|
||||
for elem in self.iter() {
|
||||
n += elem.conditional_size_of(ops);
|
||||
}
|
||||
n
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: MallocSizeOf> MallocSizeOf for Option<T> {
|
||||
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
if let Some(val) = self.as_ref() {
|
||||
|
@ -726,7 +747,11 @@ malloc_size_of_is_0!(std::time::Duration);
|
|||
malloc_size_of_is_0!(std::time::Instant);
|
||||
malloc_size_of_is_0!(std::time::SystemTime);
|
||||
malloc_size_of_is_0!(style::font_face::SourceList);
|
||||
malloc_size_of_is_0!(style::properties::ComputedValues);
|
||||
malloc_size_of_is_0!(style::queries::values::PrefersColorScheme);
|
||||
malloc_size_of_is_0!(taffy::Layout);
|
||||
malloc_size_of_is_0!(unicode_bidi::Level);
|
||||
malloc_size_of_is_0!(unicode_script::Script);
|
||||
|
||||
macro_rules! malloc_size_of_is_webrender_malloc_size_of(
|
||||
($($ty:ty),+) => (
|
||||
|
@ -790,6 +815,12 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: MallocSizeOf> MallocSizeOf for atomic_refcell::AtomicRefCell<T> {
|
||||
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
self.borrow().size_of(ops)
|
||||
}
|
||||
}
|
||||
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::animation::DocumentAnimationSet);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::attr::AttrIdentifier);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::attr::AttrValue);
|
||||
|
@ -797,7 +828,15 @@ malloc_size_of_is_stylo_malloc_size_of!(style::color::AbsoluteColor);
|
|||
malloc_size_of_is_stylo_malloc_size_of!(style::computed_values::font_variant_caps::T);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::dom::OpaqueNode);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::invalidation::element::restyle_hints::RestyleHint);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::logical_geometry::WritingMode);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::media_queries::MediaList);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(
|
||||
style::properties::longhands::align_items::computed_value::T
|
||||
);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(
|
||||
style::properties::longhands::flex_direction::computed_value::T
|
||||
);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::properties::longhands::flex_wrap::computed_value::T);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::properties::style_structs::Font);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::selector_parser::PseudoElement);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::selector_parser::RestyleDamage);
|
||||
|
@ -805,8 +844,22 @@ malloc_size_of_is_stylo_malloc_size_of!(style::selector_parser::Snapshot);
|
|||
malloc_size_of_is_stylo_malloc_size_of!(style::shared_lock::SharedRwLock);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::stylesheets::DocumentStyleSheet);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::stylist::Stylist);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::AlignContent);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::BorderStyle);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::FontStretch);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::FontStyle);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::FontWeight);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::font::SingleFontFamily);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::computed::JustifyContent);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::specified::align::AlignFlags);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(style::values::specified::TextDecorationLine);
|
||||
malloc_size_of_is_stylo_malloc_size_of!(stylo_dom::ElementState);
|
||||
|
||||
impl<T> MallocSizeOf for GenericLengthPercentageOrAuto<T>
|
||||
where
|
||||
T: stylo_malloc_size_of::MallocSizeOf,
|
||||
{
|
||||
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
|
||||
<GenericLengthPercentageOrAuto<T> as stylo_malloc_size_of::MallocSizeOf>::size_of(self, ops)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue