diff options
author | Bogdan Cuza <boghison22@gmail.com> | 2015-08-05 18:31:42 +0300 |
---|---|---|
committer | Bogdan Cuza <boghison22@gmail.com> | 2015-08-13 21:44:41 +0300 |
commit | 45145108daa6af7e834a7c23530857c504b54b9c (patch) | |
tree | abc5db1c178435c5192e20049b4b51b196e7b26b /components | |
parent | 94c8dcd575a5187e02ec043c686b1cdfa6b30ba6 (diff) | |
download | servo-45145108daa6af7e834a7c23530857c504b54b9c.tar.gz servo-45145108daa6af7e834a7c23530857c504b54b9c.zip |
Measure heap memory usage for more types. Fixes #6951
Diffstat (limited to 'components')
175 files changed, 669 insertions, 94 deletions
diff --git a/components/canvas_traits/Cargo.toml b/components/canvas_traits/Cargo.toml index c08b64afc27..d0f5596ddcc 100644 --- a/components/canvas_traits/Cargo.toml +++ b/components/canvas_traits/Cargo.toml @@ -30,6 +30,12 @@ features = [ "nightly" ] version = "0.3" features = [ "serde-serialization" ] +[dependencies.plugins] +path = "../plugins" + +[dependencies.util] +path = "../util" + [dependencies] euclid = "0.1" serde_macros = "0.5" diff --git a/components/canvas_traits/lib.rs b/components/canvas_traits/lib.rs index a1e510b4965..38da38ae6e1 100644 --- a/components/canvas_traits/lib.rs +++ b/components/canvas_traits/lib.rs @@ -8,7 +8,7 @@ #![feature(custom_derive)] #![feature(nonzero)] #![feature(plugin)] -#![plugin(serde_macros)] +#![plugin(serde_macros, plugins)] extern crate core; extern crate azure; @@ -19,6 +19,7 @@ extern crate ipc_channel; extern crate layers; extern crate offscreen_gl_context; extern crate serde; +extern crate util; use azure::azure::{AzFloat, AzColor}; use azure::azure_hl::{DrawTarget, Pattern, ColorPattern}; @@ -37,6 +38,7 @@ use layers::platform::surface::NativeSurface; use offscreen_gl_context::GLContextAttributes; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use core::nonzero::NonZero; +use util::mem::HeapSizeOf; #[derive(Clone, Deserialize, Serialize)] pub enum CanvasMsg { @@ -159,7 +161,7 @@ pub enum CanvasWebGLMsg { DrawingBufferHeight(IpcSender<i32>), } -#[derive(Clone, Copy, PartialEq, Deserialize, Serialize)] +#[derive(Clone, Copy, PartialEq, Deserialize, Serialize, HeapSizeOf)] pub enum WebGLError { InvalidEnum, InvalidOperation, @@ -183,13 +185,13 @@ pub enum WebGLShaderParameter { Invalid, } -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct CanvasGradientStop { pub offset: f64, pub color: RGBA, } -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct LinearGradientStyle { pub x0: f64, pub y0: f64, @@ -211,7 +213,7 @@ impl LinearGradientStyle { } } -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct RadialGradientStyle { pub x0: f64, pub y0: f64, @@ -321,7 +323,7 @@ impl FillOrStrokeStyle { } } -#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)] +#[derive(Copy, Clone, PartialEq, Deserialize, Serialize, HeapSizeOf)] pub enum LineCapStyle { Butt = 0, Round = 1, @@ -347,7 +349,7 @@ impl LineCapStyle { } } -#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)] +#[derive(Copy, Clone, PartialEq, Deserialize, Serialize, HeapSizeOf)] pub enum LineJoinStyle { Round = 0, Bevel = 1, @@ -393,7 +395,7 @@ impl RepetitionStyle { } } -#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)] +#[derive(Copy, Clone, PartialEq, Deserialize, Serialize, HeapSizeOf)] pub enum CompositionStyle { SrcIn, SrcOut, @@ -459,7 +461,7 @@ impl CompositionStyle { } } -#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)] +#[derive(Copy, Clone, PartialEq, Deserialize, Serialize, HeapSizeOf)] pub enum BlendingStyle { Multiply, Screen, @@ -541,7 +543,7 @@ impl BlendingStyle { } } -#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)] +#[derive(Copy, Clone, PartialEq, Deserialize, Serialize, HeapSizeOf)] pub enum CompositionOrBlending { Composition(CompositionStyle), Blending(BlendingStyle), diff --git a/components/devtools_traits/Cargo.toml b/components/devtools_traits/Cargo.toml index 4df8fdb14ee..eaaaa804bfb 100644 --- a/components/devtools_traits/Cargo.toml +++ b/components/devtools_traits/Cargo.toml @@ -24,6 +24,9 @@ features = [ "serde_serialization" ] [dependencies.ipc-channel] git = "https://github.com/pcwalton/ipc-channel" +[dependencies.plugins] +path = "../plugins" + [dependencies] time = "0.1" rustc-serialize = "0.3" diff --git a/components/devtools_traits/lib.rs b/components/devtools_traits/lib.rs index 2013ec79c96..78ccd6d499a 100644 --- a/components/devtools_traits/lib.rs +++ b/components/devtools_traits/lib.rs @@ -13,7 +13,7 @@ #![deny(unsafe_code)] #![feature(custom_derive, plugin)] -#![plugin(serde_macros)] +#![plugin(serde_macros, plugins)] #[macro_use] extern crate bitflags; diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs index 922d92465a8..fbb1bae6bd7 100644 --- a/components/msg/constellation_msg.rs +++ b/components/msg/constellation_msg.rs @@ -19,6 +19,7 @@ use offscreen_gl_context::GLContextAttributes; use png::Image; use util::cursor::Cursor; use util::geometry::{PagePx, ViewportPx}; +use util::mem::HeapSizeOf; use std::collections::HashMap; use std::sync::mpsc::{channel, Sender, Receiver}; use style::viewport::ViewportConstraints; @@ -69,7 +70,7 @@ pub enum KeyState { } //N.B. Based on the glutin key enum -#[derive(Debug, PartialEq, Eq, Copy, Clone, Deserialize, Serialize)] +#[derive(Debug, PartialEq, Eq, Copy, Clone, Deserialize, Serialize, HeapSizeOf)] pub enum Key { Space, Apostrophe, diff --git a/components/net_traits/Cargo.toml b/components/net_traits/Cargo.toml index 9bfff8ba8b0..e2fb0c6b446 100644 --- a/components/net_traits/Cargo.toml +++ b/components/net_traits/Cargo.toml @@ -31,6 +31,9 @@ git = "https://github.com/pcwalton/ipc-channel" version = "0.2" features = [ "serde_serialization" ] +[dependencies.plugins] +path = "../plugins" + [dependencies] log = "0.3" euclid = "0.1" diff --git a/components/net_traits/hosts.rs b/components/net_traits/hosts.rs index 9895276dbc7..7a80c6e815e 100644 --- a/components/net_traits/hosts.rs +++ b/components/net_traits/hosts.rs @@ -51,7 +51,7 @@ pub fn parse_hostsfile(hostsfile_content: &str) -> Box<HashMap<String, String>> if token.as_bytes()[0] == b'#' { break; } - host_table.insert(token.to_owned().to_string(), address.clone()); + host_table.insert((*token).to_owned(), address.clone()); } } } diff --git a/components/net_traits/image/base.rs b/components/net_traits/image/base.rs index 7e0a2348b24..1b639555864 100644 --- a/components/net_traits/image/base.rs +++ b/components/net_traits/image/base.rs @@ -6,12 +6,13 @@ use ipc_channel::ipc::IpcSharedMemory; use png; use stb_image::image as stb_image2; use std::mem; +use util::mem::HeapSizeOf; use util::vec::byte_swap; // FIXME: Images must not be copied every frame. Instead we should atomically // reference count them. -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, HeapSizeOf)] pub enum PixelFormat { K8, // Luminance channel only KA8, // Luminance + alpha @@ -19,11 +20,12 @@ pub enum PixelFormat { RGBA8, // RGB + alpha, 8 bits per channel } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, HeapSizeOf)] pub struct Image { pub width: u32, pub height: u32, pub format: PixelFormat, + #[ignore_heap_size_of = "Defined in ipc-channel"] pub bytes: IpcSharedMemory, } diff --git a/components/net_traits/image_cache_task.rs b/components/net_traits/image_cache_task.rs index fd0ecd59832..af675bb0f85 100644 --- a/components/net_traits/image_cache_task.rs +++ b/components/net_traits/image_cache_task.rs @@ -6,6 +6,7 @@ use image::base::Image; use ipc_channel::ipc::{self, IpcSender}; use url::Url; use std::sync::Arc; +use util::mem::HeapSizeOf; /// This is optionally passed to the image cache when requesting /// and image, and returned to the specified event loop when the @@ -37,7 +38,7 @@ pub enum ImageState { } /// The returned image. -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub enum ImageResponse { /// The requested image was loaded. Loaded(Arc<Image>), diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index e4cdb2538f0..2ee8f160d10 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -9,7 +9,8 @@ #![feature(slice_patterns)] #![feature(step_by)] #![feature(vec_push_all)] -#![plugin(serde_macros)] +#![feature(custom_attribute)] +#![plugin(serde_macros, plugins)] #![plugin(regex_macros)] @@ -35,6 +36,7 @@ use msg::constellation_msg::{PipelineId}; use regex::Regex; use serde::{Deserializer, Serializer}; use url::Url; +use util::mem::HeapSizeOf; use std::thread; @@ -56,12 +58,14 @@ pub mod image { pub mod base; } -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct LoadData { pub url: Url, pub method: Method, + #[ignore_heap_size_of = "Defined in hyper"] /// Headers that will apply to the initial request only pub headers: Headers, + #[ignore_heap_size_of = "Defined in hyper"] /// Headers that will apply to the initial request and any redirects pub preserved_headers: Headers, pub data: Option<Vec<u8>>, @@ -231,7 +235,7 @@ pub struct LoadResponse { pub progress_port: IpcReceiver<ProgressMsg>, } -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct ResourceCORSData { /// CORS Preflight flag pub preflight: bool, @@ -240,7 +244,7 @@ pub struct ResourceCORSData { } /// Metadata about a loaded resource, such as is obtained from HTTP headers. -#[derive(Clone, Deserialize, Serialize)] +#[derive(Clone, Deserialize, Serialize, HeapSizeOf)] pub struct Metadata { /// Final URL after redirects. pub final_url: Url, @@ -251,6 +255,7 @@ pub struct Metadata { /// Character set. pub charset: Option<String>, + #[ignore_heap_size_of = "Defined in hyper"] /// Headers pub headers: Option<Headers>, diff --git a/components/net_traits/storage_task.rs b/components/net_traits/storage_task.rs index 028bd6d1f48..261e6cb1f7b 100644 --- a/components/net_traits/storage_task.rs +++ b/components/net_traits/storage_task.rs @@ -7,7 +7,7 @@ use url::Url; use util::str::DOMString; -#[derive(Copy, Clone, Deserialize, Serialize)] +#[derive(Copy, Clone, Deserialize, Serialize, HeapSizeOf)] pub enum StorageType { Session, Local diff --git a/components/script/cors.rs b/components/script/cors.rs index b1a1e56cb02..744864abed9 100644 --- a/components/script/cors.rs +++ b/components/script/cors.rs @@ -32,6 +32,7 @@ use hyper::status::StatusClass::Success; use unicase::UniCase; use url::{SchemeData, Url}; +use util::mem::HeapSizeOf; use util::task::spawn_named; /// Interface for network listeners concerned with CORS checks. Proper network requests @@ -40,12 +41,13 @@ pub trait AsyncCORSResponseListener { fn response_available(&self, response: CORSResponse); } -#[derive(Clone)] +#[derive(Clone, HeapSizeOf)] pub struct CORSRequest { pub origin: Url, pub destination: Url, pub mode: RequestMode, pub method: Method, + #[ignore_heap_size_of = "Defined in hyper"] pub headers: Headers, /// CORS preflight flag (https://fetch.spec.whatwg.org/#concept-http-fetch) /// Indicates that a CORS preflight request and/or cache check is to be performed @@ -55,7 +57,7 @@ pub struct CORSRequest { /// https://fetch.spec.whatwg.org/#concept-request-mode /// This only covers some of the request modes. The /// `same-origin` and `no CORS` modes are unnecessary for XHR. -#[derive(PartialEq, Copy, Clone)] +#[derive(PartialEq, Copy, Clone, HeapSizeOf)] pub enum RequestMode { CORS, // CORS ForcedPreflight // CORS-with-forced-preflight diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs index 782ab3fd884..06950a515b0 100644 --- a/components/script/dom/attr.rs +++ b/components/script/dom/attr.rs @@ -23,12 +23,13 @@ use std::cell::Ref; use std::mem; use std::ops::Deref; +#[derive(HeapSizeOf)] pub enum AttrSettingType { FirstSetAttr, ReplacedAttr, } -#[derive(JSTraceable, PartialEq, Clone)] +#[derive(JSTraceable, PartialEq, Clone, HeapSizeOf)] pub enum AttrValue { String(DOMString), TokenList(DOMString, Vec<Atom>), @@ -110,6 +111,7 @@ impl Deref for AttrValue { // https://dom.spec.whatwg.org/#interface-attr #[dom_struct] +#[derive(HeapSizeOf)] pub struct Attr { reflector_: Reflector, local_name: Atom, diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs index 373c6c7cbe0..023254d55a5 100644 --- a/components/script/dom/bindings/error.rs +++ b/components/script/dom/bindings/error.rs @@ -9,6 +9,7 @@ use dom::bindings::conversions::ToJSValConvertible; use dom::bindings::global::GlobalRef; use dom::domexception::{DOMException, DOMErrorName}; +use util::mem::HeapSizeOf; use util::str::DOMString; use js::jsapi::{JSContext, JSObject, RootedValue}; @@ -24,7 +25,7 @@ use std::ptr; use std::mem; /// DOM exceptions that can be thrown by a native DOM method. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, HeapSizeOf)] pub enum Error { /// IndexSizeError DOMException IndexSize, diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs index 053059cec9f..6412a47cbb0 100644 --- a/components/script/dom/bindings/global.rs +++ b/components/script/dom/bindings/global.rs @@ -27,6 +27,8 @@ use js::jsapi::{GetGlobalForObjectCrossCompartment}; use js::jsapi::{JSContext, JSObject, JS_GetClass, MutableHandleValue}; use url::Url; +use util::mem::HeapSizeOf; + /// A freely-copyable reference to a rooted global object. #[derive(Copy, Clone)] pub enum GlobalRef<'a> { @@ -47,7 +49,7 @@ pub enum GlobalRoot { /// A traced reference to a global object, for use in fields of traced Rust /// structures. -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] #[must_root] pub enum GlobalField { /// A field for a `Window` object. diff --git a/components/script/dom/bindings/js.rs b/components/script/dom/bindings/js.rs index 0fde5678ab2..c6199e5dff7 100644 --- a/components/script/dom/bindings/js.rs +++ b/components/script/dom/bindings/js.rs @@ -463,4 +463,3 @@ impl<T: Reflectable> Drop for Root<T> { unsafe { (*self.root_list).unroot(self); } } } - diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs index 5ee26f86543..26a4b6149a9 100644 --- a/components/script/dom/bindings/str.rs +++ b/components/script/dom/bindings/str.rs @@ -11,8 +11,10 @@ use std::ops; use std::str; use std::str::FromStr; +use util::mem::HeapSizeOf; + /// Encapsulates the IDL `ByteString` type. -#[derive(JSTraceable,Clone,Eq,PartialEq)] +#[derive(JSTraceable, Clone, Eq, PartialEq, HeapSizeOf)] pub struct ByteString(Vec<u8>); impl ByteString { diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index b20c5997a7b..51a5ac0ab8c 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -17,7 +17,7 @@ use std::borrow::ToOwned; use std::cmp::{min, max}; use std::cell::{Cell}; -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] pub enum BlobTypeId { Blob, File, @@ -25,6 +25,7 @@ pub enum BlobTypeId { // http://dev.w3.org/2006/webapi/FileAPI/#blob #[dom_struct] +#[derive(HeapSizeOf)] pub struct Blob { reflector_: Reflector, type_: BlobTypeId, diff --git a/components/script/dom/canvasgradient.rs b/components/script/dom/canvasgradient.rs index de1d428dad2..ca91a7a7857 100644 --- a/components/script/dom/canvasgradient.rs +++ b/components/script/dom/canvasgradient.rs @@ -16,13 +16,14 @@ use dom::canvasrenderingcontext2d::parse_color; // https://html.spec.whatwg.org/multipage/#canvasgradient #[dom_struct] +#[derive(HeapSizeOf)] pub struct CanvasGradient { reflector_: Reflector, style: CanvasGradientStyle, stops: DOMRefCell<Vec<CanvasGradientStop>>, } -#[derive(JSTraceable, Clone)] +#[derive(JSTraceable, Clone, HeapSizeOf)] pub enum CanvasGradientStyle { Linear(LinearGradientStyle), Radial(RadialGradientStyle), diff --git a/components/script/dom/canvaspattern.rs b/components/script/dom/canvaspattern.rs index 25293e526f0..49dae9c419b 100644 --- a/components/script/dom/canvaspattern.rs +++ b/components/script/dom/canvaspattern.rs @@ -12,6 +12,7 @@ use euclid::size::Size2D; // https://html.spec.whatwg.org/multipage/#canvaspattern #[dom_struct] +#[derive(HeapSizeOf)] pub struct CanvasPattern { reflector_: Reflector, surface_data: Vec<u8>, diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index d533d100d33..6d3c6edddda 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -51,7 +51,7 @@ use url::Url; use util::vec::byte_swap; #[must_root] -#[derive(JSTraceable, Clone)] +#[derive(JSTraceable, Clone, HeapSizeOf)] pub enum CanvasFillOrStrokeStyle { Color(RGBA), Gradient(JS<CanvasGradient>), @@ -60,10 +60,12 @@ pub enum CanvasFillOrStrokeStyle { // https://html.spec.whatwg.org/multipage/#canvasrenderingcontext2d #[dom_struct] +#[derive(HeapSizeOf)] pub struct CanvasRenderingContext2D { reflector_: Reflector, global: GlobalField, renderer_id: usize, + #[ignore_heap_size_of = "Defined in ipc-channel"] ipc_renderer: IpcSender<CanvasMsg>, canvas: JS<HTMLCanvasElement>, state: RefCell<CanvasContextState>, @@ -71,7 +73,7 @@ pub struct CanvasRenderingContext2D { } #[must_root] -#[derive(JSTraceable, Clone)] +#[derive(JSTraceable, Clone, HeapSizeOf)] struct CanvasContextState { global_alpha: f64, global_composition: CompositionOrBlending, diff --git a/components/script/dom/closeevent.rs b/components/script/dom/closeevent.rs index b4c6a955500..07a6fb39379 100644 --- a/components/script/dom/closeevent.rs +++ b/components/script/dom/closeevent.rs @@ -16,6 +16,7 @@ use script_task::ScriptChan; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct CloseEvent { event: Event, wasClean: bool, diff --git a/components/script/dom/comment.rs b/components/script/dom/comment.rs index da617903806..930d737a168 100644 --- a/components/script/dom/comment.rs +++ b/components/script/dom/comment.rs @@ -16,6 +16,7 @@ use util::str::DOMString; /// An HTML comment. #[dom_struct] +#[derive(HeapSizeOf)] pub struct Comment { characterdata: CharacterData, } diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 686c93b642c..0d7d3c9d8f3 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -13,6 +13,7 @@ use util::str::DOMString; // https://developer.mozilla.org/en-US/docs/Web/API/Console #[dom_struct] +#[derive(HeapSizeOf)] pub struct Console { reflector_: Reflector, global: GlobalField, diff --git a/components/script/dom/crypto.rs b/components/script/dom/crypto.rs index ef7bc62c9d9..857e220aca1 100644 --- a/components/script/dom/crypto.rs +++ b/components/script/dom/crypto.rs @@ -22,6 +22,7 @@ no_jsmanaged_fields!(OsRng); // https://developer.mozilla.org/en-US/docs/Web/API/Crypto #[dom_struct] +#[derive(HeapSizeOf)] pub struct Crypto { reflector_: Reflector, rng: DOMRefCell<OsRng>, diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs index 5f4bce94d28..c88b3ea92fc 100644 --- a/components/script/dom/css.rs +++ b/components/script/dom/css.rs @@ -10,6 +10,7 @@ use util::str::DOMString; use cssparser::serialize_identifier; #[dom_struct] +#[derive(HeapSizeOf)] pub struct CSS { reflector_: Reflector, } diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index 02655dfbab2..bbfdbc8231e 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -25,6 +25,7 @@ use std::cell::Ref; // http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface #[dom_struct] +#[derive(HeapSizeOf)] pub struct CSSStyleDeclaration { reflector_: Reflector, owner: JS<HTMLElement>, @@ -32,7 +33,7 @@ pub struct CSSStyleDeclaration { pseudo: Option<PseudoElement>, } -#[derive(PartialEq)] +#[derive(PartialEq, HeapSizeOf)] pub enum CSSModificationAccess { ReadWrite, Readonly diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs index 303eebb8ca5..a020b7ef5cd 100644 --- a/components/script/dom/customevent.rs +++ b/components/script/dom/customevent.rs @@ -17,8 +17,10 @@ use util::str::DOMString; // https://dom.spec.whatwg.org/#interface-customevent #[dom_struct] +#[derive(HeapSizeOf)] pub struct CustomEvent { event: Event, + #[ignore_heap_size_of = "Defined in rust-mozjs"] detail: MutHeapJSVal, } diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index bce639a5c6b..966f1d78b43 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -98,12 +98,17 @@ enum MixedMessage { // https://html.spec.whatwg.org/multipage/#dedicatedworkerglobalscope #[dom_struct] +#[derive(HeapSizeOf)] pub struct DedicatedWorkerGlobalScope { workerglobalscope: WorkerGlobalScope, id: PipelineId, + #[ignore_heap_size_of = "Defined in std"] receiver: Receiver<(TrustedWorkerAddress, ScriptMsg)>, + #[ignore_heap_size_of = "Defined in std"] own_sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, + #[ignore_heap_size_of = "Trusted<T> has unclear ownership like JS<T>"] worker: DOMRefCell<Option<TrustedWorkerAddress>>, + #[ignore_heap_size_of = "Can't measure trait objects"] /// Sender to the parent thread. parent_sender: Box<ScriptChan+Send>, } diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index b765cc829e7..76531e1a72f 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -104,7 +104,7 @@ use std::sync::mpsc::channel; use std::rc::Rc; use time; -#[derive(JSTraceable, PartialEq)] +#[derive(JSTraceable, PartialEq, HeapSizeOf)] pub enum IsHTMLDocument { HTMLDocument, NonHTMLDocument, @@ -171,7 +171,7 @@ impl DocumentDerived for EventTarget { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct ImagesFilter; impl CollectionFilter for ImagesFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -179,7 +179,7 @@ impl CollectionFilter for ImagesFilter { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct EmbedsFilter; impl CollectionFilter for EmbedsFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -187,7 +187,7 @@ impl CollectionFilter for EmbedsFilter { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct LinksFilter; impl CollectionFilter for LinksFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -196,7 +196,7 @@ impl CollectionFilter for LinksFilter { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct FormsFilter; impl CollectionFilter for FormsFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -204,7 +204,7 @@ impl CollectionFilter for FormsFilter { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct ScriptsFilter; impl CollectionFilter for ScriptsFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -212,7 +212,7 @@ impl CollectionFilter for ScriptsFilter { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct AnchorsFilter; impl CollectionFilter for AnchorsFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -220,7 +220,7 @@ impl CollectionFilter for AnchorsFilter { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] struct AppletsFilter; impl CollectionFilter for AppletsFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { @@ -1053,6 +1053,7 @@ impl<'a> DocumentHelpers<'a> for &'a Document { } } +#[derive(HeapSizeOf)] pub enum MouseEventType { Click, MouseDown, @@ -1060,7 +1061,7 @@ pub enum MouseEventType { } -#[derive(PartialEq)] +#[derive(PartialEq, HeapSizeOf)] pub enum DocumentSource { FromParser, NotFromParser, @@ -1827,7 +1828,7 @@ impl<'a> DocumentMethods for &'a Document { // https://html.spec.whatwg.org/multipage/#dom-tree-accessors:dom-document-nameditem-filter fn NamedGetter(self, _cx: *mut JSContext, name: DOMString, found: &mut bool) -> *mut JSObject { - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct NamedElementFilter { name: Atom, } @@ -1918,6 +1919,7 @@ fn is_scheme_host_port_tuple(url: &Url) -> bool { url.host().is_some() && url.port_or_default().is_some() } +#[derive(HeapSizeOf)] pub enum DocumentProgressTask { DOMContentLoaded, Load, diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs index 07baab72224..76dbf0e993a 100644 --- a/components/script/dom/documentfragment.rs +++ b/components/script/dom/documentfragment.rs @@ -21,6 +21,7 @@ use util::str::DOMString; // https://dom.spec.whatwg.org/#documentfragment #[dom_struct] +#[derive(HeapSizeOf)] pub struct DocumentFragment { node: Node, } diff --git a/components/script/dom/documenttype.rs b/components/script/dom/documenttype.rs index 3de5397c206..2a13acb2fe2 100644 --- a/components/script/dom/documenttype.rs +++ b/components/script/dom/documenttype.rs @@ -18,6 +18,7 @@ use std::borrow::ToOwned; // https://dom.spec.whatwg.org/#documenttype /// The `DOCTYPE` tag. #[dom_struct] +#[derive(HeapSizeOf)] pub struct DocumentType { node: Node, name: DOMString, diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs index e724b0bcafb..7ac87ce61c4 100644 --- a/components/script/dom/domexception.rs +++ b/components/script/dom/domexception.rs @@ -13,7 +13,7 @@ use util::str::DOMString; use std::borrow::ToOwned; #[repr(u16)] -#[derive(JSTraceable, Copy, Clone, Debug)] +#[derive(JSTraceable, Copy, Clone, Debug, HeapSizeOf)] pub enum DOMErrorName { IndexSizeError = DOMExceptionConstants::INDEX_SIZE_ERR, HierarchyRequestError = DOMExceptionConstants::HIERARCHY_REQUEST_ERR, @@ -41,6 +41,7 @@ pub enum DOMErrorName { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMException { reflector_: Reflector, code: DOMErrorName, diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs index 28b5dccfd40..902e19efbea 100644 --- a/components/script/dom/domimplementation.rs +++ b/components/script/dom/domimplementation.rs @@ -27,6 +27,7 @@ use std::borrow::ToOwned; // https://dom.spec.whatwg.org/#domimplementation #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMImplementation { reflector_: Reflector, document: JS<Document>, diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs index a225817b985..a011db403df 100644 --- a/components/script/dom/domparser.rs +++ b/components/script/dom/domparser.rs @@ -21,6 +21,7 @@ use util::str::DOMString; use std::borrow::ToOwned; #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMParser { reflector_: Reflector, window: JS<Window>, //XXXjdm Document instead? diff --git a/components/script/dom/dompoint.rs b/components/script/dom/dompoint.rs index a0cfcf09776..0da4d13d415 100644 --- a/components/script/dom/dompoint.rs +++ b/components/script/dom/dompoint.rs @@ -12,6 +12,7 @@ use dom::dompointreadonly::{DOMPointReadOnly, DOMPointWriteMethods}; // http://dev.w3.org/fxtf/geometry/Overview.html#dompoint #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMPoint { point: DOMPointReadOnly } diff --git a/components/script/dom/dompointreadonly.rs b/components/script/dom/dompointreadonly.rs index b0a3d33f5e1..57bc2ae24b7 100644 --- a/components/script/dom/dompointreadonly.rs +++ b/components/script/dom/dompointreadonly.rs @@ -11,6 +11,7 @@ use std::cell::Cell; // http://dev.w3.org/fxtf/geometry/Overview.html#dompointreadonly #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMPointReadOnly { reflector_: Reflector, x: Cell<f64>, diff --git a/components/script/dom/domrect.rs b/components/script/dom/domrect.rs index 8d54301e39e..a3608d3d865 100644 --- a/components/script/dom/domrect.rs +++ b/components/script/dom/domrect.rs @@ -12,6 +12,7 @@ use dom::window::Window; use util::geometry::Au; #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMRect { reflector_: Reflector, top: f32, diff --git a/components/script/dom/domrectlist.rs b/components/script/dom/domrectlist.rs index c016e2354f1..640a07a49c7 100644 --- a/components/script/dom/domrectlist.rs +++ b/components/script/dom/domrectlist.rs @@ -11,6 +11,7 @@ use dom::domrect::DOMRect; use dom::window::Window; #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMRectList { reflector_: Reflector, rects: Vec<JS<DOMRect>>, diff --git a/components/script/dom/domstringmap.rs b/components/script/dom/domstringmap.rs index 254bdccaf5e..fe86d4d4b64 100644 --- a/components/script/dom/domstringmap.rs +++ b/components/script/dom/domstringmap.rs @@ -13,6 +13,7 @@ use dom::htmlelement::{HTMLElement, HTMLElementCustomAttributeHelpers}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMStringMap { reflector_: Reflector, element: JS<HTMLElement>, diff --git a/components/script/dom/domtokenlist.rs b/components/script/dom/domtokenlist.rs index b77b34cf743..450a4ab224c 100644 --- a/components/script/dom/domtokenlist.rs +++ b/components/script/dom/domtokenlist.rs @@ -19,6 +19,7 @@ use string_cache::Atom; use std::borrow::ToOwned; #[dom_struct] +#[derive(HeapSizeOf)] pub struct DOMTokenList { reflector_: Reflector, element: JS<Element>, diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 4db26945f2e..b0f296b9a53 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -92,6 +92,7 @@ use std::mem; use std::sync::Arc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Element { node: Node, local_name: Atom, @@ -125,7 +126,7 @@ pub enum ElementTypeId { Element, } -#[derive(PartialEq)] +#[derive(PartialEq, HeapSizeOf)] pub enum ElementCreator { ParserCreated, ScriptCreated, @@ -562,7 +563,7 @@ impl LayoutElementHelpers for LayoutJS<Element> { } } -#[derive(PartialEq, Eq, Copy, Clone)] +#[derive(PartialEq, Eq, Copy, Clone, HeapSizeOf)] pub enum StylePriority { Important, Normal, diff --git a/components/script/dom/errorevent.rs b/components/script/dom/errorevent.rs index 4efc449b364..ee9d5178d30 100644 --- a/components/script/dom/errorevent.rs +++ b/components/script/dom/errorevent.rs @@ -22,12 +22,14 @@ use std::cell::Cell; use js::jsval::JSVal; #[dom_struct] +#[derive(HeapSizeOf)] pub struct ErrorEvent { event: Event, message: DOMRefCell<DOMString>, filename: DOMRefCell<DOMString>, lineno: Cell<u32>, colno: Cell<u32>, + #[ignore_heap_size_of = "Defined in rust-mozjs"] error: MutHeapJSVal, } diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index a6a83e2ea5d..43250102b5d 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -20,6 +20,7 @@ use time; #[derive(JSTraceable, Copy, Clone)] #[repr(u16)] +#[derive(HeapSizeOf)] pub enum EventPhase { None = EventConstants::NONE, Capturing = EventConstants::CAPTURING_PHASE, @@ -27,7 +28,7 @@ pub enum EventPhase { Bubbling = EventConstants::BUBBLING_PHASE, } -#[derive(JSTraceable, PartialEq)] +#[derive(JSTraceable, PartialEq, HeapSizeOf)] pub enum EventTypeId { CustomEvent, HTMLEvent, @@ -41,19 +42,20 @@ pub enum EventTypeId { CloseEvent } -#[derive(PartialEq)] +#[derive(PartialEq, HeapSizeOf)] pub enum EventBubbles { Bubbles, DoesNotBubble } -#[derive(PartialEq)] +#[derive(PartialEq, HeapSizeOf)] pub enum EventCancelable { Cancelable, NotCancelable } #[dom_struct] +#[derive(HeapSizeOf)] pub struct Event { reflector_: Reflector, type_id: EventTypeId, diff --git a/components/script/dom/file.rs b/components/script/dom/file.rs index f5cc0806c64..563c60bc9b3 100644 --- a/components/script/dom/file.rs +++ b/components/script/dom/file.rs @@ -11,6 +11,7 @@ use dom::blob::{Blob, BlobTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct File { blob: Blob, name: DOMString, diff --git a/components/script/dom/filelist.rs b/components/script/dom/filelist.rs index 75e06d026d5..b6a650cee65 100644 --- a/components/script/dom/filelist.rs +++ b/components/script/dom/filelist.rs @@ -12,6 +12,7 @@ use dom::window::Window; // https://w3c.github.io/FileAPI/#dfn-filelist #[dom_struct] +#[derive(HeapSizeOf)] pub struct FileList { reflector_: Reflector, list: Vec<JS<File>> diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs index 2e0cec633ed..ebf67ded61a 100644 --- a/components/script/dom/filereader.rs +++ b/components/script/dom/filereader.rs @@ -29,7 +29,7 @@ use util::str::DOMString; use util::task::spawn_named; use rustc_serialize::base64::{Config, ToBase64, CharacterSet, Newline}; -#[derive(PartialEq, Clone, Copy, JSTraceable)] +#[derive(PartialEq, Clone, Copy, JSTraceable, HeapSizeOf)] pub enum FileReaderFunction { ReadAsText, ReadAsDataUrl, @@ -37,7 +37,7 @@ pub enum FileReaderFunction { pub type TrustedFileReader = Trusted<FileReader>; -#[derive(Clone)] +#[derive(Clone, HeapSizeOf)] pub struct ReadMetaData { pub blobtype: DOMString, pub label: Option<DOMString>, @@ -55,11 +55,11 @@ impl ReadMetaData { } } -#[derive(PartialEq, Clone, Copy, JSTraceable)] +#[derive(PartialEq, Clone, Copy, JSTraceable, HeapSizeOf)] pub struct GenerationId(u32); #[repr(u16)] -#[derive(Copy, Clone, Debug, PartialEq, JSTraceable)] +#[derive(Copy, Clone, Debug, PartialEq, JSTraceable, HeapSizeOf)] pub enum FileReaderReadyState { Empty = FileReaderConstants::EMPTY, Loading = FileReaderConstants::LOADING, @@ -67,6 +67,7 @@ pub enum FileReaderReadyState { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct FileReader { eventtarget: EventTarget, global: GlobalField, diff --git a/components/script/dom/formdata.rs b/components/script/dom/formdata.rs index 5b7f497b8f3..ff2b6d78fdc 100644 --- a/components/script/dom/formdata.rs +++ b/components/script/dom/formdata.rs @@ -23,12 +23,14 @@ use std::collections::hash_map::Entry::{Occupied, Vacant}; #[derive(JSTraceable, Clone)] #[must_root] +#[derive(HeapSizeOf)] pub enum FormDatum { StringData(DOMString), FileData(JS<File>) } #[dom_struct] +#[derive(HeapSizeOf)] pub struct FormData { reflector_: Reflector, data: DOMRefCell<HashMap<DOMString, Vec<FormDatum>>>, diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index b47d799c8ae..8b539c6b4f0 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -33,6 +33,7 @@ use url::UrlParser; use std::default::Default; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLAnchorElement { htmlelement: HTMLElement, rel_list: MutNullableHeap<JS<DOMTokenList>>, diff --git a/components/script/dom/htmlappletelement.rs b/components/script/dom/htmlappletelement.rs index 108ee71e1bf..ab9db6955dd 100644 --- a/components/script/dom/htmlappletelement.rs +++ b/components/script/dom/htmlappletelement.rs @@ -20,6 +20,7 @@ use string_cache::Atom; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLAppletElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs index 3af940f5d8b..ee93a27c67f 100644 --- a/components/script/dom/htmlareaelement.rs +++ b/components/script/dom/htmlareaelement.rs @@ -22,6 +22,7 @@ use string_cache::Atom; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLAreaElement { htmlelement: HTMLElement, rel_list: MutNullableHeap<JS<DOMTokenList>>, diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs index 8b7c86a3fe4..10872b6e83b 100644 --- a/components/script/dom/htmlaudioelement.rs +++ b/components/script/dom/htmlaudioelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLAudioElement { htmlmediaelement: HTMLMediaElement } diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs index 98799a44a89..5a7c0a6d611 100644 --- a/components/script/dom/htmlbaseelement.rs +++ b/components/script/dom/htmlbaseelement.rs @@ -19,6 +19,7 @@ use util::str::DOMString; use url::{Url, UrlParser}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLBaseElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs index 3c5b01bc6c7..b886c9e91ec 100644 --- a/components/script/dom/htmlbodyelement.rs +++ b/components/script/dom/htmlbodyelement.rs @@ -35,6 +35,7 @@ use time; const INITIAL_REFLOW_DELAY: u64 = 200_000_000; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLBodyElement { htmlelement: HTMLElement, background_color: Cell<Option<RGBA>>, diff --git a/components/script/dom/htmlbrelement.rs b/components/script/dom/htmlbrelement.rs index 8050a3fdef8..962fcc54837 100644 --- a/components/script/dom/htmlbrelement.rs +++ b/components/script/dom/htmlbrelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLBRElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs index 927ac9688c7..b1cc150fe52 100644 --- a/components/script/dom/htmlbuttonelement.rs +++ b/components/script/dom/htmlbuttonelement.rs @@ -29,6 +29,7 @@ use std::cell::Cell; #[derive(JSTraceable, PartialEq, Copy, Clone)] #[allow(dead_code)] +#[derive(HeapSizeOf)] enum ButtonType { ButtonSubmit, ButtonReset, @@ -37,6 +38,7 @@ enum ButtonType { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLButtonElement { htmlelement: HTMLElement, button_type: Cell<ButtonType> diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index 85adf1b625f..6f307542148 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -38,7 +38,7 @@ const DEFAULT_WIDTH: u32 = 300; const DEFAULT_HEIGHT: u32 = 150; #[must_root] -#[derive(JSTraceable, Clone, Copy)] +#[derive(JSTraceable, Clone, Copy, HeapSizeOf)] pub enum CanvasContext { Context2d(JS<CanvasRenderingContext2D>), WebGL(JS<WebGLRenderingContext>), @@ -47,6 +47,7 @@ pub enum CanvasContext { impl HeapGCValue for CanvasContext {} #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLCanvasElement { htmlelement: HTMLElement, context: MutNullableHeap<CanvasContext>, diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs index 226c3d58d9f..88414aa6a84 100644 --- a/components/script/dom/htmlcollection.rs +++ b/components/script/dom/htmlcollection.rs @@ -30,8 +30,10 @@ pub enum CollectionTypeId { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLCollection { reflector_: Reflector, + #[ignore_heap_size_of = "Contains a trait object; can't measure due to #6870"] collection: CollectionTypeId, } @@ -57,7 +59,7 @@ impl HTMLCollection { fn all_elements(window: &Window, root: &Node, namespace_filter: Option<Namespace>) -> Root<HTMLCollection> { - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct AllElementFilter { namespace_filter: Option<Namespace> } @@ -79,7 +81,7 @@ impl HTMLCollection { return HTMLCollection::all_elements(window, root, None); } - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct TagNameFilter { tag: Atom, ascii_lower_tag: Atom, @@ -110,7 +112,7 @@ impl HTMLCollection { if tag == "*" { return HTMLCollection::all_elements(window, root, namespace_filter); } - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct TagNameNSFilter { tag: Atom, namespace_filter: Option<Namespace> @@ -135,7 +137,7 @@ impl HTMLCollection { pub fn by_class_name(window: &Window, root: &Node, classes: DOMString) -> Root<HTMLCollection> { - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct ClassNameFilter { classes: Vec<Atom> } @@ -153,7 +155,7 @@ impl HTMLCollection { } pub fn children(window: &Window, root: &Node) -> Root<HTMLCollection> { - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct ElementChildFilter; impl CollectionFilter for ElementChildFilter { fn filter(&self, elem: &Element, root: &Node) -> bool { diff --git a/components/script/dom/htmldataelement.rs b/components/script/dom/htmldataelement.rs index e63d41f30a8..da5bc60f522 100644 --- a/components/script/dom/htmldataelement.rs +++ b/components/script/dom/htmldataelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLDataElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmldatalistelement.rs b/components/script/dom/htmldatalistelement.rs index ee8615edc3b..e4037c8ba47 100644 --- a/components/script/dom/htmldatalistelement.rs +++ b/components/script/dom/htmldatalistelement.rs @@ -17,6 +17,7 @@ use dom::node::{Node, NodeTypeId, window_from_node}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLDataListElement { htmlelement: HTMLElement } @@ -51,7 +52,7 @@ impl HTMLDataListElement { impl<'a> HTMLDataListElementMethods for &'a HTMLDataListElement { // https://html.spec.whatwg.org/multipage/#dom-datalist-options fn Options(self) -> Root<HTMLCollection> { - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct HTMLDataListOptionsFilter; impl CollectionFilter for HTMLDataListOptionsFilter { fn filter(&self, elem: &Element, _root: &Node) -> bool { diff --git a/components/script/dom/htmldialogelement.rs b/components/script/dom/htmldialogelement.rs index 98d5e6bbac7..482c92a80e4 100644 --- a/components/script/dom/htmldialogelement.rs +++ b/components/script/dom/htmldialogelement.rs @@ -18,6 +18,7 @@ use util::str::DOMString; use std::borrow::ToOwned; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLDialogElement { htmlelement: HTMLElement, return_value: DOMRefCell<DOMString>, diff --git a/components/script/dom/htmldirectoryelement.rs b/components/script/dom/htmldirectoryelement.rs index 3f1fcfd4759..916868bf753 100644 --- a/components/script/dom/htmldirectoryelement.rs +++ b/components/script/dom/htmldirectoryelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLDirectoryElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmldivelement.rs b/components/script/dom/htmldivelement.rs index 21b1e6cacd1..2c2edd0b0d0 100644 --- a/components/script/dom/htmldivelement.rs +++ b/components/script/dom/htmldivelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLDivElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmldlistelement.rs b/components/script/dom/htmldlistelement.rs index 6446ac408d2..a582ebd75ce 100644 --- a/components/script/dom/htmldlistelement.rs +++ b/components/script/dom/htmldlistelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLDListElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 2a196073513..e5f8f35221b 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -40,6 +40,7 @@ use std::intrinsics; use std::rc::Rc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLElement { element: Element, style_decl: MutNullableHeap<JS<CSSStyleDeclaration>>, diff --git a/components/script/dom/htmlembedelement.rs b/components/script/dom/htmlembedelement.rs index 6cabca7e80e..9855702e2e5 100644 --- a/components/script/dom/htmlembedelement.rs +++ b/components/script/dom/htmlembedelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLEmbedElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs index 0736a0e33c2..55fd44f1c7a 100644 --- a/components/script/dom/htmlfieldsetelement.rs +++ b/components/script/dom/htmlfieldsetelement.rs @@ -22,6 +22,7 @@ use dom::virtualmethods::VirtualMethods; use util::str::{DOMString, StaticStringVec}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLFieldSetElement { htmlelement: HTMLElement } @@ -56,7 +57,7 @@ impl HTMLFieldSetElement { impl<'a> HTMLFieldSetElementMethods for &'a HTMLFieldSetElement { // https://www.whatwg.org/html/#dom-fieldset-elements fn Elements(self) -> Root<HTMLCollection> { - #[derive(JSTraceable)] + #[derive(JSTraceable, HeapSizeOf)] struct ElementsFilter; impl CollectionFilter for ElementsFilter { fn filter<'a>(&self, elem: &'a Element, _root: &'a Node) -> bool { diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs index 6a10967e441..61152a47a00 100644 --- a/components/script/dom/htmlfontelement.rs +++ b/components/script/dom/htmlfontelement.rs @@ -19,6 +19,7 @@ use cssparser::RGBA; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLFontElement { htmlelement: HTMLElement, color: Cell<Option<RGBA>>, diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 6d2f620079d..920d5d326b0 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -43,6 +43,7 @@ use std::borrow::ToOwned; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLFormElement { htmlelement: HTMLElement, marked_for_reset: Cell<bool>, @@ -149,13 +150,13 @@ impl<'a> HTMLFormElementMethods for &'a HTMLFormElement { } } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, HeapSizeOf)] pub enum SubmittedFrom { FromFormSubmitMethod, NotFromFormSubmitMethod } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, HeapSizeOf)] pub enum ResetFrom { FromFormResetMethod, NotFromFormResetMethod @@ -415,27 +416,28 @@ impl<'a> HTMLFormElementHelpers for &'a HTMLFormElement { } // TODO: add file support +#[derive(HeapSizeOf)] pub struct FormDatum { pub ty: DOMString, pub name: DOMString, pub value: DOMString } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, HeapSizeOf)] pub enum FormEncType { TextPlainEncoded, UrlEncoded, FormDataEncoded } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, HeapSizeOf)] pub enum FormMethod { FormGet, FormPost, FormDialog } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, HeapSizeOf)] pub enum FormSubmitter<'a> { FormElement(&'a HTMLFormElement), InputElement(&'a HTMLInputElement), diff --git a/components/script/dom/htmlframeelement.rs b/components/script/dom/htmlframeelement.rs index d9899ba614d..450cabfb293 100644 --- a/components/script/dom/htmlframeelement.rs +++ b/components/script/dom/htmlframeelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLFrameElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlframesetelement.rs b/components/script/dom/htmlframesetelement.rs index d6f53fb4650..19129e612e2 100644 --- a/components/script/dom/htmlframesetelement.rs +++ b/components/script/dom/htmlframesetelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLFrameSetElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs index 1165501f3ee..bfc46895de7 100644 --- a/components/script/dom/htmlheadelement.rs +++ b/components/script/dom/htmlheadelement.rs @@ -15,6 +15,7 @@ use dom::virtualmethods::VirtualMethods; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLHeadElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlheadingelement.rs b/components/script/dom/htmlheadingelement.rs index 4ec34c65a1e..b339a75a8a4 100644 --- a/components/script/dom/htmlheadingelement.rs +++ b/components/script/dom/htmlheadingelement.rs @@ -12,7 +12,7 @@ use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; use dom::node::{Node, NodeTypeId}; use util::str::DOMString; -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] pub enum HeadingLevel { Heading1, Heading2, @@ -23,6 +23,7 @@ pub enum HeadingLevel { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLHeadingElement { htmlelement: HTMLElement, level: HeadingLevel, diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs index b04c137e934..6e1c228a7d6 100644 --- a/components/script/dom/htmlhrelement.rs +++ b/components/script/dom/htmlhrelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLHRElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlhtmlelement.rs b/components/script/dom/htmlhtmlelement.rs index 96190c0599c..497ca631e78 100644 --- a/components/script/dom/htmlhtmlelement.rs +++ b/components/script/dom/htmlhtmlelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLHtmlElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index c7c8a240772..220e55c8b07 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -43,6 +43,7 @@ use util::str::{self, LengthOrPercentageOrAuto}; use js::jsapi::{RootedValue, JSAutoRequest, JSAutoCompartment}; use js::jsval::UndefinedValue; +#[derive(HeapSizeOf)] enum SandboxAllowance { AllowNothing = 0x00, AllowSameOrigin = 0x01, @@ -54,6 +55,7 @@ enum SandboxAllowance { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLIFrameElement { htmlelement: HTMLElement, subpage_id: Cell<Option<SubpageId>>, diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 82caf25c4f3..2c9c0606304 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -37,6 +37,7 @@ use std::borrow::ToOwned; use std::sync::Arc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLImageElement { htmlelement: HTMLElement, url: DOMRefCell<Option<Url>>, diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 2e883feae1d..f8a6e0a426d 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -46,6 +46,7 @@ const DEFAULT_RESET_VALUE: &'static str = "Reset"; #[derive(JSTraceable, PartialEq, Copy, Clone)] #[allow(dead_code)] +#[derive(HeapSizeOf)] enum InputType { InputSubmit, InputReset, @@ -59,6 +60,7 @@ enum InputType { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLInputElement { htmlelement: HTMLElement, input_type: Cell<InputType>, @@ -68,6 +70,7 @@ pub struct HTMLInputElement { indeterminate: Cell<bool>, value_changed: Cell<bool>, size: Cell<u32>, + #[ignore_heap_size_of = "#7193"] textinput: DOMRefCell<TextInput<ConstellationChan>>, activation_state: DOMRefCell<InputActivationState>, } @@ -80,6 +83,7 @@ impl PartialEq for HTMLInputElement { #[derive(JSTraceable)] #[must_root] +#[derive(HeapSizeOf)] struct InputActivationState { indeterminate: bool, checked: bool, diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs index 45d10e9bf89..4b66644f060 100644 --- a/components/script/dom/htmllabelelement.rs +++ b/components/script/dom/htmllabelelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLLabelElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmllegendelement.rs b/components/script/dom/htmllegendelement.rs index 7795af24806..50d67a400d1 100644 --- a/components/script/dom/htmllegendelement.rs +++ b/components/script/dom/htmllegendelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLLegendElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmllielement.rs b/components/script/dom/htmllielement.rs index 658664c82c4..a5f15fefec9 100644 --- a/components/script/dom/htmllielement.rs +++ b/components/script/dom/htmllielement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLLIElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 03c69584d0f..b5012a2b6f3 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -39,6 +39,7 @@ use url::UrlParser; use string_cache::Atom; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLLinkElement { htmlelement: HTMLElement, rel_list: MutNullableHeap<JS<DOMTokenList>>, diff --git a/components/script/dom/htmlmapelement.rs b/components/script/dom/htmlmapelement.rs index 98927d6357c..64b4b7b55a7 100644 --- a/components/script/dom/htmlmapelement.rs +++ b/components/script/dom/htmlmapelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLMapElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 847132c6452..95b7cc5060b 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -11,6 +11,7 @@ use dom::node::NodeTypeId; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLMediaElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs index 926fbf2c11f..cc2fe60ecbd 100644 --- a/components/script/dom/htmlmetaelement.rs +++ b/components/script/dom/htmlmetaelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLMetaElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlmeterelement.rs b/components/script/dom/htmlmeterelement.rs index ee9e556308d..6247b701a87 100644 --- a/components/script/dom/htmlmeterelement.rs +++ b/components/script/dom/htmlmeterelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLMeterElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlmodelement.rs b/components/script/dom/htmlmodelement.rs index c7888ea2046..446c4b70544 100644 --- a/components/script/dom/htmlmodelement.rs +++ b/components/script/dom/htmlmodelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLModElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs index 745b7821c55..08406a85ea5 100644 --- a/components/script/dom/htmlobjectelement.rs +++ b/components/script/dom/htmlobjectelement.rs @@ -25,6 +25,7 @@ use util::str::DOMString; use std::sync::Arc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLObjectElement { htmlelement: HTMLElement, image: DOMRefCell<Option<Arc<Image>>>, diff --git a/components/script/dom/htmlolistelement.rs b/components/script/dom/htmlolistelement.rs index c71028709de..6bf0e106f60 100644 --- a/components/script/dom/htmlolistelement.rs +++ b/components/script/dom/htmlolistelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLOListElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs index 76f0a3c283e..297a0dcedb8 100644 --- a/components/script/dom/htmloptgroupelement.rs +++ b/components/script/dom/htmloptgroupelement.rs @@ -20,6 +20,7 @@ use dom::virtualmethods::VirtualMethods; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLOptGroupElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index 28b7f0651ae..93ed56c437e 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -23,6 +23,7 @@ use dom::virtualmethods::VirtualMethods; use util::str::{DOMString, split_html_space_chars}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLOptionElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs index ad7f64e1b75..117294c3b6e 100644 --- a/components/script/dom/htmloutputelement.rs +++ b/components/script/dom/htmloutputelement.rs @@ -15,6 +15,7 @@ use dom::validitystate::ValidityState; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLOutputElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlparagraphelement.rs b/components/script/dom/htmlparagraphelement.rs index 62f7d271c4a..aa5aec990c9 100644 --- a/components/script/dom/htmlparagraphelement.rs +++ b/components/script/dom/htmlparagraphelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLParagraphElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlparamelement.rs b/components/script/dom/htmlparamelement.rs index 2942ccf49ca..5df9ff982ef 100644 --- a/components/script/dom/htmlparamelement.rs +++ b/components/script/dom/htmlparamelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLParamElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlpreelement.rs b/components/script/dom/htmlpreelement.rs index 956301296ef..3fc2fea0387 100644 --- a/components/script/dom/htmlpreelement.rs +++ b/components/script/dom/htmlpreelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLPreElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlprogresselement.rs b/components/script/dom/htmlprogresselement.rs index 7449f79dcac..a03dfe8f1e4 100644 --- a/components/script/dom/htmlprogresselement.rs +++ b/components/script/dom/htmlprogresselement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLProgressElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlquoteelement.rs b/components/script/dom/htmlquoteelement.rs index a08f95147e4..c7ad4d75d9a 100644 --- a/components/script/dom/htmlquoteelement.rs +++ b/components/script/dom/htmlquoteelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLQuoteElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index b4c8a5e4946..16b8933f450 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -52,6 +52,7 @@ use string_cache::Atom; use url::{Url, UrlParser}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLScriptElement { htmlelement: HTMLElement, @@ -74,6 +75,7 @@ pub struct HTMLScriptElement { /// Document of the parser that created this element parser_document: JS<Document>, + #[ignore_heap_size_of = "Defined in rust-encoding"] /// https://html.spec.whatwg.org/multipage/#concept-script-encoding block_character_encoding: DOMRefCell<EncodingRef>, } @@ -160,6 +162,7 @@ static SCRIPT_JS_MIMES: StaticStringVec = &[ "text/x-javascript", ]; +#[derive(HeapSizeOf)] pub enum ScriptOrigin { Internal(String, Url), External(Result<(Metadata, Vec<u8>), String>), diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs index a24c892335a..f2628f6b882 100644 --- a/components/script/dom/htmlselectelement.rs +++ b/components/script/dom/htmlselectelement.rs @@ -25,6 +25,7 @@ use string_cache::Atom; use std::borrow::ToOwned; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLSelectElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlsourceelement.rs b/components/script/dom/htmlsourceelement.rs index d93eb56f132..5b00feab231 100644 --- a/components/script/dom/htmlsourceelement.rs +++ b/components/script/dom/htmlsourceelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLSourceElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlspanelement.rs b/components/script/dom/htmlspanelement.rs index 8772b143871..8bbad4c20bb 100644 --- a/components/script/dom/htmlspanelement.rs +++ b/components/script/dom/htmlspanelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLSpanElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index 22c4c705ccb..a8a989641a0 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -22,6 +22,7 @@ use style::media_queries::parse_media_query_list; use cssparser::Parser as CssParser; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLStyleElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmltablecaptionelement.rs b/components/script/dom/htmltablecaptionelement.rs index 6f6c9223902..ca6ee6037d2 100644 --- a/components/script/dom/htmltablecaptionelement.rs +++ b/components/script/dom/htmltablecaptionelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableCaptionElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index 873cbb184e8..6f5d580eee8 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -36,6 +36,7 @@ impl PartialEq for HTMLTableCellElementTypeId { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableCellElement { htmlelement: HTMLElement, background_color: Cell<Option<RGBA>>, diff --git a/components/script/dom/htmltablecolelement.rs b/components/script/dom/htmltablecolelement.rs index 37981cebc2d..ab7f26da579 100644 --- a/components/script/dom/htmltablecolelement.rs +++ b/components/script/dom/htmltablecolelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableColElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmltabledatacellelement.rs b/components/script/dom/htmltabledatacellelement.rs index 684ec8078a4..a26c5da8bbf 100644 --- a/components/script/dom/htmltabledatacellelement.rs +++ b/components/script/dom/htmltabledatacellelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableDataCellElement { htmltablecellelement: HTMLTableCellElement, } diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index 96db990368b..e889716572d 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -27,6 +27,7 @@ use string_cache::Atom; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableElement { htmlelement: HTMLElement, background_color: Cell<Option<RGBA>>, diff --git a/components/script/dom/htmltableheadercellelement.rs b/components/script/dom/htmltableheadercellelement.rs index c7aa052eb7d..3bcd41db05d 100644 --- a/components/script/dom/htmltableheadercellelement.rs +++ b/components/script/dom/htmltableheadercellelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableHeaderCellElement { htmltablecellelement: HTMLTableCellElement, } diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs index 7ebae106632..5d200eac16f 100644 --- a/components/script/dom/htmltablerowelement.rs +++ b/components/script/dom/htmltablerowelement.rs @@ -18,6 +18,7 @@ use util::str::{self, DOMString}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableRowElement { htmlelement: HTMLElement, background_color: Cell<Option<RGBA>>, diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs index 6c37c0923c3..ceb03aa60ec 100644 --- a/components/script/dom/htmltablesectionelement.rs +++ b/components/script/dom/htmltablesectionelement.rs @@ -18,6 +18,7 @@ use util::str::{self, DOMString}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTableSectionElement { htmlelement: HTMLElement, background_color: Cell<Option<RGBA>>, diff --git a/components/script/dom/htmltemplateelement.rs b/components/script/dom/htmltemplateelement.rs index 2d37dd5593a..ba3250e0744 100644 --- a/components/script/dom/htmltemplateelement.rs +++ b/components/script/dom/htmltemplateelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTemplateElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index 22e843fa08f..5d25ab08299 100644 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -38,8 +38,10 @@ use std::borrow::ToOwned; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTextAreaElement { htmlelement: HTMLElement, + #[ignore_heap_size_of = "#7193"] textinput: DOMRefCell<TextInput<ConstellationChan>>, cols: Cell<u32>, rows: Cell<u32>, diff --git a/components/script/dom/htmltimeelement.rs b/components/script/dom/htmltimeelement.rs index 828ba4b912a..37bca69f08d 100644 --- a/components/script/dom/htmltimeelement.rs +++ b/components/script/dom/htmltimeelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTimeElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmltitleelement.rs b/components/script/dom/htmltitleelement.rs index e4f51b03629..edc8c73946f 100644 --- a/components/script/dom/htmltitleelement.rs +++ b/components/script/dom/htmltitleelement.rs @@ -19,6 +19,7 @@ use dom::virtualmethods::VirtualMethods; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTitleElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmltrackelement.rs b/components/script/dom/htmltrackelement.rs index ba13e20ed4d..599a214f1d9 100644 --- a/components/script/dom/htmltrackelement.rs +++ b/components/script/dom/htmltrackelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLTrackElement { htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlulistelement.rs b/components/script/dom/htmlulistelement.rs index 0287757d002..40133f9b365 100644 --- a/components/script/dom/htmlulistelement.rs +++ b/components/script/dom/htmlulistelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLUListElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlunknownelement.rs b/components/script/dom/htmlunknownelement.rs index 33bc8a72cb8..a4f35a35534 100644 --- a/components/script/dom/htmlunknownelement.rs +++ b/components/script/dom/htmlunknownelement.rs @@ -13,6 +13,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLUnknownElement { htmlelement: HTMLElement } diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs index b95f683bcd2..1ccd7f8eb0c 100644 --- a/components/script/dom/htmlvideoelement.rs +++ b/components/script/dom/htmlvideoelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, NodeTypeId}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct HTMLVideoElement { htmlmediaelement: HTMLMediaElement } diff --git a/components/script/dom/imagedata.rs b/components/script/dom/imagedata.rs index 513ef791689..00b725b7b97 100644 --- a/components/script/dom/imagedata.rs +++ b/components/script/dom/imagedata.rs @@ -18,6 +18,7 @@ use std::default::Default; #[dom_struct] #[allow(raw_pointer_derive)] +#[derive(HeapSizeOf)] pub struct ImageData { reflector_: Reflector, width: u32, diff --git a/components/script/dom/keyboardevent.rs b/components/script/dom/keyboardevent.rs index 0153ad214be..ff41ad9ca3c 100644 --- a/components/script/dom/keyboardevent.rs +++ b/components/script/dom/keyboardevent.rs @@ -24,6 +24,7 @@ use std::cell::{RefCell, Cell}; no_jsmanaged_fields!(Key); #[dom_struct] +#[derive(HeapSizeOf)] pub struct KeyboardEvent { uievent: UIEvent, key: Cell<Option<Key>>, @@ -746,6 +747,7 @@ fn key_keycode(key: Key) -> u32 { } } +#[derive(HeapSizeOf)] pub struct KeyEventProperties { pub key_string: &'static str, pub code: &'static str, diff --git a/components/script/dom/location.rs b/components/script/dom/location.rs index 69cfb4b7d5b..a3e2a24cb1a 100644 --- a/components/script/dom/location.rs +++ b/components/script/dom/location.rs @@ -16,6 +16,7 @@ use util::str::DOMString; use url::{Url, UrlParser}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Location { reflector_: Reflector, window: JS<Window>, diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs index 5d5c2d5112d..a445dd4bcd9 100644 --- a/components/script/dom/messageevent.rs +++ b/components/script/dom/messageevent.rs @@ -22,6 +22,7 @@ use std::borrow::ToOwned; use std::default::Default; #[dom_struct] +#[derive(HeapSizeOf)] pub struct MessageEvent { event: Event, data: Heap<JSVal>, diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index fd3831e535b..a160d7a6c1f 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -20,6 +20,7 @@ use std::cell::Cell; use std::default::Default; #[dom_struct] +#[derive(HeapSizeOf)] pub struct MouseEvent { uievent: UIEvent, screen_x: Cell<i32>, diff --git a/components/script/dom/namednodemap.rs b/components/script/dom/namednodemap.rs index 5f5462c3542..8894764e073 100644 --- a/components/script/dom/namednodemap.rs +++ b/components/script/dom/namednodemap.rs @@ -16,6 +16,7 @@ use util::str::DOMString; use string_cache::Atom; #[dom_struct] +#[derive(HeapSizeOf)] pub struct NamedNodeMap { reflector_: Reflector, owner: JS<Element>, diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs index 825ccfdf2e5..c88e2bf3aa5 100644 --- a/components/script/dom/navigator.rs +++ b/components/script/dom/navigator.rs @@ -12,6 +12,7 @@ use dom::window::Window; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Navigator { reflector_: Reflector, } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index bcf286374d5..df815ef6b9d 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -203,7 +203,7 @@ impl Drop for Node { /// suppress observers flag /// https://dom.spec.whatwg.org/#concept-node-insert /// https://dom.spec.whatwg.org/#concept-node-remove -#[derive(Copy, Clone)] +#[derive(Copy, Clone, HeapSizeOf)] enum SuppressObserver { Suppressed, Unsuppressed @@ -1455,7 +1455,7 @@ impl Iterator for TreeIterator { } /// Specifies whether children must be recursively cloned or not. -#[derive(Copy, Clone, PartialEq)] +#[derive(Copy, Clone, PartialEq, HeapSizeOf)] pub enum CloneChildrenFlag { CloneChildren, DoNotCloneChildren @@ -2648,7 +2648,7 @@ impl<'a> DisabledStateHelpers for &'a Node { } /// A summary of the changes that happened to a node. -#[derive(Copy, Clone, PartialEq)] +#[derive(Copy, Clone, PartialEq, HeapSizeOf)] pub enum NodeDamage { /// The node's `style` attribute changed. NodeStyleDamaged, diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs index fcee35ed80d..7e641c83cfd 100644 --- a/components/script/dom/nodeiterator.rs +++ b/components/script/dom/nodeiterator.rs @@ -19,12 +19,15 @@ use std::cell::Cell; use std::rc::Rc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct NodeIterator { reflector_: Reflector, root_node: JS<Node>, + #[ignore_heap_size_of = "Defined in rust-mozjs"] reference_node: MutHeap<JS<Node>>, pointer_before_reference_node: Cell<bool>, what_to_show: u32, + #[ignore_heap_size_of = "Can't measure due to #6870"] filter: Filter, } diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs index 0c6583a684d..bcf941a6aa0 100644 --- a/components/script/dom/nodelist.rs +++ b/components/script/dom/nodelist.rs @@ -13,7 +13,7 @@ use dom::window::Window; use std::cell::Cell; -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] #[must_root] pub enum NodeListType { Simple(Vec<JS<Node>>), @@ -22,6 +22,7 @@ pub enum NodeListType { // https://dom.spec.whatwg.org/#interface-nodelist #[dom_struct] +#[derive(HeapSizeOf)] pub struct NodeList { reflector_: Reflector, list_type: NodeListType, @@ -93,10 +94,11 @@ impl<'a> NodeListHelpers<'a> for &'a NodeList { } } -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] #[must_root] pub struct ChildrenList { node: JS<Node>, + #[ignore_heap_size_of = "Defined in rust-mozjs"] last_visited: MutNullableHeap<JS<Node>>, last_index: Cell<u32>, } diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs index b566d4308fd..71ed3b186ea 100644 --- a/components/script/dom/performance.rs +++ b/components/script/dom/performance.rs @@ -15,6 +15,7 @@ use time; pub type DOMHighResTimeStamp = Finite<f64>; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Performance { reflector_: Reflector, timing: JS<PerformanceTiming>, diff --git a/components/script/dom/performancetiming.rs b/components/script/dom/performancetiming.rs index 9e3a7151f14..d1588f72927 100644 --- a/components/script/dom/performancetiming.rs +++ b/components/script/dom/performancetiming.rs @@ -10,6 +10,7 @@ use dom::bindings::utils::{Reflector, reflect_dom_object}; use dom::window::Window; #[dom_struct] +#[derive(HeapSizeOf)] pub struct PerformanceTiming { reflector_: Reflector, navigationStart: u64, diff --git a/components/script/dom/processinginstruction.rs b/components/script/dom/processinginstruction.rs index 41dac86ed04..6b4ae05f592 100644 --- a/components/script/dom/processinginstruction.rs +++ b/components/script/dom/processinginstruction.rs @@ -14,6 +14,7 @@ use util::str::DOMString; /// An HTML processing instruction node. #[dom_struct] +#[derive(HeapSizeOf)] pub struct ProcessingInstruction { characterdata: CharacterData, target: DOMString, diff --git a/components/script/dom/progressevent.rs b/components/script/dom/progressevent.rs index a181ba0c6d6..1dc1f2b9917 100644 --- a/components/script/dom/progressevent.rs +++ b/components/script/dom/progressevent.rs @@ -14,6 +14,7 @@ use dom::event::{Event, EventTypeId, EventBubbles, EventCancelable}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct ProgressEvent { event: Event, length_computable: bool, diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index c5664874b7d..bf810546be8 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -26,6 +26,7 @@ use std::cmp::{Ord, Ordering, PartialEq, PartialOrd}; use std::rc::Rc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Range { reflector_: Reflector, inner: Rc<RefCell<RangeInner>>, @@ -682,6 +683,7 @@ impl<'a> RangeMethods for &'a Range { #[derive(JSTraceable)] #[must_root] #[privatize] +#[derive(HeapSizeOf)] pub struct RangeInner { start: BoundaryPoint, end: BoundaryPoint, @@ -816,6 +818,7 @@ impl RangeInner { #[derive(JSTraceable)] #[must_root] #[privatize] +#[derive(HeapSizeOf)] pub struct BoundaryPoint { node: JS<Node>, offset: u32, diff --git a/components/script/dom/screen.rs b/components/script/dom/screen.rs index ff0be321c0c..831fd393670 100644 --- a/components/script/dom/screen.rs +++ b/components/script/dom/screen.rs @@ -10,6 +10,7 @@ use dom::bindings::utils::{Reflector, reflect_dom_object}; use dom::window::Window; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Screen { reflector_: Reflector, } diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs index a81fe125973..c14603df876 100644 --- a/components/script/dom/servohtmlparser.rs +++ b/components/script/dom/servohtmlparser.rs @@ -36,7 +36,7 @@ use hyper::header::ContentType; use hyper::mime::{Mime, TopLevel, SubLevel}; #[must_root] -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] pub struct Sink { pub base_url: Option<Url>, pub document: JS<Document>, @@ -157,8 +157,10 @@ impl PreInvoke for ParserContext { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct ServoHTMLParser { reflector_: Reflector, + #[ignore_heap_size_of = "Defined in html5ever"] tokenizer: DOMRefCell<Tokenizer>, /// Input chunks received but not yet passed to the parser. pending_input: DOMRefCell<Vec<String>>, diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs index 636ceb5fb12..e41d06a998d 100644 --- a/components/script/dom/storage.rs +++ b/components/script/dom/storage.rs @@ -24,6 +24,7 @@ use url::Url; use script_task::{ScriptTask, ScriptMsg, MainThreadRunnable}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct Storage { reflector_: Reflector, global: GlobalField, diff --git a/components/script/dom/storageevent.rs b/components/script/dom/storageevent.rs index 8f722ece866..7fd1c039284 100644 --- a/components/script/dom/storageevent.rs +++ b/components/script/dom/storageevent.rs @@ -17,6 +17,7 @@ use dom::storage::Storage; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct StorageEvent { event: Event, key: DOMRefCell<Option<DOMString>>, diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index 567bf7f9bee..d783e876b98 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -30,6 +30,7 @@ use std::ptr; use std::rc::Rc; #[dom_struct] +#[derive(HeapSizeOf)] pub struct TestBinding { reflector_: Reflector, global: GlobalField, diff --git a/components/script/dom/testbindingproxy.rs b/components/script/dom/testbindingproxy.rs index 26d9e6e6611..2d2434e5e38 100644 --- a/components/script/dom/testbindingproxy.rs +++ b/components/script/dom/testbindingproxy.rs @@ -10,6 +10,7 @@ use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct TestBindingProxy { reflector_: Reflector } diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs index acc0f304bf2..e2fed3be09c 100644 --- a/components/script/dom/text.rs +++ b/components/script/dom/text.rs @@ -21,6 +21,7 @@ use util::str::DOMString; /// An HTML text node. #[dom_struct] +#[derive(HeapSizeOf)] pub struct Text { characterdata: CharacterData, } diff --git a/components/script/dom/textdecoder.rs b/components/script/dom/textdecoder.rs index 4b8756afba7..e83d85072b3 100644 --- a/components/script/dom/textdecoder.rs +++ b/components/script/dom/textdecoder.rs @@ -24,8 +24,10 @@ use std::ptr; use std::slice; #[dom_struct] +#[derive(HeapSizeOf)] pub struct TextDecoder { reflector_: Reflector, + #[ignore_heap_size_of = "Defined in rust-encoding"] encoding: EncodingRef, fatal: bool, } diff --git a/components/script/dom/textencoder.rs b/components/script/dom/textencoder.rs index 7fc7370ebdc..29a715a8ed1 100644 --- a/components/script/dom/textencoder.rs +++ b/components/script/dom/textencoder.rs @@ -25,9 +25,11 @@ use js::jsapi::{JSContext, JSObject}; use js::jsapi::{JS_NewUint8Array, JS_GetUint8ArrayData}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct TextEncoder { reflector_: Reflector, encoding: DOMString, + #[ignore_heap_size_of = "Defined in rust-encoding"] encoder: EncodingRef, } diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs index e3411f35cb8..351a6d39443 100644 --- a/components/script/dom/uievent.rs +++ b/components/script/dom/uievent.rs @@ -21,6 +21,7 @@ use std::default::Default; // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#interface-UIEvent #[dom_struct] +#[derive(HeapSizeOf)] pub struct UIEvent { event: Event, view: MutNullableHeap<JS<Window>>, diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs index 8b94b88b26b..9bbd0f1b5fc 100644 --- a/components/script/dom/url.rs +++ b/components/script/dom/url.rs @@ -17,6 +17,7 @@ use std::borrow::ToOwned; // https://url.spec.whatwg.org/#url #[dom_struct] +#[derive(HeapSizeOf)] pub struct URL { reflector_: Reflector, diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs index 4b2f2010fbf..cff468574b2 100644 --- a/components/script/dom/urlhelper.rs +++ b/components/script/dom/urlhelper.rs @@ -9,6 +9,7 @@ use url::{Url, SchemeData}; use std::borrow::ToOwned; use std::fmt::Write; +#[derive(HeapSizeOf)] pub struct UrlHelper; impl UrlHelper { diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs index f51440f51df..e4bc0a8b30d 100644 --- a/components/script/dom/urlsearchparams.rs +++ b/components/script/dom/urlsearchparams.rs @@ -18,6 +18,7 @@ use util::str::DOMString; // https://url.spec.whatwg.org/#interface-urlsearchparams #[dom_struct] +#[derive(HeapSizeOf)] pub struct URLSearchParams { reflector_: Reflector, // https://url.spec.whatwg.org/#concept-urlsearchparams-list diff --git a/components/script/dom/validitystate.rs b/components/script/dom/validitystate.rs index 71750f4315f..f14ebddff6f 100644 --- a/components/script/dom/validitystate.rs +++ b/components/script/dom/validitystate.rs @@ -10,6 +10,7 @@ use dom::window::Window; // https://html.spec.whatwg.org/#validitystate #[dom_struct] +#[derive(HeapSizeOf)] pub struct ValidityState { reflector_: Reflector, state: u8, diff --git a/components/script/dom/webglactiveinfo.rs b/components/script/dom/webglactiveinfo.rs index 0e20e230829..671c50c5d36 100644 --- a/components/script/dom/webglactiveinfo.rs +++ b/components/script/dom/webglactiveinfo.rs @@ -11,6 +11,7 @@ use dom::bindings::utils::{Reflector,reflect_dom_object}; use util::str::DOMString; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLActiveInfo { reflector_: Reflector, size: i32, diff --git a/components/script/dom/webglbuffer.rs b/components/script/dom/webglbuffer.rs index 432caf6276c..5ad078a38e5 100644 --- a/components/script/dom/webglbuffer.rs +++ b/components/script/dom/webglbuffer.rs @@ -14,10 +14,12 @@ use ipc_channel::ipc::{self, IpcSender}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLBuffer { webgl_object: WebGLObject, id: u32, is_deleted: Cell<bool>, + #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, } diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs index 2a67bb4dbcb..790cb46c3c4 100644 --- a/components/script/dom/webglframebuffer.rs +++ b/components/script/dom/webglframebuffer.rs @@ -14,10 +14,12 @@ use ipc_channel::ipc::{self, IpcSender}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLFramebuffer { webgl_object: WebGLObject, id: u32, is_deleted: Cell<bool>, + #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, } diff --git a/components/script/dom/webglobject.rs b/components/script/dom/webglobject.rs index 82093b64aa7..46ac7d81d80 100644 --- a/components/script/dom/webglobject.rs +++ b/components/script/dom/webglobject.rs @@ -9,6 +9,7 @@ use dom::bindings::utils::{Reflector, reflect_dom_object}; use dom::bindings::js::Root; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLObject { reflector_: Reflector, } diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs index a61fc22c905..0c93aba3b5b 100644 --- a/components/script/dom/webglprogram.rs +++ b/components/script/dom/webglprogram.rs @@ -18,12 +18,14 @@ use ipc_channel::ipc::{self, IpcSender}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLProgram { webgl_object: WebGLObject, id: u32, is_deleted: Cell<bool>, fragment_shader: MutNullableHeap<JS<WebGLShader>>, vertex_shader: MutNullableHeap<JS<WebGLShader>>, + #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, } diff --git a/components/script/dom/webglrenderbuffer.rs b/components/script/dom/webglrenderbuffer.rs index cfe3fb21261..ed68e6277be 100644 --- a/components/script/dom/webglrenderbuffer.rs +++ b/components/script/dom/webglrenderbuffer.rs @@ -14,10 +14,12 @@ use ipc_channel::ipc::{self, IpcSender}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLRenderbuffer { webgl_object: WebGLObject, id: u32, is_deleted: Cell<bool>, + #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, } diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 750edfb8329..0b6fa7b3869 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -50,10 +50,12 @@ macro_rules! handle_potential_webgl_error { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLRenderingContext { reflector_: Reflector, global: GlobalField, renderer_id: usize, + #[ignore_heap_size_of = "Defined in ipc-channel"] ipc_renderer: IpcSender<CanvasMsg>, canvas: JS<HTMLCanvasElement>, last_error: Cell<Option<WebGLError>>, diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index 40c26d40c90..3fe107d9f67 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -17,6 +17,7 @@ use std::cell::Cell; use std::cell::RefCell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLShader { webgl_object: WebGLObject, id: u32, @@ -24,6 +25,7 @@ pub struct WebGLShader { source: RefCell<Option<String>>, is_deleted: Cell<bool>, // TODO(ecoal95): Evaluate moving this to `WebGLObject` + #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, } diff --git a/components/script/dom/webglshaderprecisionformat.rs b/components/script/dom/webglshaderprecisionformat.rs index b5d89d735ee..17c3ce97a8c 100644 --- a/components/script/dom/webglshaderprecisionformat.rs +++ b/components/script/dom/webglshaderprecisionformat.rs @@ -10,6 +10,7 @@ use dom::bindings::js::Root; use dom::bindings::utils::{Reflector,reflect_dom_object}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLShaderPrecisionFormat { reflector_: Reflector, range_min: i32, diff --git a/components/script/dom/webgltexture.rs b/components/script/dom/webgltexture.rs index 06664a01f3d..579c196e90a 100644 --- a/components/script/dom/webgltexture.rs +++ b/components/script/dom/webgltexture.rs @@ -14,10 +14,12 @@ use ipc_channel::ipc::{self, IpcSender}; use std::cell::Cell; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLTexture { webgl_object: WebGLObject, id: u32, is_deleted: Cell<bool>, + #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, } diff --git a/components/script/dom/webgluniformlocation.rs b/components/script/dom/webgluniformlocation.rs index 56a97555ce6..d7f7c836706 100644 --- a/components/script/dom/webgluniformlocation.rs +++ b/components/script/dom/webgluniformlocation.rs @@ -9,6 +9,7 @@ use dom::bindings::js::Root; use dom::bindings::utils::{Reflector,reflect_dom_object}; #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebGLUniformLocation { reflector_: Reflector, id: i32, diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index ce515d0f276..13f751388f8 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -48,7 +48,7 @@ use std::borrow::ToOwned; use std::cell::{Cell, RefCell}; use std::sync::{Arc, Mutex}; -#[derive(JSTraceable, PartialEq, Copy, Clone, Debug)] +#[derive(JSTraceable, PartialEq, Copy, Clone, Debug, HeapSizeOf)] enum WebSocketRequestState { Connecting = 0, Open = 1, @@ -58,17 +58,20 @@ enum WebSocketRequestState { no_jsmanaged_fields!(Sender<WebSocketStream>); +#[derive(HeapSizeOf)] enum MessageData { Text(String), Binary(Vec<u8>), } #[dom_struct] +#[derive(HeapSizeOf)] pub struct WebSocket { eventtarget: EventTarget, url: Url, global: GlobalField, ready_state: Cell<WebSocketRequestState>, + #[ignore_heap_size_of = "Defined in std"] sender: RefCell<Option<Arc<Mutex<Sender<WebSocketStream>>>>>, failed: Cell<bool>, //Flag to tell if websocket was closed due to failure full: Cell<bool>, //Flag to tell if websocket queue is full diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index f471d068f11..e2e2a8b7550 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -88,7 +88,7 @@ enum WindowState { } /// Extra information concerning the reason for reflowing. -#[derive(Debug)] +#[derive(Debug, HeapSizeOf)] pub enum ReflowReason { CachedPageNeededReflow, RefreshTick, diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 628b1178c32..bc39afe6490 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -40,9 +40,11 @@ pub type TrustedWorkerAddress = Trusted<Worker>; // https://html.spec.whatwg.org/multipage/#worker #[dom_struct] +#[derive(HeapSizeOf)] pub struct Worker { eventtarget: EventTarget, global: GlobalField, + #[ignore_heap_size_of = "Defined in std"] /// Sender to the Receiver associated with the DedicatedWorkerGlobalScope /// this Worker created. sender: Sender<(TrustedWorkerAddress, ScriptMsg)>, diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 9a56676eb03..6f88d2eda32 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -53,25 +53,32 @@ pub struct WorkerGlobalScopeInit { // https://html.spec.whatwg.org/multipage/#the-workerglobalscope-common-interface #[dom_struct] +#[derive(HeapSizeOf)] pub struct WorkerGlobalScope { eventtarget: EventTarget, worker_id: WorkerId, worker_url: Url, + #[ignore_heap_size_of = "Defined in std"] runtime: Rc<Runtime>, next_worker_id: Cell<WorkerId>, + #[ignore_heap_size_of = "Defined in std"] resource_task: ResourceTask, location: MutNullableHeap<JS<WorkerLocation>>, navigator: MutNullableHeap<JS<WorkerNavigator>>, console: MutNullableHeap<JS<Console>>, crypto: MutNullableHeap<JS<Crypto>>, timers: TimerManager, + #[ignore_heap_size_of = "Defined in std"] mem_profiler_chan: mem::ProfilerChan, + #[ignore_heap_size_of = "Defined in ipc-channel"] devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, + #[ignore_heap_size_of = "Defined in ipc-channel"] /// Optional `IpcSender` for sending the `DevtoolScriptControlMsg` /// to the server from within the worker devtools_sender: Option<IpcSender<DevtoolScriptControlMsg>>, + #[ignore_heap_size_of = "Defined in std"] /// This `Receiver` will be ignored later if the corresponding /// `IpcSender` doesn't exist devtools_receiver: Receiver<DevtoolScriptControlMsg>, @@ -80,6 +87,7 @@ pub struct WorkerGlobalScope { /// from the worker devtools_wants_updates: Cell<bool>, + #[ignore_heap_size_of = "Defined in std"] constellation_chan: ConstellationChan, } diff --git a/components/script/dom/workerlocation.rs b/components/script/dom/workerlocation.rs index b125b778822..fa52ce1dcf4 100644 --- a/components/script/dom/workerlocation.rs +++ b/components/script/dom/workerlocation.rs @@ -16,6 +16,7 @@ use util::str::DOMString; // https://html.spec.whatwg.org/multipage/#worker-locations #[dom_struct] +#[derive(HeapSizeOf)] pub struct WorkerLocation { reflector_: Reflector, url: Url, diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs index cf7a106034b..f7330f7db69 100644 --- a/components/script/dom/workernavigator.rs +++ b/components/script/dom/workernavigator.rs @@ -13,6 +13,7 @@ use util::str::DOMString; // https://html.spec.whatwg.org/multipage/#workernavigator #[dom_struct] +#[derive(HeapSizeOf)] pub struct WorkerNavigator { reflector_: Reflector, } diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 980683114a2..c7f975d54cd 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -49,6 +49,7 @@ use net_traits::{ResourceTask, ResourceCORSData, LoadData, LoadConsumer}; use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata}; use cors::{allow_cross_origin_request, CORSRequest, RequestMode, AsyncCORSResponseListener}; use cors::CORSResponse; +use util::mem::HeapSizeOf; use util::str::DOMString; use util::task::spawn_named; @@ -69,7 +70,7 @@ use dom::bindings::codegen::UnionTypes::StringOrURLSearchParams::{eString, eURLS pub type SendParam = StringOrURLSearchParams; -#[derive(JSTraceable, PartialEq, Copy, Clone)] +#[derive(JSTraceable, PartialEq, Copy, Clone, HeapSizeOf)] enum XMLHttpRequestState { Unsent = 0, Opened = 1, @@ -78,7 +79,7 @@ enum XMLHttpRequestState { Done = 4, } -#[derive(JSTraceable, PartialEq, Clone, Copy)] +#[derive(JSTraceable, PartialEq, Clone, Copy, HeapSizeOf)] pub struct GenerationId(u32); /// Closure of required data for each async network event that comprises the @@ -115,6 +116,7 @@ impl XHRProgress { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct XMLHttpRequest { eventtarget: XMLHttpRequestEventTarget, ready_state: Cell<XMLHttpRequestState>, @@ -127,11 +129,13 @@ pub struct XMLHttpRequest { response: DOMRefCell<ByteString>, response_type: Cell<XMLHttpRequestResponseType>, response_xml: MutNullableHeap<JS<Document>>, + #[ignore_heap_size_of = "Defined in hyper"] response_headers: DOMRefCell<Headers>, // Associated concepts request_method: DOMRefCell<Method>, request_url: DOMRefCell<Option<Url>>, + #[ignore_heap_size_of = "Defined in hyper"] request_headers: DOMRefCell<Headers>, request_body_len: Cell<usize>, sync: Cell<bool>, @@ -140,8 +144,10 @@ pub struct XMLHttpRequest { send_flag: Cell<bool>, global: GlobalField, + #[ignore_heap_size_of = "Defined in std"] timeout_cancel: DOMRefCell<Option<Sender<()>>>, fetch_time: Cell<i64>, + #[ignore_heap_size_of = "Cannot calculate Heap size"] timeout_target: DOMRefCell<Option<Box<ScriptChan+Send>>>, generation_id: Cell<GenerationId>, response_status: Cell<Result<(), ()>>, @@ -1054,7 +1060,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for &'a XMLHttpRequest { use hyper::error::Result; // a dummy header so we can use headers.remove::<SetCookie2>() - #[derive(Clone, Debug)] + #[derive(Clone, Debug, HeapSizeOf)] struct SetCookie2; impl Header for SetCookie2 { fn header_name() -> &'static str { diff --git a/components/script/dom/xmlhttprequesteventtarget.rs b/components/script/dom/xmlhttprequesteventtarget.rs index 6b50898ab27..af4b8b8bc50 100644 --- a/components/script/dom/xmlhttprequesteventtarget.rs +++ b/components/script/dom/xmlhttprequesteventtarget.rs @@ -15,6 +15,7 @@ pub enum XMLHttpRequestEventTargetTypeId { } #[dom_struct] +#[derive(HeapSizeOf)] pub struct XMLHttpRequestEventTarget { eventtarget: EventTarget, } diff --git a/components/script/dom/xmlhttprequestupload.rs b/components/script/dom/xmlhttprequestupload.rs index 0c864fdd3c9..02e1b38deae 100644 --- a/components/script/dom/xmlhttprequestupload.rs +++ b/components/script/dom/xmlhttprequestupload.rs @@ -12,6 +12,7 @@ use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget; use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTargetTypeId; #[dom_struct] +#[derive(HeapSizeOf)] pub struct XMLHttpRequestUpload { eventtarget: XMLHttpRequestEventTarget } diff --git a/components/script/lib.rs b/components/script/lib.rs index 59b37f78a25..5ea49146de6 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -65,6 +65,7 @@ extern crate profile_traits; extern crate script_traits; extern crate selectors; extern crate smallvec; +#[macro_use] extern crate util; extern crate websocket; #[macro_use] diff --git a/components/script/mem.rs b/components/script/mem.rs index 6dbd45e5b8a..b3a236866bb 100644 --- a/components/script/mem.rs +++ b/components/script/mem.rs @@ -4,8 +4,12 @@ //! Routines for handling measuring the memory usage of arbitrary DOM nodes. -use dom::bindings::codegen::InheritTypes::{DocumentCast, WindowCast, CharacterDataCast, NodeCast}; +use dom::bindings::codegen::InheritTypes::*; +use dom::element::ElementTypeId; use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::htmlelement::HTMLElementTypeId; +use dom::htmlmediaelement::HTMLMediaElementTypeId::{HTMLAudioElement, HTMLVideoElement}; +use dom::htmltablecellelement::HTMLTableCellElementTypeId::{HTMLTableDataCellElement, HTMLTableHeaderCellElement}; use dom::node::NodeTypeId; use libc; use util::mem::{HeapSizeOf, heap_size_of}; @@ -29,8 +33,217 @@ pub fn heap_size_of_eventtarget(target: &EventTarget) -> usize { heap_size_of_self_and_children(CharacterDataCast::to_ref(target).unwrap()), &EventTargetTypeId::Node(NodeTypeId::Document) => heap_size_of_self_and_children(DocumentCast::to_ref(target).unwrap()), - &EventTargetTypeId::Node(_) => - heap_size_of_self_and_children(NodeCast::to_ref(target).unwrap()), - _ => 0, + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::Element)) => + heap_size_of_self_and_children(ElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLElement))) => + heap_size_of_self_and_children(HTMLElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement))) => + heap_size_of_self_and_children(HTMLAnchorElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAppletElement))) => + heap_size_of_self_and_children(HTMLAppletElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAreaElement))) => + heap_size_of_self_and_children(HTMLAreaElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLBaseElement))) => + heap_size_of_self_and_children(HTMLBaseElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLBRElement))) => + heap_size_of_self_and_children(HTMLBRElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLBodyElement))) => + heap_size_of_self_and_children(HTMLBodyElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement))) => + heap_size_of_self_and_children(HTMLButtonElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLCanvasElement))) => + heap_size_of_self_and_children(HTMLCanvasElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLDataElement))) => + heap_size_of_self_and_children(HTMLDataElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLDataListElement))) => + heap_size_of_self_and_children(HTMLDataListElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLDialogElement))) => + heap_size_of_self_and_children(HTMLDialogElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLDirectoryElement))) => + heap_size_of_self_and_children(HTMLDirectoryElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLDListElement))) => + heap_size_of_self_and_children(HTMLDListElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLDivElement))) => + heap_size_of_self_and_children(HTMLDivElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLEmbedElement))) => + heap_size_of_self_and_children(HTMLEmbedElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFieldSetElement))) => + heap_size_of_self_and_children(HTMLFieldSetElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFontElement))) => + heap_size_of_self_and_children(HTMLFontElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFormElement))) => + heap_size_of_self_and_children(HTMLFormElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFrameElement))) => + heap_size_of_self_and_children(HTMLFrameElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFrameSetElement))) => + heap_size_of_self_and_children(HTMLFrameSetElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLHRElement))) => + heap_size_of_self_and_children(HTMLHRElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLHeadElement))) => + heap_size_of_self_and_children(HTMLHeadElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLHeadingElement))) => + heap_size_of_self_and_children(HTMLHeadingElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLHtmlElement))) => + heap_size_of_self_and_children(HTMLHtmlElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLIFrameElement))) => + heap_size_of_self_and_children(HTMLIFrameElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLImageElement))) => + heap_size_of_self_and_children(HTMLImageElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement))) => + heap_size_of_self_and_children(HTMLInputElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLabelElement))) => + heap_size_of_self_and_children(HTMLLabelElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLegendElement))) => + heap_size_of_self_and_children(HTMLLegendElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLinkElement))) => + heap_size_of_self_and_children(HTMLLinkElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLIElement))) => + heap_size_of_self_and_children(HTMLLIElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLMapElement))) => + heap_size_of_self_and_children(HTMLMapElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( + HTMLElementTypeId::HTMLMediaElement(HTMLAudioElement)))) => + heap_size_of_self_and_children(HTMLAudioElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( + HTMLElementTypeId::HTMLMediaElement(HTMLVideoElement)))) => + heap_size_of_self_and_children(HTMLVideoElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLMetaElement))) => + heap_size_of_self_and_children(HTMLMetaElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLMeterElement))) => + heap_size_of_self_and_children(HTMLMeterElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLModElement))) => + heap_size_of_self_and_children(HTMLModElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLObjectElement))) => + heap_size_of_self_and_children(HTMLObjectElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLOListElement))) => + heap_size_of_self_and_children(HTMLOListElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLOptGroupElement))) => + heap_size_of_self_and_children(HTMLOptGroupElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLOptionElement))) => + heap_size_of_self_and_children(HTMLOptionElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLOutputElement))) => + heap_size_of_self_and_children(HTMLOutputElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLParagraphElement))) => + heap_size_of_self_and_children(HTMLParagraphElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLParamElement))) => + heap_size_of_self_and_children(HTMLParamElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLPreElement))) => + heap_size_of_self_and_children(HTMLPreElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLProgressElement))) => + heap_size_of_self_and_children(HTMLProgressElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLQuoteElement))) => + heap_size_of_self_and_children(HTMLQuoteElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLScriptElement))) => + heap_size_of_self_and_children(HTMLScriptElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement))) => + heap_size_of_self_and_children(HTMLSelectElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSourceElement))) => + heap_size_of_self_and_children(HTMLSourceElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSpanElement))) => + heap_size_of_self_and_children(HTMLSpanElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLStyleElement))) => + heap_size_of_self_and_children(HTMLStyleElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTableElement))) => + heap_size_of_self_and_children(HTMLTableElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTableCaptionElement))) => + heap_size_of_self_and_children(HTMLTableCaptionElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( + HTMLElementTypeId::HTMLTableCellElement(HTMLTableDataCellElement)))) => + heap_size_of_self_and_children(HTMLTableDataCellElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element(ElementTypeId::HTMLElement( + HTMLElementTypeId::HTMLTableCellElement(HTMLTableHeaderCellElement)))) => + heap_size_of_self_and_children(HTMLTableHeaderCellElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTableColElement))) => + heap_size_of_self_and_children(HTMLTableColElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTableRowElement))) => + heap_size_of_self_and_children(HTMLTableRowElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTableSectionElement))) => + heap_size_of_self_and_children(HTMLTableSectionElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTemplateElement))) => + heap_size_of_self_and_children(HTMLTemplateElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement))) => + heap_size_of_self_and_children(HTMLTextAreaElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTimeElement))) => + heap_size_of_self_and_children(HTMLTimeElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTitleElement))) => + heap_size_of_self_and_children(HTMLTitleElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTrackElement))) => + heap_size_of_self_and_children(HTMLTrackElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLUListElement))) => + heap_size_of_self_and_children(HTMLUListElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::Element( + ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLUnknownElement))) => + heap_size_of_self_and_children(HTMLUnknownElementCast::to_ref(target).unwrap()), + &EventTargetTypeId::WebSocket => 0, + &EventTargetTypeId::Worker => 0, + &EventTargetTypeId::FileReader => 0, + &EventTargetTypeId::WorkerGlobalScope(_) => 0, + &EventTargetTypeId::XMLHttpRequestEventTarget(_) => 0, + &EventTargetTypeId::Node(NodeTypeId::DocumentType) => + heap_size_of_self_and_children(DocumentTypeCast::to_ref(target).unwrap()), + &EventTargetTypeId::Node(NodeTypeId::DocumentFragment) => + heap_size_of_self_and_children(DocumentFragmentCast::to_ref(target).unwrap()), } } diff --git a/components/script/textinput.rs b/components/script/textinput.rs index a88f2bf491a..31fc7dc2e25 100644 --- a/components/script/textinput.rs +++ b/components/script/textinput.rs @@ -8,6 +8,7 @@ use clipboard_provider::ClipboardProvider; use dom::keyboardevent::{KeyboardEvent, KeyboardEventHelpers, key_value}; use msg::constellation_msg::{SHIFT, CONTROL, ALT, SUPER}; use msg::constellation_msg::{Key, KeyModifiers}; +use util::mem::HeapSizeOf; use util::str::{DOMString, slice_chars}; use std::borrow::ToOwned; @@ -21,7 +22,7 @@ pub enum Selection { NotSelected } -#[derive(JSTraceable, Copy, Clone)] +#[derive(JSTraceable, Copy, Clone, HeapSizeOf)] pub struct TextPoint { /// 0-based line number pub line: usize, @@ -30,7 +31,7 @@ pub struct TextPoint { } /// Encapsulated state for handling keyboard input in a single or multiline text input control. -#[derive(JSTraceable)] +#[derive(JSTraceable, HeapSizeOf)] pub struct TextInput<T: ClipboardProvider> { /// Current text input content, split across lines without trailing '\n' lines: Vec<DOMString>, @@ -40,6 +41,7 @@ pub struct TextInput<T: ClipboardProvider> { selection_begin: Option<TextPoint>, /// Is this a multiline input? multiline: bool, + #[ignore_heap_size_of = "Can't easily measure this generic type"] clipboard_provider: T, } diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 2e8a8a7bdba..3c1c7d9855e 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -130,8 +130,10 @@ dependencies = [ "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", "layers 0.1.0 (git+https://github.com/servo/rust-layers)", "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", + "plugins 0.0.1", "serde 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "util 0.0.1", ] [[package]] @@ -302,6 +304,7 @@ dependencies = [ "hyper 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", "msg 0.0.1", + "plugins 0.0.1", "rustc-serialize 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -964,6 +967,7 @@ dependencies = [ "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", + "plugins 0.0.1", "png 0.1.0 (git+https://github.com/servo/rust-png)", "regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "regex_macros 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1553,6 +1557,7 @@ dependencies = [ "euclid 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "getopts 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "html5ever 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", "js 0.1.0 (git+https://github.com/servo/rust-mozjs)", "layers 0.1.0 (git+https://github.com/servo/rust-layers)", @@ -1564,6 +1569,7 @@ dependencies = [ "plugins 0.0.1", "rand 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", + "selectors 0.1.0 (git+https://github.com/servo/rust-selectors)", "serde 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index fd22abbaf02..56dd9a47e0b 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -5489,9 +5489,11 @@ mod property_bit_field { /// Declarations are stored in reverse order. /// Overridden declarations are skipped. -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, HeapSizeOf)] pub struct PropertyDeclarationBlock { + #[ignore_heap_size_of = "#7038"] pub important: Arc<Vec<PropertyDeclaration>>, + #[ignore_heap_size_of = "#7038"] pub normal: Arc<Vec<PropertyDeclaration>>, } diff --git a/components/util/Cargo.toml b/components/util/Cargo.toml index 2796a6e0f35..5a537c251c9 100644 --- a/components/util/Cargo.toml +++ b/components/util/Cargo.toml @@ -38,6 +38,9 @@ git = "https://github.com/pcwalton/ipc-channel" version = "0.2" features = [ "serde_serialization" ] +[dependencies.selectors] +git = "https://github.com/servo/rust-selectors" + [dependencies] log = "0.3" bitflags = "0.3" @@ -54,3 +57,4 @@ serde_macros = "0.5" string_cache = "0.1" lazy_static = "0.1" getopts = "0.2.11" +hyper = "0.6" diff --git a/components/util/lib.rs b/components/util/lib.rs index c8cc8a9770c..4c2ef7f6746 100644 --- a/components/util/lib.rs +++ b/components/util/lib.rs @@ -31,6 +31,7 @@ extern crate alloc; extern crate euclid; extern crate getopts; extern crate html5ever; +extern crate hyper; extern crate ipc_channel; extern crate js; extern crate layers; @@ -39,6 +40,7 @@ extern crate num as num_lib; extern crate num_cpus; extern crate rand; extern crate rustc_serialize; +extern crate selectors; extern crate serde; extern crate smallvec; extern crate string_cache; diff --git a/components/util/mem.rs b/components/util/mem.rs index eb5785a40df..8619cbf2d5e 100644 --- a/components/util/mem.rs +++ b/components/util/mem.rs @@ -11,7 +11,7 @@ use std::hash::Hash; use std::mem::{size_of, transmute}; use std::sync::Arc; use std::rc::Rc; - +use std::result::Result; use azure::azure_hl::Color; use cssparser::Color as CSSParserColor; @@ -28,8 +28,16 @@ use js::rust::GCMethods; use js::jsval::JSVal; use logical_geometry::WritingMode; use range::Range; +use str::LengthOrPercentageOrAuto; use string_cache::atom::Atom; +use string_cache::namespace::Namespace; use url; +use hyper::method::Method; +use hyper::http::RawStatus; +use hyper::header::ContentType; +use hyper::mime::{Mime, TopLevel, SubLevel, Attr, Value}; +use selectors::parser::{PseudoElement, Selector, CompoundSelector, SimpleSelector, Combinator}; +use rand::OsRng; extern { // Get the size of a heap block. @@ -285,6 +293,118 @@ macro_rules! known_heap_size( ); ); +// This is measured properly by the heap measurement implemented in SpiderMonkey. +impl<T: Copy + GCMethods<T>> HeapSizeOf for Heap<T> { + fn heap_size_of_children(&self) -> usize { + 0 + } +} + +impl HeapSizeOf for Method { + fn heap_size_of_children(&self) -> usize { + match self { + &Method::Extension(ref str) => str.heap_size_of_children(), + _ => 0 + } + } +} + +impl<T: HeapSizeOf, U: HeapSizeOf> HeapSizeOf for Result<T, U> { + fn heap_size_of_children(&self) -> usize { + match self { + &Result::Ok(ref ok) => ok.heap_size_of_children(), + &Result::Err(ref err) => err.heap_size_of_children() + } + } +} + +impl HeapSizeOf for () { + fn heap_size_of_children(&self) -> usize { + 0 + } +} + +impl HeapSizeOf for Selector { + fn heap_size_of_children(&self) -> usize { + let &Selector { ref compound_selectors, ref pseudo_element, ref specificity } = self; + compound_selectors.heap_size_of_children() + pseudo_element.heap_size_of_children() + + specificity.heap_size_of_children() + } +} + +impl HeapSizeOf for CompoundSelector { + fn heap_size_of_children(&self) -> usize { + let &CompoundSelector { ref simple_selectors, ref next } = self; + simple_selectors.heap_size_of_children() + next.heap_size_of_children() + } +} + +impl HeapSizeOf for SimpleSelector { + fn heap_size_of_children(&self) -> usize { + match self { + &SimpleSelector::Negation(ref vec) => vec.heap_size_of_children(), + &SimpleSelector::AttrIncludes(_, ref str) | &SimpleSelector::AttrPrefixMatch(_, ref str) | + &SimpleSelector::AttrSubstringMatch(_, ref str) | &SimpleSelector::AttrSuffixMatch(_, ref str) + => str.heap_size_of_children(), + &SimpleSelector::AttrEqual(_, ref str, _) => str.heap_size_of_children(), + &SimpleSelector::AttrDashMatch(_, ref first, ref second) => first.heap_size_of_children() + + second.heap_size_of_children(), + // All other types come down to Atom, enum or i32, all 0 + _ => 0 + } + } +} + +impl HeapSizeOf for ContentType { + fn heap_size_of_children(&self) -> usize { + let &ContentType(ref mime) = self; + mime.heap_size_of_children() + } +} + +impl HeapSizeOf for Mime { + fn heap_size_of_children(&self) -> usize { + let &Mime(ref top_level, ref sub_level, ref vec) = self; + top_level.heap_size_of_children() + sub_level.heap_size_of_children() + + vec.heap_size_of_children() + } +} + +impl HeapSizeOf for TopLevel { + fn heap_size_of_children(&self) -> usize { + match self { + &TopLevel::Ext(ref str) => str.heap_size_of_children(), + _ => 0 + } + } +} + +impl HeapSizeOf for SubLevel { + fn heap_size_of_children(&self) -> usize { + match self { + &SubLevel::Ext(ref str) => str.heap_size_of_children(), + _ => 0 + } + } +} + +impl HeapSizeOf for Attr { + fn heap_size_of_children(&self) -> usize { + match self { + &Attr::Ext(ref str) => str.heap_size_of_children(), + _ => 0 + } + } +} + +impl HeapSizeOf for Value { + fn heap_size_of_children(&self) -> usize { + match self { + &Value::Ext(ref str) => str.heap_size_of_children(), + _ => 0 + } + } +} known_heap_size!(0, u8, u16, u32, u64, usize); known_heap_size!(0, i8, i16, i32, i64, isize); @@ -293,12 +413,7 @@ known_heap_size!(0, bool, f32, f64); known_heap_size!(0, Rect<T>, Point2D<T>, Size2D<T>, Matrix2D<T>, SideOffsets2D<T>, Range<T>); known_heap_size!(0, Length<T, U>, ScaleFactor<T, U, V>); -known_heap_size!(0, Au, WritingMode, CSSParserColor, Color, RGBA, Cursor, Matrix4, Atom); -known_heap_size!(0, JSVal, PagePx, ViewportPx, DevicePixel, QuirksMode); +known_heap_size!(0, Au, WritingMode, CSSParserColor, Color, RGBA, Cursor, Matrix4, Atom, Namespace); +known_heap_size!(0, JSVal, PagePx, ViewportPx, DevicePixel, QuirksMode, OsRng, RawStatus, LengthOrPercentageOrAuto); -// This is measured properly by the heap measurement implemented in SpiderMonkey. -impl<T: Copy + GCMethods<T>> HeapSizeOf for Heap<T> { - fn heap_size_of_children(&self) -> usize { - 0 - } -} +known_heap_size!(0, PseudoElement, Combinator, str); |