diff --git a/Cargo.lock b/Cargo.lock index 68e1d1311ad..9a6b9ace371 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1748,6 +1748,9 @@ dependencies = [ name = "malloc_size_of" version = "0.0.1" dependencies = [ + "app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "cssparser 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)", "hashglobe 0.1.0", "servo_arc 0.0.1", "smallbitvec 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3212,6 +3215,8 @@ dependencies = [ "euclid 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "malloc_size_of 0.0.1", + "malloc_size_of_derive 0.0.1", "selectors 0.19.0", "serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "servo_atoms 0.0.1", diff --git a/components/malloc_size_of/Cargo.toml b/components/malloc_size_of/Cargo.toml index d5edcc43c65..7ddb45b774e 100644 --- a/components/malloc_size_of/Cargo.toml +++ b/components/malloc_size_of/Cargo.toml @@ -9,6 +9,9 @@ publish = false path = "lib.rs" [dependencies] +app_units = "0.5.5" +cssparser = "0.21.0" +euclid = "0.15" hashglobe = { path = "../hashglobe" } servo_arc = { path = "../servo_arc" } smallbitvec = "1.0.3" diff --git a/components/malloc_size_of/lib.rs b/components/malloc_size_of/lib.rs index 5ecd29d794a..671e4b9e139 100644 --- a/components/malloc_size_of/lib.rs +++ b/components/malloc_size_of/lib.rs @@ -56,17 +56,19 @@ //! measured as well as the thing it points to. E.g. //! ` as MallocSizeOf>::size_of(field, ops)`. +extern crate app_units; +extern crate cssparser; +extern crate euclid; extern crate hashglobe; extern crate servo_arc; extern crate smallbitvec; extern crate smallvec; -use hashglobe::hash_map::HashMap; +use euclid::TypedSize2D; use servo_arc::Arc; -use smallbitvec::SmallBitVec; use smallvec::{Array, SmallVec}; -use std::collections::HashSet; use std::hash::{BuildHasher, Hash}; +use std::ops::Range; use std::os::raw::c_void; /// A C function that takes a pointer to a heap allocation and returns its size. @@ -186,6 +188,12 @@ pub trait MallocConditionalShallowSizeOf { fn conditional_shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize; } +impl MallocSizeOf for String { + fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { + unsafe { ops.malloc_size_of(self.as_ptr()) } + } +} + impl MallocShallowSizeOf for Box { fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize { unsafe { ops.malloc_size_of(&**self) } @@ -263,7 +271,7 @@ impl MallocSizeOf for SmallVec } } -impl MallocShallowSizeOf for HashSet +impl MallocShallowSizeOf for std::collections::HashSet where T: Eq + Hash, S: BuildHasher { @@ -276,7 +284,7 @@ impl MallocShallowSizeOf for HashSet } } -impl MallocSizeOf for HashSet +impl MallocSizeOf for std::collections::HashSet where T: Eq + Hash + MallocSizeOf, S: BuildHasher, { @@ -289,20 +297,40 @@ impl MallocSizeOf for HashSet } } -impl MallocShallowSizeOf for HashMap +impl MallocShallowSizeOf for hashglobe::hash_set::HashSet + where T: Eq + Hash, + S: BuildHasher +{ + fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize { + // See the implementation for std::collections::HashSet for details. + self.iter().next().map_or(0, |t| unsafe { ops.malloc_enclosing_size_of(t) }) + } +} + +impl MallocSizeOf for hashglobe::hash_set::HashSet + where T: Eq + Hash + MallocSizeOf, + S: BuildHasher, +{ + fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { + let mut n = self.shallow_size_of(ops); + for t in self.iter() { + n += t.size_of(ops); + } + n + } +} + +impl MallocShallowSizeOf for hashglobe::hash_map::HashMap where K: Eq + Hash, S: BuildHasher { fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize { - // The first value from the iterator gives us an interior pointer. - // `ops.malloc_enclosing_size_of()` then gives us the storage size. - // This assumes that the `HashMap`'s contents (keys, values, and - // hashes) are all stored in a single contiguous heap allocation. + // See the implementation for std::collections::HashSet for details. self.values().next().map_or(0, |v| unsafe { ops.malloc_enclosing_size_of(v) }) } } -impl MallocSizeOf for HashMap +impl MallocSizeOf for hashglobe::hash_map::HashMap where K: Eq + Hash + MallocSizeOf, V: MallocSizeOf, S: BuildHasher, @@ -356,6 +384,14 @@ impl MallocConditionalSizeOf for Arc { } } +impl MallocSizeOf for TypedSize2D { + fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { + let n = self.width.size_of(ops) + self.width.size_of(ops); + assert!(n == 0); // It would be very strange to have a non-zero value here... + n + } +} + /// For use on types where size_of() returns 0. #[macro_export] macro_rules! size_of_is_0( @@ -381,12 +417,18 @@ macro_rules! size_of_is_0( ); ); -size_of_is_0!(char, str); +size_of_is_0!(bool, char, str); size_of_is_0!(u8, u16, u32, u64, usize); size_of_is_0!(i8, i16, i32, i64, isize); -size_of_is_0!(bool, f32, f64); +size_of_is_0!(f32, f64); + +size_of_is_0!(Range, Range, Range, Range, Range); +size_of_is_0!(Range, Range, Range, Range, Range); +size_of_is_0!(Range, Range); + +size_of_is_0!(app_units::Au); +size_of_is_0!(cssparser::RGBA, cssparser::TokenSerializationType); // XXX: once we upgrade smallbitvec to 1.0.4, use the new heap_ptr() method to // implement this properly -size_of_is_0!(SmallBitVec); - +size_of_is_0!(smallbitvec::SmallBitVec); diff --git a/components/style/counter_style/mod.rs b/components/style/counter_style/mod.rs index 6bdd22d8e07..cb0a9f3d8c7 100644 --- a/components/style/counter_style/mod.rs +++ b/components/style/counter_style/mod.rs @@ -342,6 +342,7 @@ impl ToCss for System { } /// https://drafts.csswg.org/css-counter-styles/#typedef-symbol +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)] pub enum Symbol { /// @@ -489,6 +490,7 @@ impl Parse for Fallback { } /// https://drafts.csswg.org/css-counter-styles/#descdef-counter-style-symbols +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)] pub struct Symbols(pub Vec); diff --git a/components/style/custom_properties.rs b/components/style/custom_properties.rs index 6d72bb7b369..974f27e47eb 100644 --- a/components/style/custom_properties.rs +++ b/components/style/custom_properties.rs @@ -40,6 +40,7 @@ pub fn parse_name(s: &str) -> Result<&str, ()> { /// We preserve the original CSS for serialization, and also the variable /// references to other custom property names. #[derive(Clone, Debug, PartialEq)] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue { css: String, diff --git a/components/style/gecko/url.rs b/components/style/gecko/url.rs index 0c2348fbaa2..04d3459aeec 100644 --- a/components/style/gecko/url.rs +++ b/components/style/gecko/url.rs @@ -15,19 +15,22 @@ use std::fmt; use style_traits::{ToCss, ParseError}; /// A specified url() value for gecko. Gecko does not eagerly resolve SpecifiedUrls. -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, MallocSizeOf, PartialEq)] pub struct SpecifiedUrl { /// The URL in unresolved string form. /// /// Refcounted since cloning this should be cheap and data: uris can be /// really large. + #[ignore_malloc_size_of = "XXX: do this once bug 1397971 lands"] serialization: Arc, /// The URL extra data. + #[ignore_malloc_size_of = "RefPtr is tricky, and there aren't many of these in practise"] pub extra_data: RefPtr, /// Cache ImageValue, if any, so that we can reuse it while rematching a /// a property with this specified url value. + #[ignore_malloc_size_of = "XXX: do this once bug 1397971 lands"] pub image_value: Option>, } trivial_to_computed_value!(SpecifiedUrl); diff --git a/components/style/gecko_string_cache/namespace.rs b/components/style/gecko_string_cache/namespace.rs index c8c4deee8b6..61a89a86f06 100644 --- a/components/style/gecko_string_cache/namespace.rs +++ b/components/style/gecko_string_cache/namespace.rs @@ -18,7 +18,7 @@ macro_rules! ns { } /// A Gecko namespace is just a wrapped atom. -#[derive(Clone, Debug, Default, Eq, Hash, PartialEq)] +#[derive(Clone, Debug, Default, Eq, Hash, MallocSizeOf, PartialEq)] pub struct Namespace(pub Atom); impl PrecomputedHash for Namespace { diff --git a/components/style/macros.rs b/components/style/macros.rs index e2791e6f09f..7a5d8ba9abf 100644 --- a/components/style/macros.rs +++ b/components/style/macros.rs @@ -45,6 +45,7 @@ macro_rules! define_numbered_css_keyword_enum { ($name: ident: $( $css: expr => $variant: ident = $value: expr ),+) => { #[allow(non_camel_case_types, missing_docs)] #[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub enum $name { $( $variant = $value ),+ @@ -99,6 +100,7 @@ macro_rules! add_impls_for_keyword_enum { macro_rules! define_keyword_type { ($name: ident, $css: expr) => { #[allow(missing_docs)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq)] #[derive(ToAnimatedZero, ToComputedValue, ToCss)] diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs index 3e24a08103b..be7bb7ea9c5 100644 --- a/components/style/properties/helpers.mako.rs +++ b/components/style/properties/helpers.mako.rs @@ -117,6 +117,7 @@ use values::computed::ComputedVecIter; /// The computed value, effectively a list of single values. + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq)] % if need_animatable or animation_value_type == "ComputedValue": @@ -178,6 +179,7 @@ /// The specified value of ${name}. #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue(pub Vec); @@ -443,6 +445,7 @@ ${gecko_keyword_conversion(keyword, keyword.values_for(product), type="T", cast_to="i32")} } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Copy, Debug, Eq, PartialEq, ToCss)] pub enum SpecifiedValue { Keyword(computed_value::T), @@ -941,6 +944,7 @@ pub type T = ::values::computed::${length_type}; } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub struct SpecifiedValue(pub ${length_type}); diff --git a/components/style/properties/helpers/animated_properties.mako.rs b/components/style/properties/helpers/animated_properties.mako.rs index 0f1db632c91..8771093624a 100644 --- a/components/style/properties/helpers/animated_properties.mako.rs +++ b/components/style/properties/helpers/animated_properties.mako.rs @@ -202,6 +202,7 @@ pub fn nscsspropertyid_is_animatable(property: nsCSSPropertyID) -> bool { /// a shorthand with at least one transitionable longhand component, or an unsupported property. // NB: This needs to be here because it needs all the longhands generated // beforehand. +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, Eq, Hash, PartialEq, ToCss, ToComputedValue)] pub enum TransitionProperty { diff --git a/components/style/properties/longhand/background.mako.rs b/components/style/properties/longhand/background.mako.rs index 5e608315f19..4ec1d3151e8 100644 --- a/components/style/properties/longhand/background.mako.rs +++ b/components/style/properties/longhand/background.mako.rs @@ -53,6 +53,7 @@ ${helpers.predefined_type("background-image", "ImageLayer", "round" => Round, "no-repeat" => NoRepeat); + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub enum SpecifiedValue { @@ -65,6 +66,7 @@ ${helpers.predefined_type("background-image", "ImageLayer", pub use super::RepeatKeyword; #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub RepeatKeyword, pub RepeatKeyword); } diff --git a/components/style/properties/longhand/border.mako.rs b/components/style/properties/longhand/border.mako.rs index 25460d010d9..615d7bafa0c 100644 --- a/components/style/properties/longhand/border.mako.rs +++ b/components/style/properties/longhand/border.mako.rs @@ -82,11 +82,13 @@ ${helpers.gecko_keyword_conversion(Keyword('border-style', pub mod computed_value { use cssparser::RGBA; #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub Option>); } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { None, @@ -233,11 +235,13 @@ ${helpers.predefined_type("border-image-outset", "LengthOrNumberRect", pub mod computed_value { pub use super::RepeatKeyword; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub struct T(pub RepeatKeyword, pub RepeatKeyword); } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub struct SpecifiedValue(pub RepeatKeyword, diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs index 52befd9c67d..b63a9329288 100644 --- a/components/style/properties/longhand/box.mako.rs +++ b/components/style/properties/longhand/box.mako.rs @@ -137,6 +137,7 @@ #[allow(non_camel_case_types)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub enum SpecifiedValue { % for value in values: @@ -407,6 +408,7 @@ ${helpers.predefined_type("transition-delay", } #[derive(Clone, Debug, Eq, Hash, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue(pub Option); @@ -500,6 +502,7 @@ ${helpers.predefined_type("animation-timing-function", } // https://drafts.csswg.org/css-animations/#animation-iteration-count + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss, ToComputedValue)] pub enum SpecifiedValue { @@ -635,6 +638,7 @@ ${helpers.predefined_type( use values::computed::{Length, LengthOrPercentage}; #[derive(Clone, Copy, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct ComputedMatrix { pub m11: CSSFloat, pub m12: CSSFloat, pub m13: CSSFloat, pub m14: CSSFloat, @@ -644,6 +648,7 @@ ${helpers.predefined_type( } #[derive(Clone, Copy, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct ComputedMatrixWithPercents { pub m11: CSSFloat, pub m12: CSSFloat, pub m13: CSSFloat, pub m14: CSSFloat, @@ -677,6 +682,7 @@ ${helpers.predefined_type( } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum ComputedOperation { Matrix(ComputedMatrix), @@ -710,6 +716,7 @@ ${helpers.predefined_type( } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub Option>); } @@ -721,6 +728,7 @@ ${helpers.predefined_type( /// /// Some transformations can be expressed by other more general functions. #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedOperation { /// Represents a 2D 2x3 matrix. @@ -911,6 +919,7 @@ ${helpers.predefined_type( } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue(Vec); @@ -1628,6 +1637,7 @@ ${helpers.predefined_type("transform-origin", bitflags! { #[derive(ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub flags SpecifiedValue: u8 { const LAYOUT = 0x01, @@ -1769,6 +1779,7 @@ ${helpers.single_keyword("-moz-orient", } #[derive(Clone, Debug, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { Auto, @@ -1840,6 +1851,7 @@ ${helpers.predefined_type( bitflags! { /// These constants match Gecko's `NS_STYLE_TOUCH_ACTION_*` constants. + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(ToComputedValue)] pub flags SpecifiedValue: u8 { const TOUCH_ACTION_NONE = structs::NS_STYLE_TOUCH_ACTION_NONE as u8, diff --git a/components/style/properties/longhand/color.mako.rs b/components/style/properties/longhand/color.mako.rs index 620d2a11b29..1eb761a3cbb 100644 --- a/components/style/properties/longhand/color.mako.rs +++ b/components/style/properties/longhand/color.mako.rs @@ -67,6 +67,10 @@ pub mod system_colors { pub type SystemColor = LookAndFeel_ColorID; + // It's hard to implement MallocSizeOf for LookAndFeel_ColorID because it + // is a bindgen type. So we implement it on the typedef instead. + size_of_is_0!(SystemColor); + impl ToCss for SystemColor { fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { let s = match *self { diff --git a/components/style/properties/longhand/counters.mako.rs b/components/style/properties/longhand/counters.mako.rs index 16aca0ff60f..fa1eab1a623 100644 --- a/components/style/properties/longhand/counters.mako.rs +++ b/components/style/properties/longhand/counters.mako.rs @@ -37,6 +37,7 @@ use values::specified::Attr; #[cfg_attr(feature = "servo", derive(HeapSizeOf))] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)] pub enum ContentItem { /// Literal string content. @@ -97,6 +98,7 @@ } } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)] pub enum T { @@ -236,6 +238,7 @@ use style_traits::ToCss; use values::CustomIdent; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq)] pub struct SpecifiedValue(pub Vec<(CustomIdent, specified::Integer)>); @@ -245,6 +248,7 @@ use values::CustomIdent; #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub Vec<(CustomIdent, i32)>); diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs index eafff197287..ec611a4edec 100644 --- a/components/style/properties/longhand/font.mako.rs +++ b/components/style/properties/longhand/font.mako.rs @@ -85,6 +85,7 @@ macro_rules! impl_gecko_keyword_conversions { pub use self::FontFamily as SingleComputedValue; #[derive(Clone, Debug, Eq, Hash, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub enum FontFamily { FamilyName(FamilyName), @@ -92,6 +93,7 @@ macro_rules! impl_gecko_keyword_conversions { } #[derive(Clone, Debug, Eq, Hash, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub struct FamilyName { pub name: Atom, @@ -99,6 +101,7 @@ macro_rules! impl_gecko_keyword_conversions { } #[derive(Clone, Debug, Eq, Hash, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub enum FamilyNameSyntax { /// The family name was specified in a quoted form, e.g. "Font Name" @@ -296,6 +299,7 @@ macro_rules! impl_gecko_keyword_conversions { } #[derive(Clone, Debug, Eq, Hash, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub Vec); } @@ -313,6 +317,7 @@ macro_rules! impl_gecko_keyword_conversions { SpecifiedValue::parse(input) } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, Eq, Hash, PartialEq)] pub enum SpecifiedValue { Values(Vec), @@ -430,6 +435,7 @@ ${helpers.single_keyword_system("font-variant-caps", use properties::longhands::system_font::SystemFont; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Copy, Debug, Eq, PartialEq, ToCss)] pub enum SpecifiedValue { @@ -484,6 +490,7 @@ ${helpers.single_keyword_system("font-variant-caps", /// However, system fonts may provide other values. Pango /// may provide 350, 380, and 1000 (on top of the existing values), for example. #[derive(Clone, ComputeSquaredDistance, Copy, Debug, Eq, Hash, PartialEq, ToCss)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] pub struct T(pub u16); @@ -614,6 +621,7 @@ ${helpers.single_keyword_system("font-variant-caps", } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { Length(specified::LengthOrPercentage), @@ -646,6 +654,7 @@ ${helpers.single_keyword_system("font-variant-caps", /// CSS font keywords #[derive(Clone, Copy, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum KeywordSize { XXSmall = 1, // This is to enable the NonZero optimization @@ -1080,6 +1089,7 @@ ${helpers.single_keyword_system("font-variant-caps", #[derive(Clone, Copy, Debug, PartialEq, ToCss)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { None, @@ -1127,6 +1137,7 @@ ${helpers.single_keyword_system("font-variant-caps", use values::CSSFloat; use values::animated::{ToAnimatedValue, ToAnimatedZero}; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToCss)] pub enum T { @@ -1202,6 +1213,7 @@ ${helpers.single_keyword_system("font-variant-caps", } #[derive(Clone, Debug, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue { pub weight: bool, @@ -1309,6 +1321,7 @@ ${helpers.single_keyword_system("font-kerning", #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum VariantAlternates { Stylistic(CustomIdent), @@ -1321,10 +1334,12 @@ ${helpers.single_keyword_system("font-kerning", } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct VariantAlternatesList(pub Box<[VariantAlternates]>); #[derive(Clone, Debug, PartialEq, ToCss)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { Value(VariantAlternatesList), @@ -1518,6 +1533,7 @@ macro_rules! exclusive_value { bitflags! { + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub flags VariantEastAsian: u16 { const NORMAL = 0, @@ -1533,7 +1549,7 @@ macro_rules! exclusive_value { } } - + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub enum SpecifiedValue { Value(VariantEastAsian), @@ -1663,6 +1679,7 @@ macro_rules! exclusive_value { bitflags! { + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub flags VariantLigatures: u16 { const NORMAL = 0, @@ -1678,7 +1695,7 @@ macro_rules! exclusive_value { } } - + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub enum SpecifiedValue { Value(VariantLigatures), @@ -1822,6 +1839,7 @@ macro_rules! exclusive_value { bitflags! { + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub flags VariantNumeric: u8 { const NORMAL = 0, @@ -1836,8 +1854,7 @@ macro_rules! exclusive_value { } } - - + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub enum SpecifiedValue { Value(VariantNumeric), @@ -1977,6 +1994,7 @@ ${helpers.single_keyword_system("font-variant-position", use properties::longhands::system_font::SystemFont; use values::generics::FontSettings; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub enum SpecifiedValue { Value(computed_value::T), @@ -2048,6 +2066,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control- use byteorder::{BigEndian, ByteOrder}; #[derive(Clone, Debug, Eq, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { Normal, @@ -2105,6 +2124,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control- // it and store it as a 32-bit integer // (see http://www.microsoft.com/typography/otspec/languagetags.htm). #[derive(Clone, Copy, Debug, Eq, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub u32); } @@ -2213,6 +2233,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control- } #[derive(Clone, Debug, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub Atom); } @@ -2269,6 +2290,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control- 0 } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Copy, Debug, PartialEq)] pub enum SpecifiedValue { Relative(i32), @@ -2358,6 +2380,7 @@ ${helpers.single_keyword("-moz-math-variant", use values::computed::Length; use values::specified::length::{AU_PER_PT, AU_PER_PX, FontBaseSize, NoCalcLength}; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub struct SpecifiedValue(pub NoCalcLength); @@ -2416,6 +2439,7 @@ ${helpers.single_keyword("-moz-math-variant", } #[derive(Clone, Debug, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] /// text-zoom. Enable if true, disable if false pub struct T(pub bool); @@ -2470,7 +2494,7 @@ ${helpers.single_keyword("-moz-math-variant", kw_cast = """font_style font_variant_caps font_stretch font_kerning font_variant_position""".split() %> - #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, ToCss)] + #[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq, ToCss)] pub enum SystemFont { % for font in system_fonts: ${to_camel_case(font)}, diff --git a/components/style/properties/longhand/inherited_box.mako.rs b/components/style/properties/longhand/inherited_box.mako.rs index 23a621309f2..87471ccdae7 100644 --- a/components/style/properties/longhand/inherited_box.mako.rs +++ b/components/style/properties/longhand/inherited_box.mako.rs @@ -71,6 +71,7 @@ ${helpers.single_keyword("image-rendering", const TWO_PI: f64 = 2.0 * PI; #[derive(Clone, Copy, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue { pub angle: Option, @@ -102,6 +103,7 @@ ${helpers.single_keyword("image-rendering", use values::specified::Angle; #[derive(Clone, Copy, Debug, Eq, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum Orientation { Angle0 = 0, @@ -134,6 +136,7 @@ ${helpers.single_keyword("image-rendering", } #[derive(Clone, Copy, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum T { FromImage, @@ -257,6 +260,7 @@ ${helpers.single_keyword("image-rendering", use std::fmt; use style_traits::ToCss; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))] #[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)] pub struct SpecifiedValue(pub bool); diff --git a/components/style/properties/longhand/inherited_svg.mako.rs b/components/style/properties/longhand/inherited_svg.mako.rs index 41039b2954b..5a98f464d11 100644 --- a/components/style/properties/longhand/inherited_svg.mako.rs +++ b/components/style/properties/longhand/inherited_svg.mako.rs @@ -162,6 +162,7 @@ ${helpers.predefined_type("marker-end", "UrlOrNone", "Either::Second(None_)", /// /// Higher priority values, i.e. the values specified first, /// will be painted first (and may be covered by paintings of lower priority) + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)] pub struct SpecifiedValue(pub u8); diff --git a/components/style/properties/longhand/inherited_table.mako.rs b/components/style/properties/longhand/inherited_table.mako.rs index f234d7f1a60..13a6e7c45d6 100644 --- a/components/style/properties/longhand/inherited_table.mako.rs +++ b/components/style/properties/longhand/inherited_table.mako.rs @@ -29,6 +29,7 @@ ${helpers.single_keyword("caption-side", "top bottom", use values::animated::{ToAnimatedValue, ToAnimatedZero}; use values::computed::NonNegativeLength; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToCss)] pub struct T { @@ -59,6 +60,7 @@ ${helpers.single_keyword("caption-side", "top bottom", } } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub struct SpecifiedValue { diff --git a/components/style/properties/longhand/inherited_text.mako.rs b/components/style/properties/longhand/inherited_text.mako.rs index 82967ee2440..bcbe35287ce 100644 --- a/components/style/properties/longhand/inherited_text.mako.rs +++ b/components/style/properties/longhand/inherited_text.mako.rs @@ -175,6 +175,7 @@ ${helpers.single_keyword("text-align-last", use std::fmt; use style_traits::ToCss; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum SpecifiedValue { Keyword(computed_value::T), @@ -288,6 +289,7 @@ ${helpers.predefined_type("word-spacing", use style_traits::ToCss; #[derive(Clone, Copy, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct SpecifiedValue { pub underline: Option, @@ -430,6 +432,7 @@ ${helpers.predefined_type( pub mod computed_value { #[derive(Clone, Debug, PartialEq, ToCss)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, ToComputedValue))] pub enum T { Keyword(KeywordValue), @@ -438,6 +441,7 @@ ${helpers.predefined_type( } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct KeywordValue { pub fill: bool, @@ -446,6 +450,7 @@ ${helpers.predefined_type( } #[derive(Clone, Debug, PartialEq, ToCss)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum SpecifiedValue { Keyword(KeywordValue), @@ -454,6 +459,7 @@ ${helpers.predefined_type( } #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum KeywordValue { Fill(bool), @@ -621,6 +627,7 @@ ${helpers.predefined_type( "left" => Left); add_impls_for_keyword_enum!(HorizontalWritingModeValue); + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToComputedValue, ToCss)] pub struct SpecifiedValue(pub HorizontalWritingModeValue, pub VerticalWritingModeValue); diff --git a/components/style/properties/longhand/list.mako.rs b/components/style/properties/longhand/list.mako.rs index 92167fdf91d..4554f308221 100644 --- a/components/style/properties/longhand/list.mako.rs +++ b/components/style/properties/longhand/list.mako.rs @@ -41,7 +41,7 @@ ${helpers.single_keyword("list-style-position", "outside inside", animation_valu use values::generics::CounterStyleOrNone; /// | | none - #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue, ToCss)] + #[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue, ToCss)] pub enum T { CounterStyle(CounterStyleOrNone), String(String), @@ -104,6 +104,7 @@ ${helpers.single_keyword("list-style-position", "outside inside", animation_valu pub mod computed_value { use values::specified::UrlOrNone; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToCss)] pub struct T(pub UrlOrNone); @@ -145,6 +146,7 @@ ${helpers.single_keyword("list-style-position", "outside inside", animation_valu pub use self::computed_value::T as SpecifiedValue; pub mod computed_value { + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, PartialEq, ToComputedValue)] pub struct T(pub Vec<(String, String)>); diff --git a/components/style/properties/longhand/pointing.mako.rs b/components/style/properties/longhand/pointing.mako.rs index 0965640482e..09f9e114609 100644 --- a/components/style/properties/longhand/pointing.mako.rs +++ b/components/style/properties/longhand/pointing.mako.rs @@ -21,6 +21,7 @@ #[cfg(feature = "gecko")] use values::specified::url::SpecifiedUrl; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)] pub enum Keyword { @@ -32,14 +33,14 @@ pub type T = Keyword; #[cfg(feature = "gecko")] - #[derive(Clone, Debug, PartialEq, ToComputedValue)] + #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)] pub struct Image { pub url: SpecifiedUrl, pub hotspot: Option<(f32, f32)>, } #[cfg(feature = "gecko")] - #[derive(Clone, Debug, PartialEq, ToComputedValue)] + #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)] pub struct T { pub images: Vec, pub keyword: Keyword, diff --git a/components/style/properties/longhand/position.mako.rs b/components/style/properties/longhand/position.mako.rs index d3989dc90ed..b1904aae146 100644 --- a/components/style/properties/longhand/position.mako.rs +++ b/components/style/properties/longhand/position.mako.rs @@ -296,6 +296,7 @@ ${helpers.predefined_type("object-position", pub mod computed_value { #[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum AutoFlow { Row, @@ -303,6 +304,7 @@ ${helpers.predefined_type("object-position", } #[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T { pub autoflow: AutoFlow, @@ -435,6 +437,7 @@ ${helpers.predefined_type("object-position", SpecifiedValue::parse(context, input) } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq)] pub struct TemplateAreas { pub areas: Box<[NamedArea]>, @@ -442,6 +445,7 @@ ${helpers.predefined_type("object-position", pub width: u32, } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq)] pub struct NamedArea { pub name: Box, diff --git a/components/style/properties/longhand/table.mako.rs b/components/style/properties/longhand/table.mako.rs index 5cc753b38ab..7d6c7aacea8 100644 --- a/components/style/properties/longhand/table.mako.rs +++ b/components/style/properties/longhand/table.mako.rs @@ -20,6 +20,7 @@ ${helpers.single_keyword("table-layout", "auto fixed", use style_traits::ToCss; #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T(pub i32); diff --git a/components/style/properties/longhand/text.mako.rs b/components/style/properties/longhand/text.mako.rs index 78d98d63791..242ddde4988 100644 --- a/components/style/properties/longhand/text.mako.rs +++ b/components/style/properties/longhand/text.mako.rs @@ -19,6 +19,7 @@ use style_traits::ToCss; + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, Eq, PartialEq, ToCss)] pub enum Side { @@ -27,6 +28,7 @@ String(Box), } + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Debug, Eq, PartialEq, ToCss)] pub struct SpecifiedValue { @@ -38,6 +40,7 @@ pub use super::Side; #[derive(Clone, Debug, PartialEq)] + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct T { // When the specified value only has one side, that's the "second" @@ -148,6 +151,7 @@ ${helpers.single_keyword("unicode-bidi", use style_traits::ToCss; bitflags! { + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(ToComputedValue)] pub flags SpecifiedValue: u8 { diff --git a/components/style/properties/longhand/ui.mako.rs b/components/style/properties/longhand/ui.mako.rs index 2e3f52d12be..492cd8ca3f4 100644 --- a/components/style/properties/longhand/ui.mako.rs +++ b/components/style/properties/longhand/ui.mako.rs @@ -51,6 +51,7 @@ ${helpers.single_keyword("-moz-window-shadow", "none default menu tooltip sheet" use style_traits::ToCss; pub mod computed_value { + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)] pub struct T(pub bool); diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 91429401b6c..e700d69e6ea 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -29,7 +29,6 @@ use font_metrics::FontMetricsProvider; #[cfg(feature = "gecko")] use gecko_bindings::structs::{self, nsCSSPropertyID}; #[cfg(feature = "servo")] use logical_geometry::{LogicalMargin, PhysicalSide}; use logical_geometry::WritingMode; -#[cfg(feature = "gecko")] use malloc_size_of::{MallocShallowSizeOf, MallocSizeOf, MallocSizeOfOps}; use media_queries::Device; use parser::ParserContext; use properties::animated_properties::AnimatableLonghand; @@ -380,6 +379,7 @@ impl PropertyDeclarationIdSet { } /// An enum to represent a CSS Wide keyword. +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Copy, Debug, Eq, PartialEq, ToCss)] pub enum CSSWideKeyword { @@ -445,6 +445,7 @@ bitflags! { /// An identifier for a given longhand property. #[derive(Clone, Copy, Debug, Eq, PartialEq)] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum LonghandId { % for i, property in enumerate(data.longhands): @@ -783,12 +784,16 @@ pub enum DeclaredValue<'a, T: 'a> { /// that PropertyDeclaration can avoid embedding a DeclaredValue (and its /// extra discriminant word) and synthesize dependent DeclaredValues for /// PropertyDeclaration instances as needed. +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, Eq, PartialEq)] pub enum DeclaredValueOwned { /// A known specified value from the stylesheet. Value(T), /// An unparsed value that contains `var()` functions. - WithVariables(Arc), + WithVariables( + #[cfg_attr(feature = "gecko", ignore_malloc_size_of = "XXX: how to handle this?")] + Arc + ), /// An CSS-wide keyword. CSSWideKeyword(CSSWideKeyword), } @@ -1267,6 +1272,7 @@ impl PropertyParserContext { } /// Servo's representation for a property declaration. +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, PartialEq)] pub enum PropertyDeclaration { % for property in data.longhands: @@ -1280,7 +1286,11 @@ pub enum PropertyDeclaration { /// A css-wide keyword. CSSWideKeyword(LonghandId, CSSWideKeyword), /// An unparsed value that contains `var()` functions. - WithVariables(LonghandId, Arc), + WithVariables( + LonghandId, + #[cfg_attr(feature = "gecko", ignore_malloc_size_of = "XXX: how to handle this?")] + Arc + ), /// A custom property declaration, with the property name and the declared /// value. Custom(::custom_properties::Name, DeclaredValueOwned>), @@ -1327,31 +1337,6 @@ impl ToCss for PropertyDeclaration { } } -#[cfg(feature = "gecko")] -impl MallocSizeOf for PropertyDeclaration { - fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { - match *self { - % for property in data.longhands: - % if property.boxed and property.is_vector: - <% raise Exception("this should not happen! not smart to box a vector here") %> - % elif property.boxed: - PropertyDeclaration::${property.camel_case}(ref sv_box) => { - as MallocShallowSizeOf>::shallow_size_of(sv_box, ops) - } - % elif property.is_vector: - PropertyDeclaration::${property.camel_case}(ref sv_vec) => { - sv_vec.0.shallow_size_of(ops) - } - % endif - % endfor - PropertyDeclaration::CSSWideKeyword(..) => 0, - PropertyDeclaration::WithVariables(..) => 0, - PropertyDeclaration::Custom(..) => 0, - _ => 0, - } - } -} - impl PropertyDeclaration { /// Given a property declaration, return the property declaration id. pub fn id(&self) -> PropertyDeclarationId { @@ -1711,6 +1696,7 @@ pub mod style_structs { % else: #[derive(Clone, Debug, PartialEq)] % endif + #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] /// The ${style_struct.name} style struct. pub struct ${style_struct.name} { diff --git a/components/style/values/computed/angle.rs b/components/style/values/computed/angle.rs index b26c8ccc02b..4704d8c6bba 100644 --- a/components/style/values/computed/angle.rs +++ b/components/style/values/computed/angle.rs @@ -14,6 +14,7 @@ use values::distance::{ComputeSquaredDistance, SquaredDistance}; /// A computed angle. #[animate(fallback = "Self::animate_fallback")] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))] #[derive(Animate, Clone, Copy, Debug, PartialEq)] #[derive(PartialOrd, ToAnimatedZero)] diff --git a/components/style/values/computed/color.rs b/components/style/values/computed/color.rs index c28bd88eddd..7adfa646d7e 100644 --- a/components/style/values/computed/color.rs +++ b/components/style/values/computed/color.rs @@ -15,10 +15,12 @@ use values::animated::color::{Color as AnimatedColor, RGBA as AnimatedRGBA}; /// Conceptually, the formula is "color * (1 - p) + currentcolor * p" /// where p is foreground_ratio. #[derive(Clone, Copy, Debug)] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub struct Color { /// RGBA color. pub color: RGBA, + /// The ratio of currentcolor in complex color. pub foreground_ratio: u8, } diff --git a/components/style/values/computed/image.rs b/components/style/values/computed/image.rs index 99821683744..b2604324f76 100644 --- a/components/style/values/computed/image.rs +++ b/components/style/values/computed/image.rs @@ -50,6 +50,7 @@ pub type GradientKind = GenericGradientKind< /// A computed gradient line direction. #[derive(Clone, Copy, Debug, PartialEq)] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] pub enum LineDirection { /// An angle. diff --git a/components/style/values/computed/length.rs b/components/style/values/computed/length.rs index a83e86bd1e6..344bf4ca68e 100644 --- a/components/style/values/computed/length.rs +++ b/components/style/values/computed/length.rs @@ -66,6 +66,7 @@ impl ToComputedValue for specified::Length { } #[allow(missing_docs)] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, Copy, Debug, PartialEq, ToAnimatedZero)] pub struct CalcLengthOrPercentage { @@ -293,6 +294,7 @@ impl ToComputedValue for specified::CalcLengthOrPercentage { #[allow(missing_docs)] #[animate(fallback = "Self::animate_fallback")] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[css(derive_debug)] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq)] @@ -450,6 +452,7 @@ impl ToComputedValue for specified::LengthOrPercentage { #[allow(missing_docs)] #[animate(fallback = "Self::animate_fallback")] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[css(derive_debug)] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq, ToCss)] @@ -681,6 +684,7 @@ impl NonNegativeLengthOrPercentage { } /// The computed `` value. +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, PartialOrd)] #[derive(ToAnimatedValue, ToAnimatedZero)] diff --git a/components/style/values/computed/mod.rs b/components/style/values/computed/mod.rs index cad3db03aa7..407a839e5cf 100644 --- a/components/style/values/computed/mod.rs +++ b/components/style/values/computed/mod.rs @@ -379,6 +379,7 @@ impl From for CSSFloat { } #[allow(missing_docs)] +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] #[derive(Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToCss)] pub enum NumberOrPercentage { diff --git a/components/style/values/computed/percentage.rs b/components/style/values/computed/percentage.rs index 994d4fbbff9..6b54c6722c3 100644 --- a/components/style/values/computed/percentage.rs +++ b/components/style/values/computed/percentage.rs @@ -9,6 +9,7 @@ use style_traits::ToCss; use values::{CSSFloat, serialize_percentage}; /// A computed percentage. +#[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))] #[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, Default)] #[derive(PartialEq, PartialOrd, ToAnimatedZero)] diff --git a/components/style/values/computed/time.rs b/components/style/values/computed/time.rs index 5b5af99fc7c..02da4f5a681 100644 --- a/components/style/values/computed/time.rs +++ b/components/style/values/computed/time.rs @@ -10,6 +10,7 @@ use values::CSSFloat; /// A computed `