aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorBogdan Cuza <boghison22@gmail.com>2015-08-05 18:31:42 +0300
committerBogdan Cuza <boghison22@gmail.com>2015-08-13 21:44:41 +0300
commit45145108daa6af7e834a7c23530857c504b54b9c (patch)
treeabc5db1c178435c5192e20049b4b51b196e7b26b /components
parent94c8dcd575a5187e02ec043c686b1cdfa6b30ba6 (diff)
downloadservo-45145108daa6af7e834a7c23530857c504b54b9c.tar.gz
servo-45145108daa6af7e834a7c23530857c504b54b9c.zip
Measure heap memory usage for more types. Fixes #6951
Diffstat (limited to 'components')
-rw-r--r--components/canvas_traits/Cargo.toml6
-rw-r--r--components/canvas_traits/lib.rs22
-rw-r--r--components/devtools_traits/Cargo.toml3
-rw-r--r--components/devtools_traits/lib.rs2
-rw-r--r--components/msg/constellation_msg.rs3
-rw-r--r--components/net_traits/Cargo.toml3
-rw-r--r--components/net_traits/hosts.rs2
-rw-r--r--components/net_traits/image/base.rs6
-rw-r--r--components/net_traits/image_cache_task.rs3
-rw-r--r--components/net_traits/lib.rs13
-rw-r--r--components/net_traits/storage_task.rs2
-rw-r--r--components/script/cors.rs6
-rw-r--r--components/script/dom/attr.rs4
-rw-r--r--components/script/dom/bindings/error.rs3
-rw-r--r--components/script/dom/bindings/global.rs4
-rw-r--r--components/script/dom/bindings/js.rs1
-rw-r--r--components/script/dom/bindings/str.rs4
-rw-r--r--components/script/dom/blob.rs3
-rw-r--r--components/script/dom/canvasgradient.rs3
-rw-r--r--components/script/dom/canvaspattern.rs1
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs6
-rw-r--r--components/script/dom/closeevent.rs1
-rw-r--r--components/script/dom/comment.rs1
-rw-r--r--components/script/dom/console.rs1
-rw-r--r--components/script/dom/crypto.rs1
-rw-r--r--components/script/dom/css.rs1
-rw-r--r--components/script/dom/cssstyledeclaration.rs3
-rw-r--r--components/script/dom/customevent.rs2
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs5
-rw-r--r--components/script/dom/document.rs22
-rw-r--r--components/script/dom/documentfragment.rs1
-rw-r--r--components/script/dom/documenttype.rs1
-rw-r--r--components/script/dom/domexception.rs3
-rw-r--r--components/script/dom/domimplementation.rs1
-rw-r--r--components/script/dom/domparser.rs1
-rw-r--r--components/script/dom/dompoint.rs1
-rw-r--r--components/script/dom/dompointreadonly.rs1
-rw-r--r--components/script/dom/domrect.rs1
-rw-r--r--components/script/dom/domrectlist.rs1
-rw-r--r--components/script/dom/domstringmap.rs1
-rw-r--r--components/script/dom/domtokenlist.rs1
-rw-r--r--components/script/dom/element.rs5
-rw-r--r--components/script/dom/errorevent.rs2
-rw-r--r--components/script/dom/event.rs8
-rw-r--r--components/script/dom/file.rs1
-rw-r--r--components/script/dom/filelist.rs1
-rw-r--r--components/script/dom/filereader.rs9
-rw-r--r--components/script/dom/formdata.rs2
-rw-r--r--components/script/dom/htmlanchorelement.rs1
-rw-r--r--components/script/dom/htmlappletelement.rs1
-rw-r--r--components/script/dom/htmlareaelement.rs1
-rw-r--r--components/script/dom/htmlaudioelement.rs1
-rw-r--r--components/script/dom/htmlbaseelement.rs1
-rw-r--r--components/script/dom/htmlbodyelement.rs1
-rw-r--r--components/script/dom/htmlbrelement.rs1
-rw-r--r--components/script/dom/htmlbuttonelement.rs2
-rw-r--r--components/script/dom/htmlcanvaselement.rs3
-rw-r--r--components/script/dom/htmlcollection.rs12
-rw-r--r--components/script/dom/htmldataelement.rs1
-rw-r--r--components/script/dom/htmldatalistelement.rs3
-rw-r--r--components/script/dom/htmldialogelement.rs1
-rw-r--r--components/script/dom/htmldirectoryelement.rs1
-rw-r--r--components/script/dom/htmldivelement.rs1
-rw-r--r--components/script/dom/htmldlistelement.rs1
-rw-r--r--components/script/dom/htmlelement.rs1
-rw-r--r--components/script/dom/htmlembedelement.rs1
-rw-r--r--components/script/dom/htmlfieldsetelement.rs3
-rw-r--r--components/script/dom/htmlfontelement.rs1
-rw-r--r--components/script/dom/htmlformelement.rs12
-rw-r--r--components/script/dom/htmlframeelement.rs1
-rw-r--r--components/script/dom/htmlframesetelement.rs1
-rw-r--r--components/script/dom/htmlheadelement.rs1
-rw-r--r--components/script/dom/htmlheadingelement.rs3
-rw-r--r--components/script/dom/htmlhrelement.rs1
-rw-r--r--components/script/dom/htmlhtmlelement.rs1
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/dom/htmlimageelement.rs1
-rw-r--r--components/script/dom/htmlinputelement.rs4
-rw-r--r--components/script/dom/htmllabelelement.rs1
-rw-r--r--components/script/dom/htmllegendelement.rs1
-rw-r--r--components/script/dom/htmllielement.rs1
-rw-r--r--components/script/dom/htmllinkelement.rs1
-rw-r--r--components/script/dom/htmlmapelement.rs1
-rw-r--r--components/script/dom/htmlmediaelement.rs1
-rw-r--r--components/script/dom/htmlmetaelement.rs1
-rw-r--r--components/script/dom/htmlmeterelement.rs1
-rw-r--r--components/script/dom/htmlmodelement.rs1
-rw-r--r--components/script/dom/htmlobjectelement.rs1
-rw-r--r--components/script/dom/htmlolistelement.rs1
-rw-r--r--components/script/dom/htmloptgroupelement.rs1
-rw-r--r--components/script/dom/htmloptionelement.rs1
-rw-r--r--components/script/dom/htmloutputelement.rs1
-rw-r--r--components/script/dom/htmlparagraphelement.rs1
-rw-r--r--components/script/dom/htmlparamelement.rs1
-rw-r--r--components/script/dom/htmlpreelement.rs1
-rw-r--r--components/script/dom/htmlprogresselement.rs1
-rw-r--r--components/script/dom/htmlquoteelement.rs1
-rw-r--r--components/script/dom/htmlscriptelement.rs3
-rw-r--r--components/script/dom/htmlselectelement.rs1
-rw-r--r--components/script/dom/htmlsourceelement.rs1
-rw-r--r--components/script/dom/htmlspanelement.rs1
-rw-r--r--components/script/dom/htmlstyleelement.rs1
-rw-r--r--components/script/dom/htmltablecaptionelement.rs1
-rw-r--r--components/script/dom/htmltablecellelement.rs1
-rw-r--r--components/script/dom/htmltablecolelement.rs1
-rw-r--r--components/script/dom/htmltabledatacellelement.rs1
-rw-r--r--components/script/dom/htmltableelement.rs1
-rw-r--r--components/script/dom/htmltableheadercellelement.rs1
-rw-r--r--components/script/dom/htmltablerowelement.rs1
-rw-r--r--components/script/dom/htmltablesectionelement.rs1
-rw-r--r--components/script/dom/htmltemplateelement.rs1
-rw-r--r--components/script/dom/htmltextareaelement.rs2
-rw-r--r--components/script/dom/htmltimeelement.rs1
-rw-r--r--components/script/dom/htmltitleelement.rs1
-rw-r--r--components/script/dom/htmltrackelement.rs1
-rw-r--r--components/script/dom/htmlulistelement.rs1
-rw-r--r--components/script/dom/htmlunknownelement.rs1
-rw-r--r--components/script/dom/htmlvideoelement.rs1
-rw-r--r--components/script/dom/imagedata.rs1
-rw-r--r--components/script/dom/keyboardevent.rs2
-rw-r--r--components/script/dom/location.rs1
-rw-r--r--components/script/dom/messageevent.rs1
-rw-r--r--components/script/dom/mouseevent.rs1
-rw-r--r--components/script/dom/namednodemap.rs1
-rw-r--r--components/script/dom/navigator.rs1
-rw-r--r--components/script/dom/node.rs6
-rw-r--r--components/script/dom/nodeiterator.rs3
-rw-r--r--components/script/dom/nodelist.rs6
-rw-r--r--components/script/dom/performance.rs1
-rw-r--r--components/script/dom/performancetiming.rs1
-rw-r--r--components/script/dom/processinginstruction.rs1
-rw-r--r--components/script/dom/progressevent.rs1
-rw-r--r--components/script/dom/range.rs3
-rw-r--r--components/script/dom/screen.rs1
-rw-r--r--components/script/dom/servohtmlparser.rs4
-rw-r--r--components/script/dom/storage.rs1
-rw-r--r--components/script/dom/storageevent.rs1
-rw-r--r--components/script/dom/testbinding.rs1
-rw-r--r--components/script/dom/testbindingproxy.rs1
-rw-r--r--components/script/dom/text.rs1
-rw-r--r--components/script/dom/textdecoder.rs2
-rw-r--r--components/script/dom/textencoder.rs2
-rw-r--r--components/script/dom/uievent.rs1
-rw-r--r--components/script/dom/url.rs1
-rw-r--r--components/script/dom/urlhelper.rs1
-rw-r--r--components/script/dom/urlsearchparams.rs1
-rw-r--r--components/script/dom/validitystate.rs1
-rw-r--r--components/script/dom/webglactiveinfo.rs1
-rw-r--r--components/script/dom/webglbuffer.rs2
-rw-r--r--components/script/dom/webglframebuffer.rs2
-rw-r--r--components/script/dom/webglobject.rs1
-rw-r--r--components/script/dom/webglprogram.rs2
-rw-r--r--components/script/dom/webglrenderbuffer.rs2
-rw-r--r--components/script/dom/webglrenderingcontext.rs2
-rw-r--r--components/script/dom/webglshader.rs2
-rw-r--r--components/script/dom/webglshaderprecisionformat.rs1
-rw-r--r--components/script/dom/webgltexture.rs2
-rw-r--r--components/script/dom/webgluniformlocation.rs1
-rw-r--r--components/script/dom/websocket.rs5
-rw-r--r--components/script/dom/window.rs2
-rw-r--r--components/script/dom/worker.rs2
-rw-r--r--components/script/dom/workerglobalscope.rs8
-rw-r--r--components/script/dom/workerlocation.rs1
-rw-r--r--components/script/dom/workernavigator.rs1
-rw-r--r--components/script/dom/xmlhttprequest.rs12
-rw-r--r--components/script/dom/xmlhttprequesteventtarget.rs1
-rw-r--r--components/script/dom/xmlhttprequestupload.rs1
-rw-r--r--components/script/lib.rs1
-rw-r--r--components/script/mem.rs221
-rw-r--r--components/script/textinput.rs6
-rw-r--r--components/servo/Cargo.lock6
-rw-r--r--components/style/properties.mako.rs4
-rw-r--r--components/util/Cargo.toml4
-rw-r--r--components/util/lib.rs2
-rw-r--r--components/util/mem.rs133
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);