aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Nethercote <nnethercote@mozilla.com>2017-10-18 10:42:01 +1100
committerNicholas Nethercote <nnethercote@mozilla.com>2017-10-18 22:20:37 +1100
commit4506f0d30cbbb02df32e9c16135ef288ad6b7e2e (patch)
tree9a3de6bfdfabc6dee92352fb18df31e2468acf07
parent421baa854ea40c7b1a3d1e75acac14da04a3fbcc (diff)
downloadservo-4506f0d30cbbb02df32e9c16135ef288ad6b7e2e.tar.gz
servo-4506f0d30cbbb02df32e9c16135ef288ad6b7e2e.zip
Replace all uses of the `heapsize` crate with `malloc_size_of`.
Servo currently uses `heapsize`, but Stylo/Gecko use `malloc_size_of`. `malloc_size_of` is better -- it handles various cases that `heapsize` does not -- so this patch changes Servo to use `malloc_size_of`. This patch makes the following changes to the `malloc_size_of` crate. - Adds `MallocSizeOf` trait implementations for numerous types, some built-in (e.g. `VecDeque`), some external and Servo-only (e.g. `string_cache`). - Makes `enclosing_size_of_op` optional, because vanilla jemalloc doesn't support that operation. - For `HashSet`/`HashMap`, falls back to a computed estimate when `enclosing_size_of_op` isn't available. - Adds an extern "C" `malloc_size_of` function that does the actual heap measurement; this is based on the same functions from the `heapsize` crate. This patch makes the following changes elsewhere. - Converts all the uses of `heapsize` to instead use `malloc_size_of`. - Disables the "heapsize"/"heap_size" feature for the external crates that provide it. - Removes the `HeapSizeOf` implementation from `hashglobe`. - Adds `ignore` annotations to a few `Rc`/`Arc`, because `malloc_size_of` doesn't derive those types, unlike `heapsize`.
-rw-r--r--Cargo.lock82
-rw-r--r--components/atoms/Cargo.toml2
-rw-r--r--components/canvas_traits/Cargo.toml4
-rw-r--r--components/canvas_traits/canvas.rs16
-rw-r--r--components/canvas_traits/lib.rs4
-rw-r--r--components/canvas_traits/webgl.rs17
-rw-r--r--components/devtools_traits/Cargo.toml4
-rw-r--r--components/devtools_traits/lib.rs10
-rw-r--r--components/dom_struct/lib.rs2
-rw-r--r--components/geometry/Cargo.toml3
-rw-r--r--components/geometry/lib.rs7
-rw-r--r--components/gfx/Cargo.toml4
-rw-r--r--components/gfx/display_list/mod.rs78
-rw-r--r--components/gfx/font_context.rs8
-rw-r--r--components/gfx/lib.rs5
-rw-r--r--components/gfx/platform/freetype/font_context.rs26
-rw-r--r--components/gfx/platform/macos/font_context.rs10
-rw-r--r--components/gfx/platform/windows/font_context.rs8
-rw-r--r--components/gfx_traits/Cargo.toml4
-rw-r--r--components/gfx_traits/lib.rs10
-rw-r--r--components/hashglobe/Cargo.toml1
-rw-r--r--components/hashglobe/src/fake.rs16
-rw-r--r--components/hashglobe/src/lib.rs2
-rw-r--r--components/layout/Cargo.toml2
-rw-r--r--components/layout/context.rs6
-rw-r--r--components/layout/lib.rs2
-rw-r--r--components/layout_thread/Cargo.toml2
-rw-r--r--components/layout_thread/lib.rs15
-rw-r--r--components/malloc_size_of/Cargo.toml11
-rw-r--r--components/malloc_size_of/lib.rs405
-rw-r--r--components/msg/Cargo.toml4
-rw-r--r--components/msg/constellation_msg.rs16
-rw-r--r--components/msg/lib.rs4
-rw-r--r--components/net/Cargo.toml2
-rw-r--r--components/net_traits/Cargo.toml6
-rw-r--r--components/net_traits/image/base.rs10
-rw-r--r--components/net_traits/image_cache.rs12
-rw-r--r--components/net_traits/lib.rs35
-rw-r--r--components/net_traits/request.rs36
-rw-r--r--components/net_traits/response.rs22
-rw-r--r--components/net_traits/storage_thread.rs2
-rw-r--r--components/profile_traits/mem.rs2
-rw-r--r--components/range/Cargo.toml4
-rw-r--r--components/range/lib.rs6
-rw-r--r--components/script/Cargo.toml8
-rw-r--r--components/script/body.rs2
-rw-r--r--components/script/document_loader.rs6
-rw-r--r--components/script/dom/bindings/cell.rs2
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py10
-rw-r--r--components/script/dom/bindings/error.rs2
-rw-r--r--components/script/dom/bindings/iterable.rs2
-rw-r--r--components/script/dom/bindings/num.rs8
-rw-r--r--components/script/dom/bindings/reflector.rs4
-rw-r--r--components/script/dom/bindings/root.rs32
-rw-r--r--components/script/dom/bindings/str.rs6
-rw-r--r--components/script/dom/bindings/utils.rs12
-rw-r--r--components/script/dom/bindings/weakref.rs12
-rw-r--r--components/script/dom/blob.rs2
-rw-r--r--components/script/dom/bluetooth.rs4
-rw-r--r--components/script/dom/canvasgradient.rs2
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs8
-rw-r--r--components/script/dom/client.rs2
-rw-r--r--components/script/dom/crypto.rs2
-rw-r--r--components/script/dom/cssfontfacerule.rs2
-rw-r--r--components/script/dom/cssgroupingrule.rs2
-rw-r--r--components/script/dom/cssimportrule.rs2
-rw-r--r--components/script/dom/csskeyframerule.rs2
-rw-r--r--components/script/dom/csskeyframesrule.rs2
-rw-r--r--components/script/dom/cssmediarule.rs2
-rw-r--r--components/script/dom/cssnamespacerule.rs2
-rw-r--r--components/script/dom/cssrulelist.rs2
-rw-r--r--components/script/dom/cssstyledeclaration.rs6
-rw-r--r--components/script/dom/cssstylerule.rs2
-rw-r--r--components/script/dom/cssstylesheet.rs2
-rw-r--r--components/script/dom/csssupportsrule.rs2
-rw-r--r--components/script/dom/cssviewportrule.rs2
-rw-r--r--components/script/dom/customelementregistry.rs32
-rw-r--r--components/script/dom/customevent.rs2
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs10
-rw-r--r--components/script/dom/document.rs44
-rw-r--r--components/script/dom/domexception.rs2
-rw-r--r--components/script/dom/element.rs12
-rw-r--r--components/script/dom/errorevent.rs2
-rw-r--r--components/script/dom/event.rs8
-rw-r--r--components/script/dom/eventsource.rs10
-rw-r--r--components/script/dom/eventtarget.rs38
-rw-r--r--components/script/dom/filereader.rs10
-rw-r--r--components/script/dom/gamepad.rs2
-rw-r--r--components/script/dom/globalscope.rs12
-rw-r--r--components/script/dom/headers.rs4
-rwxr-xr-xcomponents/script/dom/htmlbuttonelement.rs2
-rw-r--r--components/script/dom/htmlcanvaselement.rs2
-rw-r--r--components/script/dom/htmlcollection.rs14
-rw-r--r--components/script/dom/htmldatalistelement.rs2
-rw-r--r--components/script/dom/htmlfieldsetelement.rs2
-rwxr-xr-xcomponents/script/dom/htmlformelement.rs20
-rw-r--r--components/script/dom/htmlheadingelement.rs2
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/dom/htmlimageelement.rs10
-rwxr-xr-xcomponents/script/dom/htmlinputelement.rs6
-rw-r--r--components/script/dom/htmllinkelement.rs4
-rw-r--r--components/script/dom/htmlmediaelement.rs10
-rw-r--r--components/script/dom/htmlmetaelement.rs2
-rwxr-xr-xcomponents/script/dom/htmlobjectelement.rs2
-rw-r--r--components/script/dom/htmlscriptelement.rs2
-rwxr-xr-xcomponents/script/dom/htmlselectelement.rs2
-rw-r--r--components/script/dom/htmlstyleelement.rs2
-rw-r--r--components/script/dom/htmltableelement.rs2
-rwxr-xr-xcomponents/script/dom/htmltextareaelement.rs2
-rw-r--r--components/script/dom/keyboardevent.rs2
-rw-r--r--components/script/dom/medialist.rs2
-rw-r--r--components/script/dom/mediaquerylist.rs2
-rw-r--r--components/script/dom/mutationobserver.rs6
-rw-r--r--components/script/dom/node.rs16
-rw-r--r--components/script/dom/nodeiterator.rs4
-rw-r--r--components/script/dom/nodelist.rs6
-rw-r--r--components/script/dom/paintworkletglobalscope.rs4
-rw-r--r--components/script/dom/performance.rs4
-rw-r--r--components/script/dom/performanceobserver.rs2
-rw-r--r--components/script/dom/popstateevent.rs2
-rw-r--r--components/script/dom/promise.rs2
-rw-r--r--components/script/dom/promisenativehandler.rs4
-rw-r--r--components/script/dom/range.rs10
-rw-r--r--components/script/dom/request.rs2
-rw-r--r--components/script/dom/response.rs4
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs8
-rw-r--r--components/script/dom/servoparser/async_html.rs30
-rw-r--r--components/script/dom/servoparser/html.rs4
-rw-r--r--components/script/dom/servoparser/mod.rs12
-rw-r--r--components/script/dom/servoparser/xml.rs4
-rw-r--r--components/script/dom/testbinding.rs8
-rw-r--r--components/script/dom/textdecoder.rs2
-rw-r--r--components/script/dom/treewalker.rs2
-rw-r--r--components/script/dom/urlhelper.rs2
-rwxr-xr-xcomponents/script/dom/validitystate.rs2
-rw-r--r--components/script/dom/vrdisplay.rs14
-rw-r--r--components/script/dom/vrdisplaycapabilities.rs2
-rw-r--r--components/script/dom/vreyeparameters.rs2
-rw-r--r--components/script/dom/vrfieldofview.rs2
-rw-r--r--components/script/dom/vrstageparameters.rs2
-rw-r--r--components/script/dom/webgl_extensions/extensions.rs18
-rw-r--r--components/script/dom/webgl_extensions/wrapper.rs12
-rw-r--r--components/script/dom/webgl_validations/types.rs2
-rw-r--r--components/script/dom/webglbuffer.rs2
-rw-r--r--components/script/dom/webglframebuffer.rs4
-rw-r--r--components/script/dom/webglprogram.rs2
-rw-r--r--components/script/dom/webglrenderbuffer.rs2
-rw-r--r--components/script/dom/webglrenderingcontext.rs18
-rw-r--r--components/script/dom/webglshader.rs4
-rw-r--r--components/script/dom/webgltexture.rs6
-rw-r--r--components/script/dom/websocket.rs4
-rw-r--r--components/script/dom/window.rs42
-rw-r--r--components/script/dom/worker.rs5
-rw-r--r--components/script/dom/workerglobalscope.rs8
-rw-r--r--components/script/dom/worklet.rs6
-rw-r--r--components/script/dom/workletglobalscope.rs4
-rw-r--r--components/script/dom/xmlhttprequest.rs22
-rw-r--r--components/script/lib.rs4
-rw-r--r--components/script/mem.rs16
-rw-r--r--components/script/microtask.rs8
-rw-r--r--components/script/script_thread.rs10
-rw-r--r--components/script/textinput.rs8
-rw-r--r--components/script/timers.rs40
-rw-r--r--components/script_layout_interface/Cargo.toml4
-rw-r--r--components/script_layout_interface/lib.rs12
-rw-r--r--components/script_layout_interface/reporter.rs4
-rw-r--r--components/script_traits/Cargo.toml6
-rw-r--r--components/script_traits/lib.rs36
-rw-r--r--components/servo_arc/Cargo.toml3
-rw-r--r--components/servo_arc/lib.rs11
-rw-r--r--components/style/Cargo.toml13
-rw-r--r--components/style/applicable_declarations.rs11
-rw-r--r--components/style/attr.rs8
-rw-r--r--components/style/custom_properties.rs4
-rw-r--r--components/style/dom.rs2
-rw-r--r--components/style/element_state.rs3
-rw-r--r--components/style/invalidation/element/invalidation_map.rs14
-rw-r--r--components/style/invalidation/element/restyle_hints.rs4
-rw-r--r--components/style/invalidation/media_queries.rs8
-rw-r--r--components/style/invalidation/stylesheets.rs4
-rw-r--r--components/style/lib.rs6
-rw-r--r--components/style/logical_geometry.rs2
-rw-r--r--components/style/macros.rs9
-rw-r--r--components/style/media_queries.rs10
-rw-r--r--components/style/properties/declaration_block.rs8
-rw-r--r--components/style/properties/helpers.mako.rs12
-rw-r--r--components/style/properties/helpers/animated_properties.mako.rs28
-rw-r--r--components/style/properties/longhand/background.mako.rs8
-rw-r--r--components/style/properties/longhand/border.mako.rs16
-rw-r--r--components/style/properties/longhand/box.mako.rs45
-rw-r--r--components/style/properties/longhand/counters.mako.rs12
-rw-r--r--components/style/properties/longhand/font.mako.rs83
-rw-r--r--components/style/properties/longhand/inherited_box.mako.rs12
-rw-r--r--components/style/properties/longhand/inherited_svg.mako.rs4
-rw-r--r--components/style/properties/longhand/inherited_text.mako.rs25
-rw-r--r--components/style/properties/longhand/list.mako.rs8
-rw-r--r--components/style/properties/longhand/pointing.mako.rs4
-rw-r--r--components/style/properties/longhand/position.mako.rs8
-rw-r--r--components/style/properties/longhand/table.mako.rs4
-rw-r--r--components/style/properties/longhand/text.mako.rs16
-rw-r--r--components/style/properties/longhand/ui.mako.rs4
-rw-r--r--components/style/properties/properties.mako.rs26
-rw-r--r--components/style/rule_tree/mod.rs11
-rw-r--r--components/style/selector_map.rs8
-rw-r--r--components/style/selector_parser.rs5
-rw-r--r--components/style/servo/media_queries.rs14
-rw-r--r--components/style/servo/restyle_damage.rs5
-rw-r--r--components/style/servo/selector_parser.rs8
-rw-r--r--components/style/servo/url.rs3
-rw-r--r--components/style/shared_lock.rs4
-rw-r--r--components/style/stylesheet_set.rs8
-rw-r--r--components/style/stylesheets/keyframes_rule.rs18
-rw-r--r--components/style/stylesheets/origin.rs8
-rw-r--r--components/style/stylesheets/rule_parser.rs4
-rw-r--r--components/style/stylesheets/stylesheet.rs6
-rw-r--r--components/style/stylesheets/viewport_rule.rs8
-rw-r--r--components/style/stylist.rs31
-rw-r--r--components/style/values/animated/color.rs4
-rw-r--r--components/style/values/animated/effects.rs4
-rw-r--r--components/style/values/computed/angle.rs5
-rw-r--r--components/style/values/computed/color.rs4
-rw-r--r--components/style/values/computed/font.rs8
-rw-r--r--components/style/values/computed/image.rs4
-rw-r--r--components/style/values/computed/length.rs23
-rw-r--r--components/style/values/computed/mod.rs10
-rw-r--r--components/style/values/computed/percentage.rs5
-rw-r--r--components/style/values/computed/time.rs5
-rw-r--r--components/style/values/generics/background.rs4
-rw-r--r--components/style/values/generics/basic_shape.rs32
-rw-r--r--components/style/values/generics/border.rs20
-rw-r--r--components/style/values/generics/box.rs4
-rw-r--r--components/style/values/generics/effects.rs13
-rw-r--r--components/style/values/generics/flex.rs2
-rw-r--r--components/style/values/generics/grid.rs40
-rw-r--r--components/style/values/generics/image.rs44
-rw-r--r--components/style/values/generics/mod.rs27
-rw-r--r--components/style/values/generics/position.rs4
-rw-r--r--components/style/values/generics/rect.rs4
-rw-r--r--components/style/values/generics/size.rs4
-rw-r--r--components/style/values/generics/svg.rs25
-rw-r--r--components/style/values/generics/text.rs12
-rw-r--r--components/style/values/generics/transform.rs12
-rw-r--r--components/style/values/mod.rs14
-rw-r--r--components/style/values/specified/align.rs5
-rw-r--r--components/style/values/specified/angle.rs5
-rw-r--r--components/style/values/specified/border.rs4
-rw-r--r--components/style/values/specified/calc.rs4
-rw-r--r--components/style/values/specified/color.rs8
-rw-r--r--components/style/values/specified/effects.rs4
-rw-r--r--components/style/values/specified/font.rs8
-rw-r--r--components/style/values/specified/grid.rs2
-rw-r--r--components/style/values/specified/image.rs4
-rw-r--r--components/style/values/specified/length.rs44
-rw-r--r--components/style/values/specified/mod.rs24
-rw-r--r--components/style/values/specified/percentage.rs4
-rw-r--r--components/style/values/specified/position.rs4
-rw-r--r--components/style/values/specified/time.rs8
-rw-r--r--components/style/values/specified/transform.rs4
-rw-r--r--components/style_traits/Cargo.toml4
-rw-r--r--components/style_traits/cursor.rs5
-rw-r--r--components/style_traits/lib.rs8
-rw-r--r--components/style_traits/values.rs6
-rw-r--r--components/style_traits/viewport.rs4
-rw-r--r--components/url/Cargo.toml6
-rw-r--r--components/url/lib.rs11
-rw-r--r--components/url/origin.rs6
-rw-r--r--components/webdriver_server/Cargo.toml2
-rw-r--r--ports/geckolib/glue.rs8
-rw-r--r--tests/unit/net/Cargo.toml2
269 files changed, 1419 insertions, 1522 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 65fa20485d0..11223a6fdf4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -327,10 +327,10 @@ version = "0.0.1"
dependencies = [
"cssparser 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"nonzero 0.0.1",
"offscreen_gl_context 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -580,7 +580,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cssparser-macros 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"dtoa-short 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -714,11 +713,11 @@ name = "devtools_traits"
version = "0.0.1"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper_serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"msg 0.0.1",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
"servo_url 0.0.1",
@@ -1099,12 +1098,12 @@ dependencies = [
"freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx_traits 0.0.1",
"harfbuzz-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"msg 0.0.1",
"net_traits 0.0.1",
"ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1142,8 +1141,8 @@ dependencies = [
name = "gfx_traits"
version = "0.0.1"
dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"range 0.0.1",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1244,7 +1243,6 @@ dependencies = [
name = "hashglobe"
version = "0.1.0"
dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1258,16 +1256,6 @@ dependencies = [
]
[[package]]
-name = "heapsize_derive"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "synstructure 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
name = "heartbeats-simple"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1514,11 +1502,11 @@ dependencies = [
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx 0.0.1",
"gfx_traits 0.0.1",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
"msg 0.0.1",
"net_traits 0.0.1",
"ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1562,7 +1550,6 @@ dependencies = [
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx 0.0.1",
"gfx_traits 0.0.1",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"layout 0.0.1",
@@ -1570,6 +1557,7 @@ dependencies = [
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
"metrics 0.0.1",
"msg 0.0.1",
"net_traits 0.0.1",
@@ -1744,9 +1732,15 @@ dependencies = [
"cssparser 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)",
"hashglobe 0.1.0",
+ "js 0.1.6 (git+https://github.com/servo/rust-mozjs)",
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"servo_arc 0.0.1",
"smallbitvec 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "string_cache 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "webrender_api 0.52.1 (git+https://github.com/servo/webrender)",
+ "xml5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1763,8 +1757,6 @@ name = "markup5ever"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1914,8 +1906,8 @@ name = "msg"
version = "0.0.1"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"nonzero 0.0.1",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
"webrender_api 0.52.1 (git+https://github.com/servo/webrender)",
@@ -2018,14 +2010,14 @@ name = "net_traits"
version = "0.0.1"
dependencies = [
"cookie 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper_serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"msg 0.0.1",
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2452,8 +2444,8 @@ dependencies = [
name = "range"
version = "0.0.1"
dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -2602,8 +2594,6 @@ dependencies = [
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"gleam 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"half 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper_serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2614,6 +2604,8 @@ dependencies = [
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"metrics 0.0.1",
"mime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2669,12 +2661,12 @@ dependencies = [
"cssparser 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx_traits 0.0.1",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"metrics 0.0.1",
"msg 0.0.1",
"net_traits 0.0.1",
@@ -2715,12 +2707,12 @@ dependencies = [
"devtools_traits 0.0.1",
"euclid 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)",
"gfx_traits 0.0.1",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper_serde 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"msg 0.0.1",
"net_traits 0.0.1",
"profile_traits 0.0.1",
@@ -2933,7 +2925,6 @@ dependencies = [
name = "servo_arc"
version = "0.0.1"
dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"nodrop 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
"stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2979,7 +2970,8 @@ version = "0.0.1"
dependencies = [
"app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
]
[[package]]
@@ -3011,8 +3003,8 @@ dependencies = [
name = "servo_url"
version = "0.0.1"
dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "malloc_size_of 0.0.1",
+ "malloc_size_of_derive 0.0.1",
"serde 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
"servo_rand 0.0.1",
"url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3081,9 +3073,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
name = "smallvec"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "stable_deref_trait"
@@ -3096,7 +3085,6 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
"precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3143,8 +3131,6 @@ dependencies = [
"fallible 0.0.1",
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"hashglobe 0.1.0",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
"itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3222,8 +3208,6 @@ dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"cssparser 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"malloc_size_of 0.0.1",
"malloc_size_of_derive 0.0.1",
"selectors 0.19.0",
@@ -3491,7 +3475,6 @@ version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"idna 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3872,7 +3855,6 @@ dependencies = [
"checksum half 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63d68db75012a85555434ee079e7e6337931f87a087ab2988becbadf64673a7f"
"checksum harfbuzz-sys 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "a2caaa66078fdfacea32db1351223697a1167ad2d4bbee6b8d4ca220ce5b10b3"
"checksum heapsize 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4c7593b1522161003928c959c20a2ca421c68e940d63d75573316a009e48a6d4"
-"checksum heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "46f96d52fb1564059fc97b85ef6165728cc30198ab60073bf114c66c4c89bb5d"
"checksum heartbeats-simple 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ad003ce233955e9d95f2c69cde84e68302ba9ba4a673d351c9bff93c738aadc"
"checksum heartbeats-simple-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e1a408c0011427cc0e0049f7861c70377819aedfc006e8c901b1c70fd98fb1a4"
"checksum html5ever 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5bfb46978eb757a603b7dfe2dafb1c62cb4dee3428d8ac1de734d83d6b022d06"
diff --git a/components/atoms/Cargo.toml b/components/atoms/Cargo.toml
index ff149db72ab..5048cee3021 100644
--- a/components/atoms/Cargo.toml
+++ b/components/atoms/Cargo.toml
@@ -10,7 +10,7 @@ build = "build.rs"
path = "lib.rs"
[dependencies]
-string_cache = {version = "0.6", features = ["heapsize"]}
+string_cache = {version = "0.6"}
[build-dependencies]
string_cache_codegen = "0.4"
diff --git a/components/canvas_traits/Cargo.toml b/components/canvas_traits/Cargo.toml
index 54db398a681..9e8be669ddf 100644
--- a/components/canvas_traits/Cargo.toml
+++ b/components/canvas_traits/Cargo.toml
@@ -12,10 +12,10 @@ path = "lib.rs"
[dependencies]
cssparser = "0.22.0"
euclid = "0.15"
-heapsize = "0.4"
-heapsize_derive = "0.1"
ipc-channel = "0.9"
lazy_static = "0.2"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
nonzero = {path = "../nonzero"}
offscreen_gl_context = { version = "0.11", features = ["serde"] }
serde = "1.0"
diff --git a/components/canvas_traits/canvas.rs b/components/canvas_traits/canvas.rs
index 06194052b88..8600de36ebe 100644
--- a/components/canvas_traits/canvas.rs
+++ b/components/canvas_traits/canvas.rs
@@ -82,13 +82,13 @@ pub enum FromScriptMsg {
SendPixels(IpcSender<Option<Vec<u8>>>),
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct CanvasGradientStop {
pub offset: f64,
pub color: RGBA,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct LinearGradientStyle {
pub x0: f64,
pub y0: f64,
@@ -110,7 +110,7 @@ impl LinearGradientStyle {
}
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct RadialGradientStyle {
pub x0: f64,
pub y0: f64,
@@ -165,7 +165,7 @@ pub enum FillOrStrokeStyle {
Surface(SurfaceStyle),
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum LineCapStyle {
Butt = 0,
Round = 1,
@@ -185,7 +185,7 @@ impl FromStr for LineCapStyle {
}
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum LineJoinStyle {
Round = 0,
Bevel = 1,
@@ -227,7 +227,7 @@ impl FromStr for RepetitionStyle {
}
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum CompositionStyle {
SrcIn,
SrcOut,
@@ -281,7 +281,7 @@ impl CompositionStyle {
}
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum BlendingStyle {
Multiply,
Screen,
@@ -347,7 +347,7 @@ impl BlendingStyle {
}
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum CompositionOrBlending {
Composition(CompositionStyle),
Blending(BlendingStyle),
diff --git a/components/canvas_traits/lib.rs b/components/canvas_traits/lib.rs
index 4664a082fdd..f05a91f596a 100644
--- a/components/canvas_traits/lib.rs
+++ b/components/canvas_traits/lib.rs
@@ -9,10 +9,10 @@
extern crate cssparser;
extern crate euclid;
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
extern crate ipc_channel;
#[macro_use] extern crate lazy_static;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate nonzero;
extern crate offscreen_gl_context;
#[macro_use] extern crate serde;
diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs
index 9d53e93287f..42d19d4413c 100644
--- a/components/canvas_traits/webgl.rs
+++ b/components/canvas_traits/webgl.rs
@@ -64,7 +64,7 @@ pub struct WebGLCreateContextResult {
pub share_mode: WebGLContextShareMode,
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub enum WebGLContextShareMode {
/// Fast: a shared texture_id is used in WebRender.
SharedTexture,
@@ -73,10 +73,10 @@ pub enum WebGLContextShareMode {
}
/// Helper struct to send WebGLCommands to a specific WebGLContext.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct WebGLMsgSender {
ctx_id: WebGLContextId,
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
sender: WebGLChan,
}
@@ -313,8 +313,8 @@ macro_rules! define_resource_id {
}
}
- impl ::heapsize::HeapSizeOf for $name {
- fn heap_size_of_children(&self) -> usize { 0 }
+ impl ::malloc_size_of::MallocSizeOf for $name {
+ fn size_of(&self, _ops: &mut ::malloc_size_of::MallocSizeOfOps) -> usize { 0 }
}
}
}
@@ -327,13 +327,10 @@ define_resource_id!(WebGLProgramId);
define_resource_id!(WebGLShaderId);
define_resource_id!(WebGLVertexArrayId);
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, Ord)]
+#[derive(PartialEq, PartialOrd, Serialize)]
pub struct WebGLContextId(pub usize);
-impl ::heapsize::HeapSizeOf for WebGLContextId {
- fn heap_size_of_children(&self) -> usize { 0 }
-}
-
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
pub enum WebGLError {
InvalidEnum,
diff --git a/components/devtools_traits/Cargo.toml b/components/devtools_traits/Cargo.toml
index 323cd25f946..f722002daa8 100644
--- a/components/devtools_traits/Cargo.toml
+++ b/components/devtools_traits/Cargo.toml
@@ -11,11 +11,11 @@ path = "lib.rs"
[dependencies]
bitflags = "0.7"
-heapsize = "0.4"
-heapsize_derive = "0.1"
hyper = "0.10"
hyper_serde = "0.7"
ipc-channel = "0.9"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
msg = {path = "../msg"}
serde = "1.0"
servo_url = {path = "../url"}
diff --git a/components/devtools_traits/lib.rs b/components/devtools_traits/lib.rs
index d703b27e625..1195ef8a987 100644
--- a/components/devtools_traits/lib.rs
+++ b/components/devtools_traits/lib.rs
@@ -14,10 +14,10 @@
#[macro_use]
extern crate bitflags;
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
extern crate hyper;
extern crate ipc_channel;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate msg;
#[macro_use] extern crate serde;
extern crate servo_url;
@@ -40,7 +40,7 @@ pub struct DevtoolsPageInfo {
pub url: ServoUrl,
}
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct CSSError {
pub filename: String,
pub line: u32,
@@ -144,7 +144,7 @@ pub struct TimelineMarker {
pub end_stack: Option<Vec<()>>,
}
-#[derive(Clone, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub enum TimelineMarkerType {
Reflow,
DOMEvent,
@@ -355,5 +355,5 @@ impl PreciseTime {
}
}
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub struct WorkerId(pub u32);
diff --git a/components/dom_struct/lib.rs b/components/dom_struct/lib.rs
index 33801de8c8d..a955f00ce87 100644
--- a/components/dom_struct/lib.rs
+++ b/components/dom_struct/lib.rs
@@ -15,7 +15,7 @@ pub fn dom_struct(args: TokenStream, input: TokenStream) -> TokenStream {
panic!("#[dom_struct] takes no arguments");
}
let attributes = quote! {
- #[derive(DenyPublicFields, DomObject, HeapSizeOf, JSTraceable)]
+ #[derive(DenyPublicFields, DomObject, JSTraceable, MallocSizeOf)]
#[must_root]
#[repr(C)]
};
diff --git a/components/geometry/Cargo.toml b/components/geometry/Cargo.toml
index 68da8f383f1..a1d0ec00a82 100644
--- a/components/geometry/Cargo.toml
+++ b/components/geometry/Cargo.toml
@@ -12,4 +12,5 @@ path = "lib.rs"
[dependencies]
app_units = "0.5"
euclid = "0.15"
-heapsize = "0.4"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
diff --git a/components/geometry/lib.rs b/components/geometry/lib.rs
index c71b687e814..61ded7c67d3 100644
--- a/components/geometry/lib.rs
+++ b/components/geometry/lib.rs
@@ -4,7 +4,8 @@
extern crate app_units;
extern crate euclid;
-#[macro_use] extern crate heapsize;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
use app_units::{Au, MAX_AU, MIN_AU};
use euclid::{Point2D, Rect, Size2D};
@@ -24,11 +25,9 @@ use euclid::{Point2D, Rect, Size2D};
///
/// The ratio between DeviceIndependentPixel and DevicePixel for a given display be found by calling
/// `servo::windowing::WindowMethods::hidpi_factor`.
-#[derive(Clone, Copy, Debug)]
+#[derive(Clone, Copy, Debug, MallocSizeOf)]
pub enum DeviceIndependentPixel {}
-known_heap_size!(0, DeviceIndependentPixel);
-
// An Au is an "App Unit" and represents 1/60th of a CSS pixel. It was
// originally proposed in 2002 as a standard unit of measure in Gecko.
// See https://bugzilla.mozilla.org/show_bug.cgi?id=177805 for more info.
diff --git a/components/gfx/Cargo.toml b/components/gfx/Cargo.toml
index 405d9db5646..606d17c2908 100644
--- a/components/gfx/Cargo.toml
+++ b/components/gfx/Cargo.toml
@@ -21,12 +21,12 @@ fnv = "1.0"
fontsan = {git = "https://github.com/servo/fontsan"}
gfx_traits = {path = "../gfx_traits"}
harfbuzz-sys = "0.1"
-heapsize = "0.4"
-heapsize_derive = "0.1"
ipc-channel = "0.9"
lazy_static = "0.2"
libc = "0.2"
log = "0.3.5"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
msg = {path = "../msg"}
net_traits = {path = "../net_traits"}
ordered-float = "0.4"
diff --git a/components/gfx/display_list/mod.rs b/components/gfx/display_list/mod.rs
index ceb7016f9f2..9915328ad5d 100644
--- a/components/gfx/display_list/mod.rs
+++ b/components/gfx/display_list/mod.rs
@@ -43,7 +43,7 @@ pub use style::dom::OpaqueNode;
/// items that involve a blur. This ensures that the display item boundaries include all the ink.
pub static BLUR_INFLATION_FACTOR: i32 = 3;
-#[derive(Deserialize, HeapSizeOf, Serialize)]
+#[derive(Deserialize, MallocSizeOf, Serialize)]
pub struct DisplayList {
pub list: Vec<DisplayItem>,
}
@@ -314,7 +314,7 @@ impl<'a> Iterator for DisplayListTraversal<'a> {
/// Display list sections that make up a stacking context. Each section here refers
/// to the steps in CSS 2.1 Appendix E.
///
-#[derive(Clone, Copy, Debug, Deserialize, Eq, HeapSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, MallocSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
pub enum DisplayListSection {
BackgroundAndBorders,
BlockBackgroundsAndBorders,
@@ -322,14 +322,14 @@ pub enum DisplayListSection {
Outlines,
}
-#[derive(Clone, Copy, Debug, Deserialize, Eq, HeapSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, MallocSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
pub enum StackingContextType {
Real,
PseudoPositioned,
PseudoFloat,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
/// Represents one CSS stacking context, which may or may not have a hardware layer.
pub struct StackingContext {
/// The ID of this StackingContext for uniquely identifying it.
@@ -484,7 +484,7 @@ impl fmt::Debug for StackingContext {
}
}
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum ClipScrollNodeType {
ScrollFrame(ScrollSensitivity),
StickyFrame(StickyFrameInfo),
@@ -492,7 +492,7 @@ pub enum ClipScrollNodeType {
}
/// Defines a clip scroll node.
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct ClipScrollNode {
/// The WebRender clip id of this scroll root based on the source of this clip
/// and information about the fragment.
@@ -522,7 +522,7 @@ impl ClipScrollNode {
/// One drawing command in the list.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub enum DisplayItem {
SolidColor(Box<SolidColorDisplayItem>),
Text(Box<TextDisplayItem>),
@@ -541,7 +541,7 @@ pub enum DisplayItem {
}
/// Information common to all display items.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct BaseDisplayItem {
/// The boundaries of the display item, in layer coordinates.
pub bounds: Rect<Au>,
@@ -600,7 +600,7 @@ impl BaseDisplayItem {
/// A clipping region for a display item. Currently, this can describe rectangles, rounded
/// rectangles (for `border-radius`), or arbitrary intersections of the two. Arbitrary transforms
/// are not supported because those are handled by the higher-level `StackingContext` abstraction.
-#[derive(Clone, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub struct ClippingRegion {
/// The main rectangular region. This does not include any corners.
pub main: Rect<Au>,
@@ -614,7 +614,7 @@ pub struct ClippingRegion {
/// A complex clipping region. These don't as easily admit arbitrary intersection operations, so
/// they're stored in a list over to the side. Currently a complex clipping region is just a
/// rounded rectangle, but the CSS WGs will probably make us throw more stuff in here eventually.
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub struct ComplexClippingRegion {
/// The boundaries of the rectangle.
pub rect: Rect<Au>,
@@ -784,7 +784,7 @@ impl ComplexClippingRegion {
/// Metadata attached to each display item. This is useful for performing auxiliary threads with
/// the display list involving hit testing: finding the originating DOM node and determining the
/// cursor to use when the element is hovered over.
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub struct DisplayItemMetadata {
/// The DOM node from which this display item originated.
pub node: OpaqueNode,
@@ -794,7 +794,7 @@ pub struct DisplayItemMetadata {
}
/// Paints a solid color.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct SolidColorDisplayItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -804,13 +804,13 @@ pub struct SolidColorDisplayItem {
}
/// Paints text.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct TextDisplayItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
/// The text run.
- #[ignore_heap_size_of = "Because it is non-owning"]
+ #[ignore_malloc_size_of = "Because it is non-owning"]
pub text_run: Arc<TextRun>,
/// The range of text within the text run.
@@ -826,7 +826,7 @@ pub struct TextDisplayItem {
pub orientation: TextOrientation,
}
-#[derive(Clone, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub enum TextOrientation {
Upright,
SidewaysLeft,
@@ -834,13 +834,13 @@ pub enum TextOrientation {
}
/// Paints an image.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct ImageDisplayItem {
pub base: BaseDisplayItem,
pub webrender_image: WebRenderImageInfo,
- #[ignore_heap_size_of = "Because it is non-owning"]
+ #[ignore_malloc_size_of = "Because it is non-owning"]
pub image_data: Option<Arc<IpcSharedMemory>>,
/// The dimensions to which the image display item should be stretched. If this is smaller than
@@ -857,14 +857,14 @@ pub struct ImageDisplayItem {
pub image_rendering: image_rendering::T,
}
/// Paints an iframe.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct IframeDisplayItem {
pub base: BaseDisplayItem,
pub iframe: PipelineId,
}
/// Paints a gradient.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct Gradient {
/// The start point of the gradient (computed during display list construction).
pub start_point: Point2D<Au>,
@@ -879,7 +879,7 @@ pub struct Gradient {
pub repeating: bool,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct GradientDisplayItem {
/// Fields common to all display item.
pub base: BaseDisplayItem,
@@ -889,7 +889,7 @@ pub struct GradientDisplayItem {
}
/// Paints a radial gradient.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct RadialGradient {
/// The center point of the gradient.
pub center: Point2D<Au>,
@@ -904,7 +904,7 @@ pub struct RadialGradient {
pub repeating: bool,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct RadialGradientDisplayItem {
/// Fields common to all display item.
pub base: BaseDisplayItem,
@@ -914,7 +914,7 @@ pub struct RadialGradientDisplayItem {
}
/// A normal border, supporting CSS border styles.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct NormalBorder {
/// Border colors.
pub color: SideOffsets2D<ColorF>,
@@ -929,7 +929,7 @@ pub struct NormalBorder {
}
/// A border that is made of image segments.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct ImageBorder {
/// The image this border uses, border-image-source.
pub image: WebRenderImageInfo,
@@ -951,7 +951,7 @@ pub struct ImageBorder {
}
/// A border that is made of linear gradient
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct GradientBorder {
/// The gradient info that this border uses, border-image-source.
pub gradient: Gradient,
@@ -961,7 +961,7 @@ pub struct GradientBorder {
}
/// A border that is made of radial gradient
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct RadialGradientBorder {
/// The gradient info that this border uses, border-image-source.
pub gradient: RadialGradient,
@@ -971,7 +971,7 @@ pub struct RadialGradientBorder {
}
/// Specifies the type of border
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub enum BorderDetails {
Normal(NormalBorder),
Image(ImageBorder),
@@ -980,7 +980,7 @@ pub enum BorderDetails {
}
/// Paints a border.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct BorderDisplayItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -995,7 +995,7 @@ pub struct BorderDisplayItem {
/// Information about the border radii.
///
/// TODO(pcwalton): Elliptical radii.
-#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub struct BorderRadii<T> {
pub top_left: Size2D<T>,
pub top_right: Size2D<T>,
@@ -1057,7 +1057,7 @@ impl<T> BorderRadii<T> where T: PartialEq + Zero + Clone {
}
/// Paints a line segment.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct LineDisplayItem {
pub base: BaseDisplayItem,
@@ -1065,12 +1065,12 @@ pub struct LineDisplayItem {
pub color: ColorF,
/// The line segment style.
- #[ignore_heap_size_of = "enum type in webrender"]
+ #[ignore_malloc_size_of = "enum type in webrender"]
pub style: webrender_api::LineStyle,
}
/// Paints a box shadow per CSS-BACKGROUNDS.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct BoxShadowDisplayItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -1100,7 +1100,7 @@ pub struct BoxShadowDisplayItem {
}
/// Defines a text shadow that affects all items until the paired PopTextShadow.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct PushTextShadowDisplayItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -1116,14 +1116,14 @@ pub struct PushTextShadowDisplayItem {
}
/// Defines a text shadow that affects all items until the next PopTextShadow.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct PopAllTextShadowsDisplayItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
}
/// Defines a stacking context.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct PushStackingContextItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -1132,7 +1132,7 @@ pub struct PushStackingContextItem {
}
/// Defines a stacking context.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct PopStackingContextItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -1141,7 +1141,7 @@ pub struct PopStackingContextItem {
}
/// Starts a group of items inside a particular scroll root.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct DefineClipScrollNodeItem {
/// Fields common to all display items.
pub base: BaseDisplayItem,
@@ -1151,7 +1151,7 @@ pub struct DefineClipScrollNodeItem {
}
/// How a box shadow should be clipped.
-#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum BoxShadowClipMode {
/// No special clipping should occur. This is used for (shadowed) text decorations.
None,
@@ -1258,7 +1258,7 @@ impl fmt::Debug for DisplayItem {
}
}
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub struct WebRenderImageInfo {
pub width: u32,
pub height: u32,
diff --git a/components/gfx/font_context.rs b/components/gfx/font_context.rs
index b5d2298d1f7..13c3d777579 100644
--- a/components/gfx/font_context.rs
+++ b/components/gfx/font_context.rs
@@ -7,7 +7,7 @@ use fnv::FnvHasher;
use font::{Font, FontGroup, FontHandleMethods};
use font_cache_thread::FontCacheThread;
use font_template::FontTemplateDescriptor;
-use heapsize::HeapSizeOf;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use platform::font::FontHandle;
use platform::font_context::FontContextHandle;
use platform::font_template::FontTemplateData;
@@ -232,10 +232,10 @@ impl FontContext {
}
}
-impl HeapSizeOf for FontContext {
- fn heap_size_of_children(&self) -> usize {
+impl MallocSizeOf for FontContext {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
// FIXME(njn): Measure other fields eventually.
- self.platform_handle.heap_size_of_children()
+ self.platform_handle.size_of(ops)
}
}
diff --git a/components/gfx/lib.rs b/components/gfx/lib.rs
index beaeba75f21..aa0c635bf53 100644
--- a/components/gfx/lib.rs
+++ b/components/gfx/lib.rs
@@ -35,14 +35,15 @@ extern crate gfx_traits;
// shapers. For now, however, this is a hard dependency.
extern crate harfbuzz_sys as harfbuzz;
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
extern crate ipc_channel;
#[macro_use]
extern crate lazy_static;
extern crate libc;
#[macro_use]
extern crate log;
+#[cfg_attr(target_os = "windows", macro_use)]
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate msg;
extern crate net_traits;
extern crate ordered_float;
diff --git a/components/gfx/platform/freetype/font_context.rs b/components/gfx/platform/freetype/font_context.rs
index 7f4c00f2afb..c7deea5adf8 100644
--- a/components/gfx/platform/freetype/font_context.rs
+++ b/components/gfx/platform/freetype/font_context.rs
@@ -8,7 +8,7 @@ use freetype::freetype::FT_Library;
use freetype::freetype::FT_Memory;
use freetype::freetype::FT_MemoryRec_;
use freetype::freetype::FT_New_Library;
-use heapsize::{HeapSizeOf, heap_size_of};
+use malloc_size_of::{malloc_size_of, MallocSizeOf, MallocSizeOfOps};
use std::mem;
use std::os::raw::{c_long, c_void};
use std::ptr;
@@ -31,7 +31,7 @@ extern fn ft_alloc(mem: FT_Memory, req_size: c_long) -> *mut c_void {
mem::forget(vec);
unsafe {
- let actual_size = heap_size_of(ptr as *const _);
+ let actual_size = malloc_size_of(ptr as *const _);
let user = (*mem).user as *mut User;
(*user).size += actual_size;
}
@@ -41,7 +41,7 @@ extern fn ft_alloc(mem: FT_Memory, req_size: c_long) -> *mut c_void {
extern fn ft_free(mem: FT_Memory, ptr: *mut c_void) {
unsafe {
- let actual_size = heap_size_of(ptr as *const _);
+ let actual_size = malloc_size_of(ptr as *const _);
let user = (*mem).user as *mut User;
(*user).size -= actual_size;
@@ -55,7 +55,7 @@ extern fn ft_realloc(mem: FT_Memory, _cur_size: c_long, new_req_size: c_long,
let old_actual_size;
let mut vec;
unsafe {
- old_actual_size = heap_size_of(old_ptr as *const _);
+ old_actual_size = malloc_size_of(old_ptr as *const _);
vec = Vec::<u8>::from_raw_parts(old_ptr as *mut u8, old_actual_size, old_actual_size);
};
@@ -71,7 +71,7 @@ extern fn ft_realloc(mem: FT_Memory, _cur_size: c_long, new_req_size: c_long,
mem::forget(vec);
unsafe {
- let new_actual_size = heap_size_of(new_ptr as *const _);
+ let new_actual_size = malloc_size_of(new_ptr as *const _);
let user = (*mem).user as *mut User;
(*user).size += new_actual_size;
(*user).size -= old_actual_size;
@@ -104,13 +104,13 @@ impl Drop for FreeTypeLibraryHandle {
}
}
-impl HeapSizeOf for FreeTypeLibraryHandle {
- fn heap_size_of_children(&self) -> usize {
+impl MallocSizeOf for FreeTypeLibraryHandle {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
unsafe {
(*self.user).size +
- heap_size_of(self.ctx as *const _) +
- heap_size_of(self.mem as *const _) +
- heap_size_of(self.user as *const _)
+ ops.malloc_size_of(self.ctx as *const _) +
+ ops.malloc_size_of(self.mem as *const _) +
+ ops.malloc_size_of(self.user as *const _)
}
}
}
@@ -123,9 +123,9 @@ pub struct FontContextHandle {
pub ctx: Rc<FreeTypeLibraryHandle>,
}
-impl HeapSizeOf for FontContextHandle {
- fn heap_size_of_children(&self) -> usize {
- self.ctx.heap_size_of_children()
+impl MallocSizeOf for FontContextHandle {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.ctx.size_of(ops)
}
}
diff --git a/components/gfx/platform/macos/font_context.rs b/components/gfx/platform/macos/font_context.rs
index e728b62aebd..358d4e5dfd4 100644
--- a/components/gfx/platform/macos/font_context.rs
+++ b/components/gfx/platform/macos/font_context.rs
@@ -2,9 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use heapsize::HeapSizeOf;
-
-#[derive(Clone, Debug)]
+#[derive(Clone, Debug, MallocSizeOf)]
pub struct FontContextHandle {
ctx: ()
}
@@ -15,9 +13,3 @@ impl FontContextHandle {
FontContextHandle { ctx: () }
}
}
-
-impl HeapSizeOf for FontContextHandle {
- fn heap_size_of_children(&self) -> usize {
- 0
- }
-}
diff --git a/components/gfx/platform/windows/font_context.rs b/components/gfx/platform/windows/font_context.rs
index 26670bb7dd9..7d304ed138d 100644
--- a/components/gfx/platform/windows/font_context.rs
+++ b/components/gfx/platform/windows/font_context.rs
@@ -2,8 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use heapsize::HeapSizeOf;
-
#[derive(Clone, Debug)]
pub struct FontContextHandle;
@@ -14,8 +12,4 @@ impl FontContextHandle {
}
}
-impl HeapSizeOf for FontContextHandle {
- fn heap_size_of_children(&self) -> usize {
- 0
- }
-}
+malloc_size_of_is_0!(FontContextHandle);
diff --git a/components/gfx_traits/Cargo.toml b/components/gfx_traits/Cargo.toml
index f9de4fc3088..8d558d19ba0 100644
--- a/components/gfx_traits/Cargo.toml
+++ b/components/gfx_traits/Cargo.toml
@@ -10,7 +10,7 @@ name = "gfx_traits"
path = "lib.rs"
[dependencies]
-heapsize = "0.4"
-heapsize_derive = "0.1"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
range = {path = "../range"}
serde = "1.0"
diff --git a/components/gfx_traits/lib.rs b/components/gfx_traits/lib.rs
index e6f6c124ec2..9688d90bbef 100644
--- a/components/gfx_traits/lib.rs
+++ b/components/gfx_traits/lib.rs
@@ -7,8 +7,8 @@
#![deny(unsafe_code)]
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
#[macro_use] extern crate range;
#[macro_use] extern crate serde;
@@ -28,7 +28,7 @@ impl Epoch {
}
/// A unique ID for every stacking context.
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub struct StackingContextId(
/// The identifier for this StackingContext, derived from the Flow's memory address
/// and fragment type. As a space optimization, these are combined into a single word.
@@ -53,7 +53,7 @@ int_range_index! {
#[derive(Deserialize, Serialize)]
#[doc = "An index that refers to a byte offset in a text run. This could \
point to the middle of a glyph."]
- #[derive(HeapSizeOf)]
+ #[derive(MallocSizeOf)]
struct ByteIndex(isize)
}
@@ -62,7 +62,7 @@ int_range_index! {
/// This can only ever grow to maximum 4 entries. That's because we cram the value of this enum
/// into the lower 2 bits of the `StackingContextId`, which otherwise contains a 32-bit-aligned
/// heap address.
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub enum FragmentType {
/// A StackingContext for the fragment body itself.
FragmentBody,
diff --git a/components/hashglobe/Cargo.toml b/components/hashglobe/Cargo.toml
index cffb48919cf..6deb04a7531 100644
--- a/components/hashglobe/Cargo.toml
+++ b/components/hashglobe/Cargo.toml
@@ -11,7 +11,6 @@ readme = "README.md"
[dependencies]
libc = "0.2"
-heapsize = "0.4"
[dev-dependencies]
rand = "0.3"
diff --git a/components/hashglobe/src/fake.rs b/components/hashglobe/src/fake.rs
index f83032d5a83..1d29296f000 100644
--- a/components/hashglobe/src/fake.rs
+++ b/components/hashglobe/src/fake.rs
@@ -14,7 +14,6 @@
//! These methods are a lie. They are not actually fallible. This is just to make
//! it smooth to switch between hashmap impls in a codebase.
-use heapsize::HeapSizeOf;
use std::collections::HashMap as StdMap;
use std::collections::HashSet as StdSet;
use std::fmt;
@@ -161,14 +160,6 @@ impl<T, S> HashSet<T, S>
// Pass through trait impls
// We can't derive these since the bounds are not obvious to the derive macro
-
-impl<K: HeapSizeOf + Hash + Eq, V: HeapSizeOf, S: BuildHasher>
- HeapSizeOf for HashMap<K, V, S> {
- fn heap_size_of_children(&self) -> usize {
- self.0.heap_size_of_children()
- }
-}
-
impl<K: Hash + Eq, V, S: BuildHasher + Default> Default for HashMap<K, V, S> {
fn default() -> Self {
HashMap(Default::default())
@@ -225,13 +216,6 @@ impl<'a, K, V, S> IntoIterator for &'a mut HashMap<K, V, S>
}
}
-
-impl<T: HeapSizeOf + Eq + Hash, S: BuildHasher> HeapSizeOf for HashSet<T, S> {
- fn heap_size_of_children(&self) -> usize {
- self.0.heap_size_of_children()
- }
-}
-
impl<T: Eq + Hash, S: BuildHasher + Default> Default for HashSet<T, S> {
fn default() -> Self {
HashSet(Default::default())
diff --git a/components/hashglobe/src/lib.rs b/components/hashglobe/src/lib.rs
index 480f3a540ea..254cb2b943d 100644
--- a/components/hashglobe/src/lib.rs
+++ b/components/hashglobe/src/lib.rs
@@ -8,8 +8,6 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-extern crate heapsize;
-
pub mod alloc;
pub mod diagnostic;
pub mod hash_map;
diff --git a/components/layout/Cargo.toml b/components/layout/Cargo.toml
index 2becf6a5675..70903da2dbf 100644
--- a/components/layout/Cargo.toml
+++ b/components/layout/Cargo.toml
@@ -18,11 +18,11 @@ euclid = "0.15"
fnv = "1.0"
gfx = {path = "../gfx"}
gfx_traits = {path = "../gfx_traits"}
-heapsize = "0.4"
html5ever = "0.20.0"
ipc-channel = "0.9"
libc = "0.2"
log = "0.3.5"
+malloc_size_of = { path = "../malloc_size_of" }
msg = {path = "../msg"}
net_traits = {path = "../net_traits"}
ordered-float = "0.4"
diff --git a/components/layout/context.rs b/components/layout/context.rs
index 76d32eebca9..bf148f4c1a1 100644
--- a/components/layout/context.rs
+++ b/components/layout/context.rs
@@ -8,7 +8,7 @@ use fnv::FnvHasher;
use gfx::display_list::{WebRenderImageInfo, OpaqueNode};
use gfx::font_cache_thread::FontCacheThread;
use gfx::font_context::FontContext;
-use heapsize::HeapSizeOf;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use msg::constellation_msg::PipelineId;
use net_traits::image_cache::{CanRequestImages, ImageCache, ImageState};
use net_traits::image_cache::{ImageOrMetadataAvailable, UsePlaceholder};
@@ -42,10 +42,10 @@ pub fn with_thread_local_font_context<F, R>(layout_context: &LayoutContext, f: F
})
}
-pub fn heap_size_of_persistent_local_context() -> usize {
+pub fn malloc_size_of_persistent_local_context(ops: &mut MallocSizeOfOps) -> usize {
FONT_CONTEXT_KEY.with(|r| {
if let Some(ref context) = *r.borrow() {
- context.heap_size_of_children()
+ context.size_of(ops)
} else {
0
}
diff --git a/components/layout/lib.rs b/components/layout/lib.rs
index f9c3cbeda2b..f5e850c6da1 100644
--- a/components/layout/lib.rs
+++ b/components/layout/lib.rs
@@ -13,12 +13,12 @@ extern crate euclid;
extern crate fnv;
extern crate gfx;
extern crate gfx_traits;
-extern crate heapsize;
#[macro_use] extern crate html5ever;
extern crate ipc_channel;
extern crate libc;
#[macro_use]
extern crate log;
+extern crate malloc_size_of;
extern crate msg;
extern crate net_traits;
extern crate ordered_float;
diff --git a/components/layout_thread/Cargo.toml b/components/layout_thread/Cargo.toml
index 6108c9c2447..35336e133ca 100644
--- a/components/layout_thread/Cargo.toml
+++ b/components/layout_thread/Cargo.toml
@@ -19,7 +19,6 @@ euclid = "0.15"
fnv = "1.0"
gfx = {path = "../gfx"}
gfx_traits = {path = "../gfx_traits"}
-heapsize = "0.4"
html5ever = "0.20.0"
ipc-channel = "0.9"
layout = {path = "../layout"}
@@ -27,6 +26,7 @@ layout_traits = {path = "../layout_traits"}
lazy_static = "0.2"
libc = "0.2"
log = "0.3.5"
+malloc_size_of = { path = "../malloc_size_of" }
metrics = {path = "../metrics"}
msg = {path = "../msg"}
net_traits = {path = "../net_traits"}
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs
index ab3e620c16e..0010d66673c 100644
--- a/components/layout_thread/lib.rs
+++ b/components/layout_thread/lib.rs
@@ -13,7 +13,6 @@ extern crate euclid;
extern crate fnv;
extern crate gfx;
extern crate gfx_traits;
-extern crate heapsize;
#[macro_use]
extern crate html5ever;
extern crate ipc_channel;
@@ -25,6 +24,7 @@ extern crate lazy_static;
extern crate libc;
#[macro_use]
extern crate log;
+extern crate malloc_size_of;
extern crate metrics;
extern crate msg;
extern crate net_traits;
@@ -60,7 +60,6 @@ use gfx::font;
use gfx::font_cache_thread::FontCacheThread;
use gfx::font_context;
use gfx_traits::{Epoch, node_id_from_clip_id};
-use heapsize::HeapSizeOf;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use layout::animation;
@@ -68,7 +67,7 @@ use layout::construct::ConstructionResult;
use layout::context::LayoutContext;
use layout::context::RegisteredPainter;
use layout::context::RegisteredPainters;
-use layout::context::heap_size_of_persistent_local_context;
+use layout::context::malloc_size_of_persistent_local_context;
use layout::display_list_builder::ToGfxColor;
use layout::flow::{self, Flow, ImmutableFlowUtils, MutableOwnedFlowUtils};
use layout::flow_ref::FlowRef;
@@ -85,6 +84,7 @@ use layout::webrender_helpers::WebRenderDisplayListConverter;
use layout::wrapper::LayoutNodeLayoutData;
use layout_traits::LayoutThreadFactory;
use libc::c_void;
+use malloc_size_of::{malloc_size_of, MallocSizeOf, MallocSizeOfOps};
use metrics::{PaintTimeMetrics, ProfilerMetadataFactory};
use msg::constellation_msg::PipelineId;
use msg::constellation_msg::TopLevelBrowsingContextId;
@@ -773,6 +773,9 @@ impl LayoutThread {
reports_chan: ReportsChan,
possibly_locked_rw_data: &mut RwData<'a, 'b>) {
let mut reports = vec![];
+ // Servo uses vanilla jemalloc, which doesn't have a
+ // malloc_enclosing_size_of function.
+ let mut ops = MallocSizeOfOps::new(malloc_size_of, None, None);
// FIXME(njn): Just measuring the display tree for now.
let rw_data = possibly_locked_rw_data.lock();
@@ -781,20 +784,20 @@ impl LayoutThread {
reports.push(Report {
path: path![formatted_url, "layout-thread", "display-list"],
kind: ReportKind::ExplicitJemallocHeapSize,
- size: display_list.map_or(0, |sc| sc.heap_size_of_children()),
+ size: display_list.map_or(0, |sc| sc.size_of(&mut ops)),
});
reports.push(Report {
path: path![formatted_url, "layout-thread", "stylist"],
kind: ReportKind::ExplicitJemallocHeapSize,
- size: self.stylist.heap_size_of_children(),
+ size: self.stylist.size_of(&mut ops),
});
// The LayoutThread has data in Persistent TLS...
reports.push(Report {
path: path![formatted_url, "layout-thread", "local-context"],
kind: ReportKind::ExplicitJemallocHeapSize,
- size: heap_size_of_persistent_local_context(),
+ size: malloc_size_of_persistent_local_context(&mut ops),
});
reports_chan.send(reports);
diff --git a/components/malloc_size_of/Cargo.toml b/components/malloc_size_of/Cargo.toml
index b3c2faa0f05..afc92cf53a9 100644
--- a/components/malloc_size_of/Cargo.toml
+++ b/components/malloc_size_of/Cargo.toml
@@ -8,11 +8,22 @@ publish = false
[lib]
path = "lib.rs"
+[target.'cfg(windows)'.dependencies]
+kernel32-sys = "0.2.1"
+
+[features]
+servo = ["js", "string_cache", "url", "webrender_api", "xml5ever"]
+
[dependencies]
app_units = "0.5.5"
cssparser = "0.22.0"
euclid = "0.15"
hashglobe = { path = "../hashglobe" }
+js = { git = "https://github.com/servo/rust-mozjs", features = ["promises"], optional = true }
servo_arc = { path = "../servo_arc" }
smallbitvec = "1.0.3"
smallvec = "0.4"
+string_cache = { version = "0.6", optional = true }
+url = { version = "1.2", optional = true }
+webrender_api = { git = "https://github.com/servo/webrender", features = ["ipc"], optional = true }
+xml5ever = { version = "0.10", optional = true }
diff --git a/components/malloc_size_of/lib.rs b/components/malloc_size_of/lib.rs
index b2aadc872a9..48350e6f840 100644
--- a/components/malloc_size_of/lib.rs
+++ b/components/malloc_size_of/lib.rs
@@ -10,28 +10,15 @@
//! A crate for measuring the heap usage of data structures in a way that
//! integrates with Firefox's memory reporting, particularly the use of
-//! mozjemalloc and DMD.
-//!
-//! This crate has a lot of overlap with the existing `heapsize` crate, and may
-//! one day be merged into it. But for now, `heapsize` has the following
-//! major shortcomings.
-//! - It basically assumes that the `HeapSizeOf` trait can be used for every
-//! type, which is not true. Sometimes more than a single size measurement
-//! needs to be returned for a type, and sometimes additional synchronization
-//! arguments (such as lock guards) need to be passed in.
-//! - It has no proper way of measuring some common types, such as `HashSet`
-//! and `HashMap`, that don't expose internal pointers.
-//! - It has no proper way of handling values with multiple referents, such as
-//! `Rc` and `Arc`.
-//!
-//! This crate solves those problems.
+//! mozjemalloc and DMD. In particular, it has the following features.
+//! - It isn't bound to a particular heap allocator.
//! - It provides traits for both "shallow" and "deep" measurement, which gives
-//! more flexibility in the cases where the traits can't be used.
+//! flexibility in the cases where the traits can't be used.
//! - It allows for measuring blocks even when only an interior pointer can be
//! obtained for heap allocations, e.g. `HashSet` and `HashMap`. (This relies
//! on the heap allocator having suitable support, which mozjemalloc has.)
-//! - It allows handling of types like `Rc` and `Arc` by providing special
-//! traits that are different to the ones for non-graph structures.
+//! - It allows handling of types like `Rc` and `Arc` by providing traits that
+//! are different to the ones for non-graph structures.
//!
//! Suggested uses are as follows.
//! - When possible, use the `MallocSizeOf` trait. (Deriving support is
@@ -60,11 +47,26 @@ extern crate app_units;
extern crate cssparser;
extern crate euclid;
extern crate hashglobe;
+#[cfg(feature = "servo")]
+extern crate js;
+#[cfg(target_os = "windows")]
+extern crate kernel32;
extern crate servo_arc;
extern crate smallbitvec;
extern crate smallvec;
-
+#[cfg(feature = "servo")]
+extern crate string_cache;
+#[cfg(feature = "servo")]
+extern crate url;
+#[cfg(feature = "servo")]
+extern crate webrender_api;
+#[cfg(feature = "servo")]
+extern crate xml5ever;
+
+#[cfg(target_os = "windows")]
+use kernel32::{GetProcessHeap, HeapSize, HeapValidate};
use std::hash::{BuildHasher, Hash};
+use std::mem::size_of;
use std::ops::Range;
use std::os::raw::c_void;
@@ -79,8 +81,11 @@ pub struct MallocSizeOfOps {
/// A function that returns the size of a heap allocation.
size_of_op: VoidPtrToSizeFn,
- /// Like `size_of_op`, but can take an interior pointer.
- enclosing_size_of_op: VoidPtrToSizeFn,
+ /// Like `size_of_op`, but can take an interior pointer. Optional because
+ /// not all allocators support this operation. If it's not provided, some
+ /// memory measurements will actually be computed estimates rather than
+ /// real and accurate measurements.
+ enclosing_size_of_op: Option<VoidPtrToSizeFn>,
/// Check if a pointer has been seen before, and remember it for next time.
/// Useful when measuring `Rc`s and `Arc`s. Optional, because many places
@@ -89,7 +94,8 @@ pub struct MallocSizeOfOps {
}
impl MallocSizeOfOps {
- pub fn new(size_of: VoidPtrToSizeFn, malloc_enclosing_size_of: VoidPtrToSizeFn,
+ pub fn new(size_of: VoidPtrToSizeFn,
+ malloc_enclosing_size_of: Option<VoidPtrToSizeFn>,
have_seen_ptr: Option<Box<VoidPtrToBoolFnMut>>) -> Self {
MallocSizeOfOps {
size_of_op: size_of,
@@ -121,10 +127,16 @@ impl MallocSizeOfOps {
}
}
- /// Call `enclosing_size_of_op` on `ptr`, which must not be empty.
+ /// Is an `enclosing_size_of_op` available?
+ pub fn has_malloc_enclosing_size_of(&self) -> bool {
+ self.enclosing_size_of_op.is_some()
+ }
+
+ /// Call `enclosing_size_of_op`, which must be available, on `ptr`, which
+ /// must not be empty.
pub unsafe fn malloc_enclosing_size_of<T>(&self, ptr: *const T) -> usize {
assert!(!MallocSizeOfOps::is_empty(ptr));
- (self.enclosing_size_of_op)(ptr as *const c_void)
+ (self.enclosing_size_of_op.unwrap())(ptr as *const c_void)
}
/// Call `have_seen_ptr_op` on `ptr`.
@@ -134,6 +146,33 @@ impl MallocSizeOfOps {
}
}
+/// Get the size of a heap block.
+#[cfg(not(target_os = "windows"))]
+pub unsafe extern "C" fn malloc_size_of(ptr: *const c_void) -> usize {
+ // The C prototype is `je_malloc_usable_size(JEMALLOC_USABLE_SIZE_CONST void *ptr)`. On some
+ // platforms `JEMALLOC_USABLE_SIZE_CONST` is `const` and on some it is empty. But in practice
+ // this function doesn't modify the contents of the block that `ptr` points to, so we use
+ // `*const c_void` here.
+ extern "C" {
+ #[cfg_attr(any(prefixed_jemalloc, target_os = "macos", target_os = "ios", target_os = "android"),
+ link_name = "je_malloc_usable_size")]
+ fn malloc_usable_size(ptr: *const c_void) -> usize;
+ }
+ malloc_usable_size(ptr)
+}
+
+/// Get the size of a heap block.
+#[cfg(target_os = "windows")]
+pub unsafe extern "C" fn malloc_size_of(mut ptr: *const c_void) -> usize {
+ let heap = GetProcessHeap();
+
+ if HeapValidate(heap, 0, ptr) == 0 {
+ ptr = *(ptr as *const *const c_void).offset(-1);
+ }
+
+ HeapSize(heap, 0, ptr) as usize
+}
+
/// Trait for measuring the "deep" heap usage of a data structure. This is the
/// most commonly-used of the traits.
pub trait MallocSizeOf {
@@ -188,6 +227,13 @@ impl MallocSizeOf for String {
}
}
+impl<'a, T: ?Sized> MallocSizeOf for &'a T {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ // Zero makes sense for a non-owning reference.
+ 0
+ }
+}
+
impl<T: ?Sized> MallocShallowSizeOf for Box<T> {
fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
unsafe { ops.malloc_size_of(&**self) }
@@ -200,12 +246,36 @@ impl<T: MallocSizeOf + ?Sized> MallocSizeOf for Box<T> {
}
}
-impl<A: MallocSizeOf, B: MallocSizeOf> MallocSizeOf for (A, B) {
+impl MallocSizeOf for () {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ 0
+ }
+}
+
+impl<T1, T2> MallocSizeOf for (T1, T2)
+ where T1: MallocSizeOf, T2: MallocSizeOf
+{
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
self.0.size_of(ops) + self.1.size_of(ops)
}
}
+impl<T1, T2, T3> MallocSizeOf for (T1, T2, T3)
+ where T1: MallocSizeOf, T2: MallocSizeOf, T3: MallocSizeOf
+{
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.0.size_of(ops) + self.1.size_of(ops) + self.2.size_of(ops)
+ }
+}
+
+impl<T1, T2, T3, T4> MallocSizeOf for (T1, T2, T3, T4)
+ where T1: MallocSizeOf, T2: MallocSizeOf, T3: MallocSizeOf, T4: MallocSizeOf
+{
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.0.size_of(ops) + self.1.size_of(ops) + self.2.size_of(ops) + self.3.size_of(ops)
+ }
+}
+
impl<T: MallocSizeOf> MallocSizeOf for Option<T> {
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
if let Some(val) = self.as_ref() {
@@ -216,6 +286,38 @@ impl<T: MallocSizeOf> MallocSizeOf for Option<T> {
}
}
+impl<T: MallocSizeOf, E: MallocSizeOf> MallocSizeOf for Result<T, E> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ match *self {
+ Ok(ref x) => x.size_of(ops),
+ Err(ref e) => e.size_of(ops),
+ }
+ }
+}
+
+impl<T: MallocSizeOf + Copy> MallocSizeOf for std::cell::Cell<T> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.get().size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf> MallocSizeOf for std::cell::RefCell<T> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.borrow().size_of(ops)
+ }
+}
+
+impl<'a, B: ?Sized + ToOwned> MallocSizeOf for std::borrow::Cow<'a, B>
+ where B::Owned: MallocSizeOf
+{
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ match *self {
+ std::borrow::Cow::Borrowed(_) => 0,
+ std::borrow::Cow::Owned(ref b) => b.size_of(ops),
+ }
+ }
+}
+
impl<T: MallocSizeOf> MallocSizeOf for [T] {
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
let mut n = 0;
@@ -242,6 +344,33 @@ impl<T: MallocSizeOf> MallocSizeOf for Vec<T> {
}
}
+impl<T> MallocShallowSizeOf for std::collections::VecDeque<T> {
+ fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ if ops.has_malloc_enclosing_size_of() {
+ if let Some(front) = self.front() {
+ // The front element is an interior pointer.
+ unsafe { ops.malloc_enclosing_size_of(&*front) }
+ } else {
+ // This assumes that no memory is allocated when the VecDeque is empty.
+ 0
+ }
+ } else {
+ // An estimate.
+ self.capacity() * size_of::<T>()
+ }
+ }
+}
+
+impl<T: MallocSizeOf> MallocSizeOf for std::collections::VecDeque<T> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ let mut n = self.shallow_size_of(ops);
+ for elem in self.iter() {
+ n += elem.size_of(ops);
+ }
+ n
+ }
+}
+
impl<A: smallvec::Array> MallocShallowSizeOf for smallvec::SmallVec<A> {
fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
if self.spilled() {
@@ -270,11 +399,16 @@ impl<T, S> MallocShallowSizeOf for std::collections::HashSet<T, S>
S: BuildHasher
{
fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
- // The first value from the iterator gives us an interior pointer.
- // `ops.malloc_enclosing_size_of()` then gives us the storage size.
- // This assumes that the `HashSet`'s contents (values and hashes) are
- // all stored in a single contiguous heap allocation.
- self.iter().next().map_or(0, |t| unsafe { ops.malloc_enclosing_size_of(t) })
+ if ops.has_malloc_enclosing_size_of() {
+ // The first value from the iterator gives us an interior pointer.
+ // `ops.malloc_enclosing_size_of()` then gives us the storage size.
+ // This assumes that the `HashSet`'s contents (values and hashes)
+ // are all stored in a single contiguous heap allocation.
+ self.iter().next().map_or(0, |t| unsafe { ops.malloc_enclosing_size_of(t) })
+ } else {
+ // An estimate.
+ self.capacity() * (size_of::<T>() + size_of::<usize>())
+ }
}
}
@@ -297,7 +431,11 @@ impl<T, S> MallocShallowSizeOf for hashglobe::hash_set::HashSet<T, S>
{
fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
// See the implementation for std::collections::HashSet for details.
- self.iter().next().map_or(0, |t| unsafe { ops.malloc_enclosing_size_of(t) })
+ if ops.has_malloc_enclosing_size_of() {
+ self.iter().next().map_or(0, |t| unsafe { ops.malloc_enclosing_size_of(t) })
+ } else {
+ self.capacity() * (size_of::<T>() + size_of::<usize>())
+ }
}
}
@@ -314,13 +452,66 @@ impl<T, S> MallocSizeOf for hashglobe::hash_set::HashSet<T, S>
}
}
+impl<T, S> MallocShallowSizeOf for hashglobe::fake::HashSet<T, S>
+ where T: Eq + Hash,
+ S: BuildHasher,
+{
+ fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ use std::ops::Deref;
+ self.deref().shallow_size_of(ops)
+ }
+}
+
+impl<T, S> MallocSizeOf for hashglobe::fake::HashSet<T, S>
+ where T: Eq + Hash + MallocSizeOf,
+ S: BuildHasher,
+{
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ use std::ops::Deref;
+ self.deref().size_of(ops)
+ }
+}
+
+impl<K, V, S> MallocShallowSizeOf for std::collections::HashMap<K, V, S>
+ where K: Eq + Hash,
+ S: BuildHasher
+{
+ fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ // See the implementation for std::collections::HashSet for details.
+ if ops.has_malloc_enclosing_size_of() {
+ self.values().next().map_or(0, |v| unsafe { ops.malloc_enclosing_size_of(v) })
+ } else {
+ self.capacity() * (size_of::<V>() + size_of::<K>() + size_of::<usize>())
+ }
+ }
+}
+
+impl<K, V, S> MallocSizeOf for std::collections::HashMap<K, V, S>
+ where K: Eq + Hash + MallocSizeOf,
+ V: MallocSizeOf,
+ S: BuildHasher,
+{
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ let mut n = self.shallow_size_of(ops);
+ for (k, v) in self.iter() {
+ n += k.size_of(ops);
+ n += v.size_of(ops);
+ }
+ n
+ }
+}
+
impl<K, V, S> MallocShallowSizeOf for hashglobe::hash_map::HashMap<K, V, S>
where K: Eq + Hash,
S: BuildHasher
{
fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
// See the implementation for std::collections::HashSet for details.
- self.values().next().map_or(0, |v| unsafe { ops.malloc_enclosing_size_of(v) })
+ if ops.has_malloc_enclosing_size_of() {
+ self.values().next().map_or(0, |v| unsafe { ops.malloc_enclosing_size_of(v) })
+ } else {
+ self.capacity() * (size_of::<V>() + size_of::<K>() + size_of::<usize>())
+ }
}
}
@@ -358,6 +549,34 @@ impl<K, V, S> MallocSizeOf for hashglobe::diagnostic::DiagnosticHashMap<K, V, S>
}
}
+impl<K, V, S> MallocShallowSizeOf for hashglobe::fake::HashMap<K, V, S>
+ where K: Eq + Hash,
+ S: BuildHasher,
+{
+ fn shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ use std::ops::Deref;
+ self.deref().shallow_size_of(ops)
+ }
+}
+
+impl<K, V, S> MallocSizeOf for hashglobe::fake::HashMap<K, V, S>
+ where K: Eq + Hash + MallocSizeOf,
+ V: MallocSizeOf,
+ S: BuildHasher,
+{
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ use std::ops::Deref;
+ self.deref().size_of(ops)
+ }
+}
+
+// PhantomData is always 0.
+impl<T> MallocSizeOf for std::marker::PhantomData<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ 0
+ }
+}
+
// XXX: we don't want MallocSizeOf to be defined for Rc and Arc. If negative
// trait bounds are ever allowed, this code should be uncommented.
// (We do have a compile-fail test for this:
@@ -407,12 +626,86 @@ impl MallocSizeOf for smallbitvec::SmallBitVec {
}
}
+impl<T: MallocSizeOf, Unit> MallocSizeOf for euclid::Length<T, Unit> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.0.size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf, Src, Dst> MallocSizeOf for euclid::ScaleFactor<T, Src, Dst> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.0.size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf, U> MallocSizeOf for euclid::TypedPoint2D<T, U> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.x.size_of(ops) + self.y.size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf, U> MallocSizeOf for euclid::TypedRect<T, U> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.origin.size_of(ops) + self.size.size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf, U> MallocSizeOf for euclid::TypedSideOffsets2D<T, U> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.top.size_of(ops) + self.right.size_of(ops) +
+ self.bottom.size_of(ops) + self.left.size_of(ops)
+ }
+}
+
impl<T: MallocSizeOf, U> MallocSizeOf for euclid::TypedSize2D<T, U> {
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
self.width.size_of(ops) + self.height.size_of(ops)
}
}
+impl<T: MallocSizeOf, Src, Dst> MallocSizeOf for euclid::TypedTransform2D<T, Src, Dst> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.m11.size_of(ops) + self.m12.size_of(ops) +
+ self.m21.size_of(ops) + self.m22.size_of(ops) +
+ self.m31.size_of(ops) + self.m32.size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf, Src, Dst> MallocSizeOf for euclid::TypedTransform3D<T, Src, Dst> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.m11.size_of(ops) + self.m12.size_of(ops) +
+ self.m13.size_of(ops) + self.m14.size_of(ops) +
+ self.m21.size_of(ops) + self.m22.size_of(ops) +
+ self.m23.size_of(ops) + self.m24.size_of(ops) +
+ self.m31.size_of(ops) + self.m32.size_of(ops) +
+ self.m33.size_of(ops) + self.m34.size_of(ops) +
+ self.m41.size_of(ops) + self.m42.size_of(ops) +
+ self.m43.size_of(ops) + self.m44.size_of(ops)
+ }
+}
+
+impl<T: MallocSizeOf, U> MallocSizeOf for euclid::TypedVector2D<T, U> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.x.size_of(ops) + self.y.size_of(ops)
+ }
+}
+
+#[cfg(feature = "servo")]
+impl<Static: string_cache::StaticAtomSet> MallocSizeOf for string_cache::Atom<Static> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ 0
+ }
+}
+
+// This is measured properly by the heap measurement implemented in
+// SpiderMonkey.
+#[cfg(feature = "servo")]
+impl<T: Copy + js::rust::GCMethods> MallocSizeOf for js::jsapi::Heap<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ 0
+ }
+}
+
/// For use on types where size_of() returns 0.
#[macro_export]
macro_rules! malloc_size_of_is_0(
@@ -443,9 +736,57 @@ malloc_size_of_is_0!(u8, u16, u32, u64, usize);
malloc_size_of_is_0!(i8, i16, i32, i64, isize);
malloc_size_of_is_0!(f32, f64);
+malloc_size_of_is_0!(std::sync::atomic::AtomicBool);
+malloc_size_of_is_0!(std::sync::atomic::AtomicIsize, std::sync::atomic::AtomicUsize);
+
malloc_size_of_is_0!(Range<u8>, Range<u16>, Range<u32>, Range<u64>, Range<usize>);
malloc_size_of_is_0!(Range<i8>, Range<i16>, Range<i32>, Range<i64>, Range<isize>);
malloc_size_of_is_0!(Range<f32>, Range<f64>);
malloc_size_of_is_0!(app_units::Au);
+
malloc_size_of_is_0!(cssparser::RGBA, cssparser::TokenSerializationType);
+
+#[cfg(feature = "servo")]
+impl MallocSizeOf for url::Host {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ match *self {
+ url::Host::Domain(ref s) => s.size_of(ops),
+ _ => 0,
+ }
+ }
+}
+
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::ClipAndScrollInfo);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::ClipId);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::ColorF);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::GradientStop);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::ImageKey);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::LocalClip);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::MixBlendMode);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::RepeatMode);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::ScrollPolicy);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::ScrollSensitivity);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::StickySideConstraint);
+#[cfg(feature = "servo")]
+malloc_size_of_is_0!(webrender_api::TransformStyle);
+
+#[cfg(feature = "servo")]
+impl MallocSizeOf for xml5ever::QualName {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ self.prefix.size_of(ops) +
+ self.ns.size_of(ops) +
+ self.local.size_of(ops)
+ }
+}
diff --git a/components/msg/Cargo.toml b/components/msg/Cargo.toml
index 0f1e39e8182..d39620fdacf 100644
--- a/components/msg/Cargo.toml
+++ b/components/msg/Cargo.toml
@@ -14,8 +14,8 @@ unstable = ["nonzero/unstable"]
[dependencies]
bitflags = "0.7"
-heapsize = "0.4"
-heapsize_derive = "0.1"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
nonzero = {path = "../nonzero"}
serde = "1.0.14"
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}
diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs
index 9eb1a9cf116..10d21917c79 100644
--- a/components/msg/constellation_msg.rs
+++ b/components/msg/constellation_msg.rs
@@ -18,7 +18,7 @@ pub enum KeyState {
}
//N.B. Based on the glutin key enum
-#[derive(Clone, Copy, Debug, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub enum Key {
Space,
Apostrophe,
@@ -217,14 +217,14 @@ impl PipelineNamespace {
thread_local!(pub static PIPELINE_NAMESPACE: Cell<Option<PipelineNamespace>> = Cell::new(None));
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
pub struct PipelineNamespaceId(pub u32);
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct PipelineIndex(pub NonZero<u32>);
-known_heap_size!(0, PipelineIndex);
+malloc_size_of_is_0!(PipelineIndex);
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
pub struct PipelineId {
pub namespace_id: PipelineNamespaceId,
pub index: PipelineIndex
@@ -276,9 +276,9 @@ impl fmt::Display for PipelineId {
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct BrowsingContextIndex(pub NonZero<u32>);
-known_heap_size!(0, BrowsingContextIndex);
+malloc_size_of_is_0!(BrowsingContextIndex);
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
pub struct BrowsingContextId {
pub namespace_id: PipelineNamespaceId,
pub index: BrowsingContextIndex,
@@ -305,7 +305,7 @@ impl fmt::Display for BrowsingContextId {
thread_local!(pub static TOP_LEVEL_BROWSING_CONTEXT_ID: Cell<Option<TopLevelBrowsingContextId>> = Cell::new(None));
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, Ord, PartialEq, PartialOrd, Serialize)]
pub struct TopLevelBrowsingContextId(BrowsingContextId);
impl TopLevelBrowsingContextId {
@@ -362,7 +362,7 @@ pub const TEST_BROWSING_CONTEXT_INDEX: BrowsingContextIndex =
pub const TEST_BROWSING_CONTEXT_ID: BrowsingContextId =
BrowsingContextId { namespace_id: TEST_NAMESPACE, index: TEST_BROWSING_CONTEXT_INDEX };
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub enum FrameType {
IFrame,
MozBrowserIFrame,
diff --git a/components/msg/lib.rs b/components/msg/lib.rs
index 6181e2d3cc6..6b256d31df4 100644
--- a/components/msg/lib.rs
+++ b/components/msg/lib.rs
@@ -6,8 +6,8 @@
#[macro_use]
extern crate bitflags;
-#[macro_use] extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
+#[macro_use] extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate nonzero;
#[macro_use] extern crate serde;
extern crate webrender_api;
diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml
index 79e4eaa4778..074cbfe7de4 100644
--- a/components/net/Cargo.toml
+++ b/components/net/Cargo.toml
@@ -38,7 +38,7 @@ servo-websocket = "0.19"
threadpool = "1.0"
time = "0.1.17"
unicase = "1.4.0"
-url = {version = "1.2", features = ["heap_size"]}
+url = "1.2"
uuid = {version = "0.5", features = ["v4"]}
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}
diff --git a/components/net_traits/Cargo.toml b/components/net_traits/Cargo.toml
index ccc080e5863..c7259c1f98e 100644
--- a/components/net_traits/Cargo.toml
+++ b/components/net_traits/Cargo.toml
@@ -11,19 +11,19 @@ path = "lib.rs"
[dependencies]
cookie = "0.6"
-heapsize = "0.4"
-heapsize_derive = "0.1"
hyper = "0.10"
hyper_serde = "0.7"
image = "0.16"
ipc-channel = "0.9"
lazy_static = "0.2"
log = "0.3.5"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
msg = {path = "../msg"}
num-traits = "0.1.32"
serde = "1.0"
servo_config = {path = "../config"}
servo_url = {path = "../url"}
-url = {version = "1.2", features = ["heap_size"]}
+url = "1.2"
uuid = {version = "0.5", features = ["v4", "serde"]}
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}
diff --git a/components/net_traits/image/base.rs b/components/net_traits/image/base.rs
index 0c6e023cece..40b4d5d3c47 100644
--- a/components/net_traits/image/base.rs
+++ b/components/net_traits/image/base.rs
@@ -7,7 +7,7 @@ use piston_image::{self, DynamicImage, ImageFormat};
use std::fmt;
use webrender_api;
-#[derive(Clone, Copy, Debug, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub enum PixelFormat {
/// Luminance channel only
K8,
@@ -19,14 +19,14 @@ pub enum PixelFormat {
BGRA8,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct Image {
pub width: u32,
pub height: u32,
pub format: PixelFormat,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
pub bytes: IpcSharedMemory,
- #[ignore_heap_size_of = "Defined in webrender_api"]
+ #[ignore_malloc_size_of = "Defined in webrender_api"]
pub id: Option<webrender_api::ImageKey>,
}
@@ -37,7 +37,7 @@ impl fmt::Debug for Image {
}
}
-#[derive(Clone, Debug, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub struct ImageMetadata {
pub width: u32,
pub height: u32,
diff --git a/components/net_traits/image_cache.rs b/components/net_traits/image_cache.rs
index 6fe86462a38..85db0793148 100644
--- a/components/net_traits/image_cache.rs
+++ b/components/net_traits/image_cache.rs
@@ -23,9 +23,9 @@ pub enum CanRequestImages {
}
/// Indicating either entire image or just metadata availability
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub enum ImageOrMetadataAvailable {
- ImageAvailable(Arc<Image>, ServoUrl),
+ ImageAvailable(#[ignore_malloc_size_of = "Arc"] Arc<Image>, ServoUrl),
MetadataAvailable(ImageMetadata),
}
@@ -60,14 +60,14 @@ impl ImageResponder {
}
/// The returned image.
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum ImageResponse {
/// The requested image was loaded.
- Loaded(Arc<Image>, ServoUrl),
+ Loaded(#[ignore_malloc_size_of = "Arc"] Arc<Image>, ServoUrl),
/// The request image metadata was loaded.
MetadataLoaded(ImageMetadata),
/// The requested image failed to load, so a placeholder was loaded instead.
- PlaceholderLoaded(Arc<Image>, ServoUrl),
+ PlaceholderLoaded(#[ignore_malloc_size_of = "Arc"] Arc<Image>, ServoUrl),
/// Neither the requested image nor the placeholder could be loaded.
None,
}
@@ -81,7 +81,7 @@ pub enum ImageState {
}
/// The unique id for an image that has previously been requested.
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub struct PendingImageId(pub u64);
#[derive(Debug, Deserialize, Serialize)]
diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs
index 05b9b85b811..0c0b1148b7a 100644
--- a/components/net_traits/lib.rs
+++ b/components/net_traits/lib.rs
@@ -6,14 +6,14 @@
#![deny(unsafe_code)]
extern crate cookie as cookie_rs;
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
extern crate hyper;
extern crate hyper_serde;
extern crate image as piston_image;
extern crate ipc_channel;
#[macro_use] extern crate lazy_static;
#[macro_use] extern crate log;
+#[macro_use] extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate msg;
extern crate num_traits;
#[macro_use] extern crate serde;
@@ -25,7 +25,6 @@ extern crate webrender_api;
use cookie_rs::Cookie;
use filemanager_thread::FileManagerThreadMsg;
-use heapsize::HeapSizeOf;
use hyper::Error as HyperError;
use hyper::header::{ContentType, Headers, ReferrerPolicy as ReferrerPolicyHeader};
use hyper::http::RawStatus;
@@ -60,7 +59,7 @@ pub mod image {
/// A loading context, for context-specific sniffing, as defined in
/// <https://mimesniff.spec.whatwg.org/#context-specific-sniffing>
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub enum LoadContext {
Browsing,
Image,
@@ -73,13 +72,13 @@ pub enum LoadContext {
CacheManifest,
}
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct CustomResponse {
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
#[serde(deserialize_with = "::hyper_serde::deserialize",
serialize_with = "::hyper_serde::serialize")]
pub headers: Headers,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
#[serde(deserialize_with = "::hyper_serde::deserialize",
serialize_with = "::hyper_serde::serialize")]
pub raw_status: RawStatus,
@@ -104,7 +103,7 @@ pub struct CustomResponseMediator {
/// [Policies](https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states)
/// for providing a referrer header for a request
-#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum ReferrerPolicy {
/// "no-referrer"
NoReferrer,
@@ -310,11 +309,7 @@ impl IpcSend<StorageThreadMsg> for ResourceThreads {
}
// Ignore the sub-fields
-impl HeapSizeOf for ResourceThreads {
- fn heap_size_of_children(&self) -> usize {
- 0
- }
-}
+malloc_size_of_is_0!(ResourceThreads);
#[derive(Clone, Copy, Deserialize, PartialEq, Serialize)]
pub enum IncludeSubdomains {
@@ -322,7 +317,7 @@ pub enum IncludeSubdomains {
NotIncluded,
}
-#[derive(Deserialize, HeapSizeOf, Serialize)]
+#[derive(Deserialize, MallocSizeOf, Serialize)]
pub enum MessageData {
Text(String),
Binary(Vec<u8>),
@@ -395,7 +390,7 @@ pub fn fetch_async<F>(request: RequestInit, core_resource_thread: &CoreResourceT
core_resource_thread.send(CoreResourceMsg::Fetch(request, action_sender)).unwrap();
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct ResourceCorsData {
/// CORS Preflight flag
pub preflight: bool,
@@ -404,7 +399,7 @@ pub struct ResourceCorsData {
}
/// Metadata about a loaded resource, such as is obtained from HTTP headers.
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct Metadata {
/// Final URL after redirects.
pub final_url: ServoUrl,
@@ -412,14 +407,14 @@ pub struct Metadata {
/// Location URL from the response headers.
pub location_url: Option<Result<ServoUrl, String>>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
/// MIME type / subtype.
pub content_type: Option<Serde<ContentType>>,
/// Character set.
pub charset: Option<String>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
/// Headers
pub headers: Option<Serde<Headers>>,
@@ -509,11 +504,11 @@ pub fn load_whole_resource(request: RequestInit,
}
/// An unique identifier to keep track of each load message in the resource handler
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub struct ResourceId(pub u32);
/// Network errors that have to be exported out of the loaders
-#[derive(Clone, Debug, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub enum NetworkError {
/// Could be any of the internal errors, like unsupported scheme, connection errors, etc.
Internal(String),
diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs
index 55a6a030a28..409ff756daa 100644
--- a/components/net_traits/request.rs
+++ b/components/net_traits/request.rs
@@ -10,7 +10,7 @@ use servo_url::{ImmutableOrigin, ServoUrl};
use std::default::Default;
/// An [initiator](https://fetch.spec.whatwg.org/#concept-request-initiator)
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum Initiator {
None,
Download,
@@ -20,7 +20,7 @@ pub enum Initiator {
}
/// A request [type](https://fetch.spec.whatwg.org/#concept-request-type)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum Type {
None,
Audio,
@@ -33,7 +33,7 @@ pub enum Type {
}
/// A request [destination](https://fetch.spec.whatwg.org/#concept-request-destination)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum Destination {
None,
Document,
@@ -53,14 +53,14 @@ pub enum Destination {
}
/// A request [origin](https://fetch.spec.whatwg.org/#concept-request-origin)
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum Origin {
Client,
Origin(ImmutableOrigin),
}
/// A [referer](https://fetch.spec.whatwg.org/#concept-request-referrer)
-#[derive(Clone, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum Referrer {
NoReferrer,
/// Default referrer if nothing is specified
@@ -69,7 +69,7 @@ pub enum Referrer {
}
/// A [request mode](https://fetch.spec.whatwg.org/#concept-request-mode)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum RequestMode {
Navigate,
SameOrigin,
@@ -79,7 +79,7 @@ pub enum RequestMode {
}
/// Request [credentials mode](https://fetch.spec.whatwg.org/#concept-request-credentials-mode)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum CredentialsMode {
Omit,
CredentialsSameOrigin,
@@ -87,7 +87,7 @@ pub enum CredentialsMode {
}
/// [Cache mode](https://fetch.spec.whatwg.org/#concept-request-cache-mode)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum CacheMode {
Default,
NoStore,
@@ -98,7 +98,7 @@ pub enum CacheMode {
}
/// [Service-workers mode](https://fetch.spec.whatwg.org/#request-service-workers-mode)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum ServiceWorkersMode {
All,
Foreign,
@@ -106,7 +106,7 @@ pub enum ServiceWorkersMode {
}
/// [Redirect mode](https://fetch.spec.whatwg.org/#concept-request-redirect-mode)
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum RedirectMode {
Follow,
Error,
@@ -114,7 +114,7 @@ pub enum RedirectMode {
}
/// [Response tainting](https://fetch.spec.whatwg.org/#concept-request-response-tainting)
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum ResponseTainting {
Basic,
CorsTainting,
@@ -122,7 +122,7 @@ pub enum ResponseTainting {
}
/// [Window](https://fetch.spec.whatwg.org/#concept-request-window)
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum Window {
NoWindow,
Client, // TODO: Environmental settings object
@@ -135,16 +135,16 @@ pub enum CorsSettings {
UseCredentials,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct RequestInit {
#[serde(deserialize_with = "::hyper_serde::deserialize",
serialize_with = "::hyper_serde::serialize")]
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub method: Method,
pub url: ServoUrl,
#[serde(deserialize_with = "::hyper_serde::deserialize",
serialize_with = "::hyper_serde::serialize")]
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub headers: Headers,
pub unsafe_request: bool,
pub body: Option<Vec<u8>>,
@@ -199,17 +199,17 @@ impl Default for RequestInit {
/// A [Request](https://fetch.spec.whatwg.org/#concept-request) as defined by
/// the Fetch spec.
-#[derive(Clone, HeapSizeOf)]
+#[derive(Clone, MallocSizeOf)]
pub struct Request {
/// <https://fetch.spec.whatwg.org/#concept-request-method>
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub method: Method,
/// <https://fetch.spec.whatwg.org/#local-urls-only-flag>
pub local_urls_only: bool,
/// <https://fetch.spec.whatwg.org/#sandboxed-storage-area-urls-flag>
pub sandboxed_storage_area_urls: bool,
/// <https://fetch.spec.whatwg.org/#concept-request-header-list>
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub headers: Headers,
/// <https://fetch.spec.whatwg.org/#unsafe-request-flag>
pub unsafe_request: bool,
diff --git a/components/net_traits/response.rs b/components/net_traits/response.rs
index a034067455b..f17279b93dd 100644
--- a/components/net_traits/response.rs
+++ b/components/net_traits/response.rs
@@ -13,7 +13,7 @@ use std::ascii::AsciiExt;
use std::sync::{Arc, Mutex};
/// [Response type](https://fetch.spec.whatwg.org/#concept-response-type)
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum ResponseType {
Basic,
Cors,
@@ -24,7 +24,7 @@ pub enum ResponseType {
}
/// [Response termination reason](https://fetch.spec.whatwg.org/#concept-response-termination-reason)
-#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum TerminationReason {
EndUserAbort,
Fatal,
@@ -33,7 +33,7 @@ pub enum TerminationReason {
/// The response body can still be pushed to after fetch
/// This provides a way to store unfinished response bodies
-#[derive(Clone, Debug, HeapSizeOf, PartialEq)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum ResponseBody {
Empty, // XXXManishearth is this necessary, or is Done(vec![]) enough?
Receiving(Vec<u8>),
@@ -52,7 +52,7 @@ impl ResponseBody {
/// [Cache state](https://fetch.spec.whatwg.org/#concept-response-cache-state)
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum CacheState {
None,
Local,
@@ -61,7 +61,7 @@ pub enum CacheState {
}
/// [Https state](https://fetch.spec.whatwg.org/#concept-response-https-state)
-#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum HttpsState {
None,
Deprecated,
@@ -74,31 +74,31 @@ pub enum ResponseMsg {
Errored,
}
-#[derive(Clone, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct ResponseInit {
pub url: ServoUrl,
#[serde(deserialize_with = "::hyper_serde::deserialize",
serialize_with = "::hyper_serde::serialize")]
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub headers: Headers,
pub referrer: Option<ServoUrl>,
pub location_url: Option<Result<ServoUrl, String>>,
}
/// A [Response](https://fetch.spec.whatwg.org/#concept-response) as defined by the Fetch spec
-#[derive(Clone, Debug, HeapSizeOf)]
+#[derive(Clone, Debug, MallocSizeOf)]
pub struct Response {
pub response_type: ResponseType,
pub termination_reason: Option<TerminationReason>,
url: Option<ServoUrl>,
pub url_list: Vec<ServoUrl>,
/// `None` can be considered a StatusCode of `0`.
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub status: Option<StatusCode>,
pub raw_status: Option<(u16, Vec<u8>)>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
pub headers: Headers,
- #[ignore_heap_size_of = "Mutex heap size undefined"]
+ #[ignore_malloc_size_of = "Mutex heap size undefined"]
pub body: Arc<Mutex<ResponseBody>>,
pub cache_state: CacheState,
pub https_state: HttpsState,
diff --git a/components/net_traits/storage_thread.rs b/components/net_traits/storage_thread.rs
index e338773a53a..12047d08443 100644
--- a/components/net_traits/storage_thread.rs
+++ b/components/net_traits/storage_thread.rs
@@ -5,7 +5,7 @@
use ipc_channel::ipc::IpcSender;
use servo_url::ServoUrl;
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub enum StorageType {
Session,
Local,
diff --git a/components/profile_traits/mem.rs b/components/profile_traits/mem.rs
index 3f134c15faf..7938950b77f 100644
--- a/components/profile_traits/mem.rs
+++ b/components/profile_traits/mem.rs
@@ -79,7 +79,7 @@ impl ProfilerChan {
#[derive(Deserialize, Serialize)]
pub enum ReportKind {
/// A size measurement for an explicit allocation on the jemalloc heap. This should be used
- /// for any measurements done via the `HeapSizeOf` trait.
+ /// for any measurements done via the `MallocSizeOf` trait.
ExplicitJemallocHeapSize,
/// A size measurement for an explicit allocation on the system heap. Only likely to be used
diff --git a/components/range/Cargo.toml b/components/range/Cargo.toml
index 1b2e0681286..cdfc0615266 100644
--- a/components/range/Cargo.toml
+++ b/components/range/Cargo.toml
@@ -11,7 +11,7 @@ name = "range"
path = "lib.rs"
[dependencies]
-heapsize = "0.4"
-heapsize_derive = "0.1"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
num-traits = "0.1.32"
serde = "1.0"
diff --git a/components/range/lib.rs b/components/range/lib.rs
index d125c88f817..6088d006989 100644
--- a/components/range/lib.rs
+++ b/components/range/lib.rs
@@ -4,8 +4,8 @@
#![deny(unsafe_code)]
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate num_traits;
#[macro_use] extern crate serde;
@@ -146,7 +146,7 @@ macro_rules! int_range_index {
}
/// A range of indices
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub struct Range<I> {
begin: I,
length: I,
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index 7e0c4068cec..8c9e9613ede 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -44,9 +44,7 @@ euclid = "0.15"
fnv = "1.0"
gleam = "0.4"
half = "1.0"
-heapsize = "0.4"
-heapsize_derive = "0.1"
-html5ever = {version = "0.20", features = ["heap_size"]}
+html5ever = "0.20"
hyper = "0.10"
hyper_serde = "0.7"
image = "0.16"
@@ -56,6 +54,8 @@ jstraceable_derive = {path = "../jstraceable_derive"}
lazy_static = "0.2"
libc = "0.2"
log = "0.3.5"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
metrics = {path = "../metrics"}
mitochondria = "1.1.2"
mime = "0.2.1"
@@ -89,7 +89,7 @@ style_traits = {path = "../style_traits"}
swapper = "0.1"
time = "0.1.12"
unicode-segmentation = "1.1.0"
-url = {version = "1.2", features = ["heap_size", "query_encoding"]}
+url = {version = "1.2", features = ["query_encoding"]}
utf-8 = "0.7"
uuid = {version = "0.5", features = ["v4"]}
xml5ever = {version = "0.10"}
diff --git a/components/script/body.rs b/components/script/body.rs
index bdeff81e163..21c4d49b58c 100644
--- a/components/script/body.rs
+++ b/components/script/body.rs
@@ -22,7 +22,7 @@ use std::rc::Rc;
use std::str;
use url::form_urlencoded;
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf)]
pub enum BodyType {
Blob,
FormData,
diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs
index f9a4325fbad..a50cea265fd 100644
--- a/components/script/document_loader.rs
+++ b/components/script/document_loader.rs
@@ -14,7 +14,7 @@ use net_traits::request::RequestInit;
use servo_url::ServoUrl;
use std::thread;
-#[derive(Clone, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Debug, JSTraceable, MallocSizeOf, PartialEq)]
pub enum LoadType {
Image(ServoUrl),
Script(ServoUrl),
@@ -40,7 +40,7 @@ impl LoadType {
/// Canary value ensuring that manually added blocking loads (ie. ones that weren't
/// created via DocumentLoader::fetch_async) are always removed by the time
/// that the owner is destroyed.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct LoadBlocker {
/// The document whose load event is blocked by this object existing.
@@ -81,7 +81,7 @@ impl Drop for LoadBlocker {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct DocumentLoader {
resource_threads: ResourceThreads,
blocking_loads: Vec<LoadType>,
diff --git a/components/script/dom/bindings/cell.rs b/components/script/dom/bindings/cell.rs
index 2235e3ac769..3ba4fad6c66 100644
--- a/components/script/dom/bindings/cell.rs
+++ b/components/script/dom/bindings/cell.rs
@@ -11,7 +11,7 @@ use style::thread_state;
///
/// This extends the API of `std::cell::RefCell` to allow unsafe access in
/// certain situations, with dynamic checking in debug builds.
-#[derive(Clone, Debug, Default, HeapSizeOf, PartialEq)]
+#[derive(Clone, Debug, Default, MallocSizeOf, PartialEq)]
pub struct DomRefCell<T> {
value: RefCell<T>,
}
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index d0b5e678db8..3251290f398 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2029,7 +2029,7 @@ def DOMClass(descriptor):
# padding.
protoList.extend(['PrototypeList::ID::Last'] * (descriptor.config.maxProtoChainLength - len(protoList)))
prototypeChainString = ', '.join(protoList)
- heapSizeOf = 'heap_size_of_raw_self_and_children::<%s>' % descriptor.concreteType
+ mallocSizeOf = 'malloc_size_of_including_raw_self::<%s>' % descriptor.concreteType
if descriptor.isGlobal():
globals_ = camel_to_upper_snake(descriptor.name)
else:
@@ -2038,9 +2038,9 @@ def DOMClass(descriptor):
DOMClass {
interface_chain: [ %s ],
type_id: %s,
- heap_size_of: %s as unsafe fn(_) -> _,
+ malloc_size_of: %s as unsafe fn(&mut _, _) -> _,
global: InterfaceObjectMap::%s,
-}""" % (prototypeChainString, DOMClassTypeId(descriptor), heapSizeOf, globals_)
+}""" % (prototypeChainString, DOMClassTypeId(descriptor), mallocSizeOf, globals_)
class CGDOMJSClass(CGThing):
@@ -4005,7 +4005,7 @@ class CGEnum(CGThing):
ident = enum.identifier.name
decl = """\
#[repr(usize)]
-#[derive(JSTraceable, PartialEq, Copy, Clone, HeapSizeOf, Debug)]
+#[derive(Copy, Clone, Debug, JSTraceable, MallocSizeOf, PartialEq)]
pub enum %s {
%s
}
@@ -5794,7 +5794,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'dom::bindings::weakref::WeakReferenceable',
'dom::windowproxy::WindowProxy',
'dom::globalscope::GlobalScope',
- 'mem::heap_size_of_raw_self_and_children',
+ 'mem::malloc_size_of_including_raw_self',
'libc',
'servo_config::prefs::PREFS',
'std::borrow::ToOwned',
diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs
index 2cbbe2da647..9ff6aa92429 100644
--- a/components/script/dom/bindings/error.rs
+++ b/components/script/dom/bindings/error.rs
@@ -25,7 +25,7 @@ use libc::c_uint;
use std::slice::from_raw_parts;
/// DOM exceptions that can be thrown by a native DOM method.
-#[derive(Clone, Debug, HeapSizeOf)]
+#[derive(Clone, Debug, MallocSizeOf)]
pub enum Error {
/// IndexSizeError DOMException
IndexSize,
diff --git a/components/script/dom/bindings/iterable.rs b/components/script/dom/bindings/iterable.rs
index 779695918c9..183c17a2578 100644
--- a/components/script/dom/bindings/iterable.rs
+++ b/components/script/dom/bindings/iterable.rs
@@ -22,7 +22,7 @@ use std::cell::Cell;
use std::ptr;
/// The values that an iterator will iterate over.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum IteratorType {
/// The keys of the iterable object.
Keys,
diff --git a/components/script/dom/bindings/num.rs b/components/script/dom/bindings/num.rs
index f7604cfab20..79480574f4d 100644
--- a/components/script/dom/bindings/num.rs
+++ b/components/script/dom/bindings/num.rs
@@ -4,7 +4,7 @@
//! The `Finite<T>` struct.
-use heapsize::HeapSizeOf;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use num_traits::Float;
use std::default::Default;
use std::ops::Deref;
@@ -41,9 +41,9 @@ impl<T: Float> Deref for Finite<T> {
}
}
-impl<T: Float + HeapSizeOf> HeapSizeOf for Finite<T> {
- fn heap_size_of_children(&self) -> usize {
- (**self).heap_size_of_children()
+impl<T: Float + MallocSizeOf> MallocSizeOf for Finite<T> {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ (**self).size_of(ops)
}
}
diff --git a/components/script/dom/bindings/reflector.rs b/components/script/dom/bindings/reflector.rs
index 6a47b7d3c07..0fef0a30678 100644
--- a/components/script/dom/bindings/reflector.rs
+++ b/components/script/dom/bindings/reflector.rs
@@ -27,11 +27,11 @@ pub fn reflect_dom_object<T, U>(
/// A struct to store a reference to the reflector of a DOM object.
#[allow(unrooted_must_root)]
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
#[must_root]
// If you're renaming or moving this field, update the path in plugins::reflector as well
pub struct Reflector {
- #[ignore_heap_size_of = "defined and measured in rust-mozjs"]
+ #[ignore_malloc_size_of = "defined and measured in rust-mozjs"]
object: Heap<*mut JSObject>,
}
diff --git a/components/script/dom/bindings/root.rs b/components/script/dom/bindings/root.rs
index e2c474cafd5..636c14b4d5c 100644
--- a/components/script/dom/bindings/root.rs
+++ b/components/script/dom/bindings/root.rs
@@ -30,9 +30,9 @@ use dom::bindings::reflector::{DomObject, Reflector};
use dom::bindings::trace::JSTraceable;
use dom::bindings::trace::trace_reflector;
use dom::node::Node;
-use heapsize::HeapSizeOf;
use js::jsapi::{JSObject, JSTracer, Heap};
use js::rust::GCMethods;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use mitochondria::OnceCell;
use nonzero::NonZero;
use script_layout_interface::TrustedNodeAddress;
@@ -157,12 +157,12 @@ impl<T: DomObject> DomRoot<T> {
}
}
-impl<T> HeapSizeOf for DomRoot<T>
+impl<T> MallocSizeOf for DomRoot<T>
where
- T: DomObject + HeapSizeOf,
+ T: DomObject + MallocSizeOf,
{
- fn heap_size_of_children(&self) -> usize {
- (**self).heap_size_of_children()
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ (**self).size_of(ops)
}
}
@@ -317,8 +317,8 @@ pub struct Dom<T> {
// Dom<T> is similar to Rc<T>, in that it's not always clear how to avoid double-counting.
// For now, we choose not to follow any such pointers.
-impl<T> HeapSizeOf for Dom<T> {
- fn heap_size_of_children(&self) -> usize {
+impl<T> MallocSizeOf for Dom<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
0
}
}
@@ -516,9 +516,9 @@ impl<T: DomObject> MutDom<T> {
}
}
-impl<T: DomObject> HeapSizeOf for MutDom<T> {
- fn heap_size_of_children(&self) -> usize {
- // See comment on HeapSizeOf for Dom<T>.
+impl<T: DomObject> MallocSizeOf for MutDom<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ // See comment on MallocSizeOf for Dom<T>.
0
}
}
@@ -635,9 +635,9 @@ impl<T: DomObject> Default for MutNullableDom<T> {
}
}
-impl<T: DomObject> HeapSizeOf for MutNullableDom<T> {
- fn heap_size_of_children(&self) -> usize {
- // See comment on HeapSizeOf for Dom<T>.
+impl<T: DomObject> MallocSizeOf for MutNullableDom<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ // See comment on MallocSizeOf for Dom<T>.
0
}
}
@@ -678,9 +678,9 @@ impl<T: DomObject> Default for DomOnceCell<T> {
}
}
-impl<T: DomObject> HeapSizeOf for DomOnceCell<T> {
- fn heap_size_of_children(&self) -> usize {
- // See comment on HeapSizeOf for Dom<T>.
+impl<T: DomObject> MallocSizeOf for DomOnceCell<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
+ // See comment on MallocSizeOf for Dom<T>.
0
}
}
diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs
index b665b64da8a..af33f662ff7 100644
--- a/components/script/dom/bindings/str.rs
+++ b/components/script/dom/bindings/str.rs
@@ -19,7 +19,7 @@ use std::str;
use std::str::{Bytes, FromStr};
/// Encapsulates the IDL `ByteString` type.
-#[derive(Clone, Debug, Default, Eq, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Debug, Default, Eq, JSTraceable, MallocSizeOf, PartialEq)]
pub struct ByteString(Vec<u8>);
impl ByteString {
@@ -78,7 +78,7 @@ impl ops::Deref for ByteString {
/// A string that is constructed from a UCS-2 buffer by replacing invalid code
/// points with the replacement character.
-#[derive(Clone, Default, HeapSizeOf)]
+#[derive(Clone, Default, MallocSizeOf)]
pub struct USVString(pub String);
@@ -153,7 +153,7 @@ pub fn is_token(s: &[u8]) -> bool {
///
/// This type is currently `!Send`, in order to help with an independent
/// experiment to store `JSString`s rather than Rust `String`s.
-#[derive(Clone, Debug, Eq, Hash, HeapSizeOf, Ord, PartialEq, PartialOrd)]
+#[derive(Clone, Debug, Eq, Hash, MallocSizeOf, Ord, PartialEq, PartialOrd)]
pub struct DOMString(String, PhantomData<*const ()>);
impl DOMString {
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 5ecca038de9..2a23281c8fe 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -13,7 +13,6 @@ use dom::bindings::inheritance::TopTypeId;
use dom::bindings::str::DOMString;
use dom::bindings::trace::trace_object;
use dom::windowproxy;
-use heapsize::HeapSizeOf;
use js;
use js::JS_CALLEE;
use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper};
@@ -32,6 +31,7 @@ use js::jsapi::{JS_StringHasLatin1Chars, MutableHandleValue, ObjectOpResult};
use js::jsval::{JSVal, UndefinedValue};
use js::rust::{GCMethods, ToString, get_object_class, is_dom_class};
use libc;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use std::ffi::CString;
use std::os::raw::{c_char, c_void};
use std::ptr;
@@ -40,14 +40,14 @@ use std::slice;
/// Proxy handler for a WindowProxy.
pub struct WindowProxyHandler(pub *const libc::c_void);
-impl HeapSizeOf for WindowProxyHandler {
- fn heap_size_of_children(&self) -> usize {
+impl MallocSizeOf for WindowProxyHandler {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
// FIXME(#6907) this is a pointer to memory allocated by `new` in NewProxyHandler in rust-mozjs.
0
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
/// Static data associated with a global object.
pub struct GlobalStaticData {
/// The WindowProxy proxy handler for this global.
@@ -88,8 +88,8 @@ pub struct DOMClass {
/// The type ID of that interface.
pub type_id: TopTypeId,
- /// The HeapSizeOf function wrapper for that interface.
- pub heap_size_of: unsafe fn(*const c_void) -> usize,
+ /// The MallocSizeOf function wrapper for that interface.
+ pub malloc_size_of: unsafe fn(ops: &mut MallocSizeOfOps, *const c_void) -> usize,
/// The `Globals` flag for this global interface, if any.
pub global: InterfaceObjectMap::Globals,
diff --git a/components/script/dom/bindings/weakref.rs b/components/script/dom/bindings/weakref.rs
index 36eac4c4f32..2aa12490867 100644
--- a/components/script/dom/bindings/weakref.rs
+++ b/components/script/dom/bindings/weakref.rs
@@ -14,10 +14,10 @@
use dom::bindings::reflector::DomObject;
use dom::bindings::root::DomRoot;
use dom::bindings::trace::JSTraceable;
-use heapsize::HeapSizeOf;
use js::jsapi::{JSTracer, JS_GetReservedSlot, JS_SetReservedSlot};
use js::jsval::PrivateValue;
use libc::c_void;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use nonzero::NonZero;
use std::cell::{Cell, UnsafeCell};
use std::mem;
@@ -110,8 +110,8 @@ impl<T: WeakReferenceable> Clone for WeakRef<T> {
}
}
-impl<T: WeakReferenceable> HeapSizeOf for WeakRef<T> {
- fn heap_size_of_children(&self) -> usize {
+impl<T: WeakReferenceable> MallocSizeOf for WeakRef<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
0
}
}
@@ -188,8 +188,8 @@ impl<T: WeakReferenceable> MutableWeakRef<T> {
}
}
-impl<T: WeakReferenceable> HeapSizeOf for MutableWeakRef<T> {
- fn heap_size_of_children(&self) -> usize {
+impl<T: WeakReferenceable> MallocSizeOf for MutableWeakRef<T> {
+ fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
0
}
}
@@ -210,7 +210,7 @@ unsafe impl<T: WeakReferenceable> JSTraceable for MutableWeakRef<T> {
/// A vector of weak references. On tracing, the vector retains
/// only references which still point to live objects.
#[allow_unrooted_interior]
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub struct WeakRefVec<T: WeakReferenceable> {
vec: Vec<WeakRef<T>>,
}
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs
index a436564f4f2..394efd4647d 100644
--- a/components/script/dom/blob.rs
+++ b/components/script/dom/blob.rs
@@ -69,7 +69,7 @@ impl BlobImpl {
#[dom_struct]
pub struct Blob {
reflector_: Reflector,
- #[ignore_heap_size_of = "No clear owner"]
+ #[ignore_malloc_size_of = "No clear owner"]
blob_impl: DomRefCell<BlobImpl>,
/// content-type string
type_string: String,
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index f9ab60ec59c..44cf83df5d8 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -56,13 +56,13 @@ const OPTIONS_ERROR: &'static str = "Fields of 'options' conflict with each othe
Either 'acceptAllDevices' member must be true, or 'filters' member must be set to a value.";
const BT_DESC_CONVERSION_ERROR: &'static str = "Can't convert to an IDL value of type BluetoothPermissionDescriptor";
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct AllowedBluetoothDevice {
pub deviceId: DOMString,
pub mayUseGATT: bool,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct BluetoothExtraPermissionData {
allowed_devices: DomRefCell<Vec<AllowedBluetoothDevice>>,
}
diff --git a/components/script/dom/canvasgradient.rs b/components/script/dom/canvasgradient.rs
index 6ae52be6764..ab6ad47d905 100644
--- a/components/script/dom/canvasgradient.rs
+++ b/components/script/dom/canvasgradient.rs
@@ -24,7 +24,7 @@ pub struct CanvasGradient {
stops: DomRefCell<Vec<CanvasGradientStop>>,
}
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub enum CanvasGradientStyle {
Linear(LinearGradientStyle),
Radial(RadialGradientStyle),
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs
index 69cf670efe4..cf6b92bc404 100644
--- a/components/script/dom/canvasrenderingcontext2d.rs
+++ b/components/script/dom/canvasrenderingcontext2d.rs
@@ -51,7 +51,7 @@ use std::sync::Arc;
use unpremultiplytable::UNPREMULTIPLY_TABLE;
#[must_root]
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
#[allow(dead_code)]
enum CanvasFillOrStrokeStyle {
Color(RGBA),
@@ -63,12 +63,12 @@ enum CanvasFillOrStrokeStyle {
#[dom_struct]
pub struct CanvasRenderingContext2D {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
ipc_renderer: IpcSender<CanvasMsg>,
/// For rendering contexts created by an HTML canvas element, this is Some,
/// for ones created by a paint worklet, this is None.
canvas: Option<Dom<HTMLCanvasElement>>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
image_cache: Arc<ImageCache>,
/// Any missing image URLs.
missing_image_urls: DomRefCell<Vec<ServoUrl>>,
@@ -81,7 +81,7 @@ pub struct CanvasRenderingContext2D {
}
#[must_root]
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
struct CanvasContextState {
global_alpha: f64,
global_composition: CompositionOrBlending,
diff --git a/components/script/dom/client.rs b/components/script/dom/client.rs
index 94ddc15535f..7c68daecdb3 100644
--- a/components/script/dom/client.rs
+++ b/components/script/dom/client.rs
@@ -20,7 +20,7 @@ pub struct Client {
active_worker: MutNullableDom<ServiceWorker>,
url: ServoUrl,
frame_type: FrameType,
- #[ignore_heap_size_of = "Defined in uuid"]
+ #[ignore_malloc_size_of = "Defined in uuid"]
id: Uuid
}
diff --git a/components/script/dom/crypto.rs b/components/script/dom/crypto.rs
index ac56e9f3ff6..1a13194151c 100644
--- a/components/script/dom/crypto.rs
+++ b/components/script/dom/crypto.rs
@@ -21,7 +21,7 @@ unsafe_no_jsmanaged_fields!(ServoRng);
#[dom_struct]
pub struct Crypto {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in rand"]
+ #[ignore_malloc_size_of = "Defined in rand"]
rng: DomRefCell<ServoRng>,
}
diff --git a/components/script/dom/cssfontfacerule.rs b/components/script/dom/cssfontfacerule.rs
index 3bc836897ea..8f2970abc39 100644
--- a/components/script/dom/cssfontfacerule.rs
+++ b/components/script/dom/cssfontfacerule.rs
@@ -17,7 +17,7 @@ use style::stylesheets::FontFaceRule;
#[dom_struct]
pub struct CSSFontFaceRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
fontfacerule: Arc<Locked<FontFaceRule>>,
}
diff --git a/components/script/dom/cssgroupingrule.rs b/components/script/dom/cssgroupingrule.rs
index dec666c825e..21c744118ea 100644
--- a/components/script/dom/cssgroupingrule.rs
+++ b/components/script/dom/cssgroupingrule.rs
@@ -19,7 +19,7 @@ use style::stylesheets::CssRules as StyleCssRules;
#[dom_struct]
pub struct CSSGroupingRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
rules: Arc<Locked<StyleCssRules>>,
rulelist: MutNullableDom<CSSRuleList>,
}
diff --git a/components/script/dom/cssimportrule.rs b/components/script/dom/cssimportrule.rs
index 373c230ee77..989917700ac 100644
--- a/components/script/dom/cssimportrule.rs
+++ b/components/script/dom/cssimportrule.rs
@@ -17,7 +17,7 @@ use style::stylesheets::ImportRule;
#[dom_struct]
pub struct CSSImportRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
import_rule: Arc<Locked<ImportRule>>,
}
diff --git a/components/script/dom/csskeyframerule.rs b/components/script/dom/csskeyframerule.rs
index f62d73f0b46..63ec6e1d016 100644
--- a/components/script/dom/csskeyframerule.rs
+++ b/components/script/dom/csskeyframerule.rs
@@ -19,7 +19,7 @@ use style::stylesheets::keyframes_rule::Keyframe;
#[dom_struct]
pub struct CSSKeyframeRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
keyframerule: Arc<Locked<Keyframe>>,
style_decl: MutNullableDom<CSSStyleDeclaration>,
}
diff --git a/components/script/dom/csskeyframesrule.rs b/components/script/dom/csskeyframesrule.rs
index 955f0c04fb5..7f1c212057d 100644
--- a/components/script/dom/csskeyframesrule.rs
+++ b/components/script/dom/csskeyframesrule.rs
@@ -24,7 +24,7 @@ use style::values::KeyframesName;
#[dom_struct]
pub struct CSSKeyframesRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
keyframesrule: Arc<Locked<KeyframesRule>>,
rulelist: MutNullableDom<CSSRuleList>,
}
diff --git a/components/script/dom/cssmediarule.rs b/components/script/dom/cssmediarule.rs
index 3444d494f16..dc4a4c411a5 100644
--- a/components/script/dom/cssmediarule.rs
+++ b/components/script/dom/cssmediarule.rs
@@ -25,7 +25,7 @@ use style_traits::{PARSING_MODE_DEFAULT, ToCss};
#[dom_struct]
pub struct CSSMediaRule {
cssconditionrule: CSSConditionRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
mediarule: Arc<Locked<MediaRule>>,
medialist: MutNullableDom<MediaList>,
}
diff --git a/components/script/dom/cssnamespacerule.rs b/components/script/dom/cssnamespacerule.rs
index 40047252680..f585f420732 100644
--- a/components/script/dom/cssnamespacerule.rs
+++ b/components/script/dom/cssnamespacerule.rs
@@ -18,7 +18,7 @@ use style::stylesheets::NamespaceRule;
#[dom_struct]
pub struct CSSNamespaceRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
namespacerule: Arc<Locked<NamespaceRule>>,
}
diff --git a/components/script/dom/cssrulelist.rs b/components/script/dom/cssrulelist.rs
index 81b58afc0f8..1f800a6a0b4 100644
--- a/components/script/dom/cssrulelist.rs
+++ b/components/script/dom/cssrulelist.rs
@@ -37,7 +37,7 @@ impl From<RulesMutateError> for Error {
pub struct CSSRuleList {
reflector_: Reflector,
parent_stylesheet: Dom<CSSStyleSheet>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
rules: RulesSource,
dom_rules: DomRefCell<Vec<MutNullableDom<CSSRule>>>
}
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index f7264d9f5d0..e20d4e82e3f 100644
--- a/components/script/dom/cssstyledeclaration.rs
+++ b/components/script/dom/cssstyledeclaration.rs
@@ -33,12 +33,12 @@ pub struct CSSStyleDeclaration {
pseudo: Option<PseudoElement>,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub enum CSSStyleOwner {
Element(Dom<Element>),
CSSRule(Dom<CSSRule>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
Arc<Locked<PropertyDeclarationBlock>>),
}
@@ -154,7 +154,7 @@ impl CSSStyleOwner {
}
}
-#[derive(HeapSizeOf, PartialEq)]
+#[derive(MallocSizeOf, PartialEq)]
pub enum CSSModificationAccess {
ReadWrite,
Readonly,
diff --git a/components/script/dom/cssstylerule.rs b/components/script/dom/cssstylerule.rs
index 7c73bbc58c3..0e9f001dc05 100644
--- a/components/script/dom/cssstylerule.rs
+++ b/components/script/dom/cssstylerule.rs
@@ -25,7 +25,7 @@ use style::stylesheets::{StyleRule, Origin};
#[dom_struct]
pub struct CSSStyleRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
stylerule: Arc<Locked<StyleRule>>,
style_decl: MutNullableDom<CSSStyleDeclaration>,
}
diff --git a/components/script/dom/cssstylesheet.rs b/components/script/dom/cssstylesheet.rs
index de3d3cc0f6d..d393b1f3ff7 100644
--- a/components/script/dom/cssstylesheet.rs
+++ b/components/script/dom/cssstylesheet.rs
@@ -24,7 +24,7 @@ pub struct CSSStyleSheet {
stylesheet: StyleSheet,
owner: Dom<Element>,
rulelist: MutNullableDom<CSSRuleList>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
style_stylesheet: Arc<StyleStyleSheet>,
origin_clean: Cell<bool>,
}
diff --git a/components/script/dom/csssupportsrule.rs b/components/script/dom/csssupportsrule.rs
index 0f6a6530233..d9e3f8ac8a0 100644
--- a/components/script/dom/csssupportsrule.rs
+++ b/components/script/dom/csssupportsrule.rs
@@ -23,7 +23,7 @@ use style_traits::{PARSING_MODE_DEFAULT, ToCss};
#[dom_struct]
pub struct CSSSupportsRule {
cssconditionrule: CSSConditionRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
supportsrule: Arc<Locked<SupportsRule>>,
}
diff --git a/components/script/dom/cssviewportrule.rs b/components/script/dom/cssviewportrule.rs
index 694636be323..89e523cdc39 100644
--- a/components/script/dom/cssviewportrule.rs
+++ b/components/script/dom/cssviewportrule.rs
@@ -17,7 +17,7 @@ use style::stylesheets::ViewportRule;
#[dom_struct]
pub struct CSSViewportRule {
cssrule: CSSRule,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
viewportrule: Arc<Locked<ViewportRule>>,
}
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 319424a25ff..21276d8f5bb 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -47,12 +47,12 @@ pub struct CustomElementRegistry {
window: Dom<Window>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
when_defined: DomRefCell<HashMap<LocalName, Rc<Promise>>>,
element_definition_is_running: Cell<bool>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
definitions: DomRefCell<HashMap<LocalName, Rc<CustomElementDefinition>>>,
}
@@ -369,35 +369,35 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
}
}
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub struct LifecycleCallbacks {
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
connected_callback: Option<Rc<Function>>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
disconnected_callback: Option<Rc<Function>>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
adopted_callback: Option<Rc<Function>>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
attribute_changed_callback: Option<Rc<Function>>,
}
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub enum ConstructionStackEntry {
Element(DomRoot<Element>),
AlreadyConstructedMarker,
}
/// <https://html.spec.whatwg.org/multipage/#custom-element-definition>
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub struct CustomElementDefinition {
pub name: LocalName,
pub local_name: LocalName,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
pub constructor: Rc<Function>,
pub observed_attributes: Vec<DOMString>,
@@ -580,15 +580,15 @@ pub fn try_upgrade_element(element: &Element) {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub enum CustomElementReaction {
Upgrade(
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
Rc<CustomElementDefinition>
),
Callback(
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
Rc<Function>,
Box<[Heap<JSVal>]>
),
@@ -617,14 +617,14 @@ pub enum CallbackReaction {
}
/// <https://html.spec.whatwg.org/multipage/#processing-the-backup-element-queue>
-#[derive(Clone, Copy, Eq, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Eq, JSTraceable, MallocSizeOf, PartialEq)]
enum BackupElementQueueFlag {
Processing,
NotProcessing,
}
/// <https://html.spec.whatwg.org/multipage/#custom-element-reactions-stack>
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct CustomElementReactionStack {
stack: DomRefCell<Vec<ElementQueue>>,
@@ -773,7 +773,7 @@ impl CustomElementReactionStack {
}
/// <https://html.spec.whatwg.org/multipage/#element-queue>
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
struct ElementQueue {
queue: DomRefCell<VecDeque<Dom<Element>>>,
diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs
index e78ac74bd84..ee62fd2a854 100644
--- a/components/script/dom/customevent.rs
+++ b/components/script/dom/customevent.rs
@@ -22,7 +22,7 @@ use servo_atoms::Atom;
#[dom_struct]
pub struct CustomEvent {
event: Event,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
detail: Heap<JSVal>,
}
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 33f08793b56..a754bbc4c6a 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -80,15 +80,15 @@ enum MixedMessage {
#[dom_struct]
pub struct DedicatedWorkerGlobalScope {
workerglobalscope: WorkerGlobalScope,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
receiver: Receiver<(TrustedWorkerAddress, WorkerScriptMsg)>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
timer_event_port: Receiver<(TrustedWorkerAddress, TimerEvent)>,
- #[ignore_heap_size_of = "Trusted<T> has unclear ownership like Dom<T>"]
+ #[ignore_malloc_size_of = "Trusted<T> has unclear ownership like Dom<T>"]
worker: DomRefCell<Option<TrustedWorkerAddress>>,
- #[ignore_heap_size_of = "Can't measure trait objects"]
+ #[ignore_malloc_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 fd8bf37a897..09212135dd2 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -158,13 +158,13 @@ pub enum TouchEventResult {
Forwarded,
}
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
pub enum IsHTMLDocument {
HTMLDocument,
NonHTMLDocument,
}
-#[derive(Debug, HeapSizeOf)]
+#[derive(Debug, MallocSizeOf)]
pub struct PendingRestyle {
/// If this element had a state or attribute change since the last restyle, track
/// the original condition of the element.
@@ -187,10 +187,10 @@ impl PendingRestyle {
}
}
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
#[must_root]
struct StyleSheetInDocument {
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
sheet: Arc<Stylesheet>,
owner: Dom<Element>,
}
@@ -228,7 +228,7 @@ pub struct Document {
is_html_document: bool,
activity: Cell<DocumentActivity>,
url: DomRefCell<ServoUrl>,
- #[ignore_heap_size_of = "defined in selectors"]
+ #[ignore_malloc_size_of = "defined in selectors"]
quirks_mode: Cell<QuirksMode>,
/// Caches for the getElement methods
id_map: DomRefCell<HashMap<Atom, Vec<Dom<Element>>>>,
@@ -321,7 +321,7 @@ pub struct Document {
/// <https://html.spec.whatwg.org/multipage/#target-element>
target_element: MutNullableDom<Element>,
/// <https://w3c.github.io/uievents/#event-type-dblclick>
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
last_click_info: DomRefCell<Option<(Instant, Point2D<f32>)>>,
/// <https://html.spec.whatwg.org/multipage/#ignore-destructive-writes-counter>
ignore_destructive_writes_counter: Cell<u32>,
@@ -346,7 +346,7 @@ pub struct Document {
form_id_listener_map: DomRefCell<HashMap<Atom, HashSet<Dom<Element>>>>,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct ImagesFilter;
impl CollectionFilter for ImagesFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -354,7 +354,7 @@ impl CollectionFilter for ImagesFilter {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct EmbedsFilter;
impl CollectionFilter for EmbedsFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -362,7 +362,7 @@ impl CollectionFilter for EmbedsFilter {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct LinksFilter;
impl CollectionFilter for LinksFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -371,7 +371,7 @@ impl CollectionFilter for LinksFilter {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct FormsFilter;
impl CollectionFilter for FormsFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -379,7 +379,7 @@ impl CollectionFilter for FormsFilter {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct ScriptsFilter;
impl CollectionFilter for ScriptsFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -387,7 +387,7 @@ impl CollectionFilter for ScriptsFilter {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct AnchorsFilter;
impl CollectionFilter for AnchorsFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -395,7 +395,7 @@ impl CollectionFilter for AnchorsFilter {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct AppletsFilter;
impl CollectionFilter for AppletsFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
@@ -1978,7 +1978,7 @@ impl Document {
}
}
-#[derive(HeapSizeOf, PartialEq)]
+#[derive(MallocSizeOf, PartialEq)]
pub enum DocumentSource {
FromParser,
NotFromParser,
@@ -2092,7 +2092,7 @@ fn url_has_network_scheme(url: &ServoUrl) -> bool {
}
}
-#[derive(Clone, Copy, Eq, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Eq, JSTraceable, MallocSizeOf, PartialEq)]
pub enum HasBrowsingContext {
No,
Yes,
@@ -3470,7 +3470,7 @@ impl DocumentMethods for Document {
#[allow(unsafe_code)]
// https://html.spec.whatwg.org/multipage/#dom-tree-accessors:dom-document-nameditem-filter
unsafe fn NamedGetter(&self, _cx: *mut JSContext, name: DOMString) -> Option<NonNullJSObjectPtr> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct NamedElementFilter {
name: Atom,
}
@@ -3945,10 +3945,10 @@ pub enum FocusEventType {
/// If the page is observed to be using `requestAnimationFrame()` for non-animation purposes (i.e.
/// without mutating the DOM), then we fall back to simple timeouts to save energy over video
/// refresh.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct FakeRequestAnimationFrameCallback {
/// The document.
- #[ignore_heap_size_of = "non-owning"]
+ #[ignore_malloc_size_of = "non-owning"]
document: Trusted<Document>,
}
@@ -3959,11 +3959,11 @@ impl FakeRequestAnimationFrameCallback {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum AnimationFrameCallback {
DevtoolsFramerateTick { actor_name: String },
FrameRequestCallback {
- #[ignore_heap_size_of = "Rc is hard"]
+ #[ignore_malloc_size_of = "Rc is hard"]
callback: Rc<FrameRequestCallback>
},
}
@@ -3985,7 +3985,7 @@ impl AnimationFrameCallback {
}
}
-#[derive(Default, HeapSizeOf, JSTraceable)]
+#[derive(Default, JSTraceable, MallocSizeOf)]
#[must_root]
struct PendingInOrderScriptVec {
scripts: DomRefCell<VecDeque<PendingScript>>,
@@ -4021,7 +4021,7 @@ impl PendingInOrderScriptVec {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
struct PendingScript {
element: Dom<HTMLScriptElement>,
diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs
index 4e661dc52c7..e94689b242b 100644
--- a/components/script/dom/domexception.rs
+++ b/components/script/dom/domexception.rs
@@ -12,7 +12,7 @@ use dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
#[repr(u16)]
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf)]
pub enum DOMErrorName {
IndexSizeError = DOMExceptionConstants::INDEX_SIZE_ERR,
HierarchyRequestError = DOMExceptionConstants::HIERARCHY_REQUEST_ERR,
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 595fe67e0eb..9045918d2f8 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -140,7 +140,7 @@ pub struct Element {
attrs: DomRefCell<Vec<Dom<Attr>>>,
id_attribute: DomRefCell<Option<Atom>>,
is: DomRefCell<Option<LocalName>>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
style_attribute: DomRefCell<Option<Arc<Locked<PropertyDeclarationBlock>>>>,
attr_list: MutNullableDom<NamedNodeMap>,
class_list: MutNullableDom<DOMTokenList>,
@@ -149,12 +149,12 @@ pub struct Element {
/// operations may require restyling this element or its descendants. The
/// flags are not atomic, so the style system takes care of only set them
/// when it has exclusive access to the element.
- #[ignore_heap_size_of = "bitflags defined in rust-selectors"]
+ #[ignore_malloc_size_of = "bitflags defined in rust-selectors"]
selector_flags: Cell<ElementSelectorFlags>,
/// <https://html.spec.whatwg.org/multipage/#custom-element-reaction-queue>
custom_element_reaction_queue: DomRefCell<Vec<CustomElementReaction>>,
/// <https://dom.spec.whatwg.org/#concept-element-custom-element-definition>
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
custom_element_definition: DomRefCell<Option<Rc<CustomElementDefinition>>>,
/// <https://dom.spec.whatwg.org/#concept-element-custom-element-state>
custom_element_state: Cell<CustomElementState>,
@@ -176,7 +176,7 @@ impl fmt::Debug for DomRoot<Element> {
}
}
-#[derive(HeapSizeOf, PartialEq)]
+#[derive(MallocSizeOf, PartialEq)]
pub enum ElementCreator {
ParserCreated(u64),
ScriptCreated,
@@ -188,7 +188,7 @@ pub enum CustomElementCreationMode {
}
/// <https://dom.spec.whatwg.org/#concept-element-custom-element-state>
-#[derive(Clone, Copy, Eq, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Eq, JSTraceable, MallocSizeOf, PartialEq)]
pub enum CustomElementState {
Undefined,
Failed,
@@ -3025,7 +3025,7 @@ impl<'a> AttributeMutation<'a> {
/// A holder for an element's "tag name", which will be lazily
/// resolved and cached. Should be reset when the document
/// owner changes.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct TagName {
ptr: DomRefCell<Option<LocalName>>,
}
diff --git a/components/script/dom/errorevent.rs b/components/script/dom/errorevent.rs
index 1703698d382..36d1f149293 100644
--- a/components/script/dom/errorevent.rs
+++ b/components/script/dom/errorevent.rs
@@ -27,7 +27,7 @@ pub struct ErrorEvent {
filename: DomRefCell<DOMString>,
lineno: Cell<u32>,
colno: Cell<u32>,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
error: Heap<JSVal>,
}
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index e9313c742c6..607469ca6bd 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -294,7 +294,7 @@ impl EventMethods for Event {
}
}
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum EventBubbles {
Bubbles,
DoesNotBubble
@@ -318,7 +318,7 @@ impl From<EventBubbles> for bool {
}
}
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum EventCancelable {
Cancelable,
NotCancelable
@@ -344,7 +344,7 @@ impl From<EventCancelable> for bool {
#[derive(Clone, Copy, Debug, Eq, JSTraceable, PartialEq)]
#[repr(u16)]
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub enum EventPhase {
None = EventConstants::NONE,
Capturing = EventConstants::CAPTURING_PHASE,
@@ -363,7 +363,7 @@ pub enum EventPhase {
///
/// [msg]: https://doc.servo.org/script_traits/enum.ConstellationMsg.html#variant.KeyEvent
///
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub enum EventDefault {
/// The default action of the event is allowed (constructor's default)
Allowed,
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index dab9f46bb05..3be3f6035df 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -41,10 +41,10 @@ header! { (LastEventId, "Last-Event-ID") => [String] }
const DEFAULT_RECONNECTION_TIME: u64 = 5000;
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
struct GenerationId(u32);
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
/// <https://html.spec.whatwg.org/multipage/#dom-eventsource-readystate>
enum ReadyState {
Connecting = 0,
@@ -528,11 +528,11 @@ impl EventSourceMethods for EventSource {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct EventSourceTimeoutCallback {
- #[ignore_heap_size_of = "Because it is non-owning"]
+ #[ignore_malloc_size_of = "Because it is non-owning"]
event_source: Trusted<EventSource>,
- #[ignore_heap_size_of = "Because it is non-owning"]
+ #[ignore_malloc_size_of = "Because it is non-owning"]
action_sender: ipc::IpcSender<FetchResponseMsg>,
}
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index e5b8c86e71e..558610fc99f 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -32,7 +32,6 @@ use dom::virtualmethods::VirtualMethods;
use dom::window::Window;
use dom_struct::dom_struct;
use fnv::FnvHasher;
-use heapsize::HeapSizeOf;
use js::jsapi::{CompileFunction, JS_GetFunctionObject, JSAutoCompartment};
use js::rust::{AutoObjectVectorWrapper, CompileOptionsWrapper};
use libc::{c_char, size_t};
@@ -48,11 +47,19 @@ use std::ops::{Deref, DerefMut};
use std::ptr;
use std::rc::Rc;
-#[derive(Clone, JSTraceable, PartialEq)]
+#[derive(Clone, JSTraceable, MallocSizeOf, PartialEq)]
pub enum CommonEventHandler {
- EventHandler(Rc<EventHandlerNonNull>),
- ErrorEventHandler(Rc<OnErrorEventHandlerNonNull>),
- BeforeUnloadEventHandler(Rc<OnBeforeUnloadEventHandlerNonNull>),
+ EventHandler(
+ #[ignore_malloc_size_of = "Rc"]
+ Rc<EventHandlerNonNull>),
+
+ ErrorEventHandler(
+ #[ignore_malloc_size_of = "Rc"]
+ Rc<OnErrorEventHandlerNonNull>),
+
+ BeforeUnloadEventHandler(
+ #[ignore_malloc_size_of = "Rc"]
+ Rc<OnBeforeUnloadEventHandlerNonNull>),
}
impl CommonEventHandler {
@@ -65,14 +72,14 @@ impl CommonEventHandler {
}
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub enum ListenerPhase {
Capturing,
Bubbling,
}
/// <https://html.spec.whatwg.org/multipage/#internal-raw-uncompiled-handler>
-#[derive(Clone, JSTraceable, PartialEq)]
+#[derive(Clone, JSTraceable, MallocSizeOf, PartialEq)]
struct InternalRawUncompiledHandler {
source: DOMString,
url: ServoUrl,
@@ -80,7 +87,7 @@ struct InternalRawUncompiledHandler {
}
/// A representation of an event handler, either compiled or uncompiled raw source, or null.
-#[derive(Clone, JSTraceable, PartialEq)]
+#[derive(Clone, JSTraceable, MallocSizeOf, PartialEq)]
enum InlineEventListener {
Uncompiled(InternalRawUncompiledHandler),
Compiled(CommonEventHandler),
@@ -110,19 +117,12 @@ impl InlineEventListener {
}
}
-#[derive(Clone, JSTraceable, PartialEq)]
+#[derive(Clone, JSTraceable, MallocSizeOf, PartialEq)]
enum EventListenerType {
- Additive(Rc<EventListener>),
+ Additive(#[ignore_malloc_size_of = "Rc"] Rc<EventListener>),
Inline(InlineEventListener),
}
-impl HeapSizeOf for EventListenerType {
- fn heap_size_of_children(&self) -> usize {
- // FIXME: Rc<T> isn't HeapSizeOf and we can't ignore it due to #6870 and #6871
- 0
- }
-}
-
impl EventListenerType {
fn get_compiled_listener(&mut self, owner: &EventTarget, ty: &Atom)
-> Option<CompiledEventListener> {
@@ -225,14 +225,14 @@ impl CompiledEventListener {
}
}
-#[derive(Clone, DenyPublicFields, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, DenyPublicFields, JSTraceable, MallocSizeOf, PartialEq)]
/// A listener in a collection of event listeners.
struct EventListenerEntry {
phase: ListenerPhase,
listener: EventListenerType
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
/// A mix of potentially uncompiled and compiled event listeners of the same type.
struct EventListeners(Vec<EventListenerEntry>);
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index a2e211cc003..db5518116ef 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -39,7 +39,7 @@ use task::TaskCanceller;
use task_source::TaskSource;
use task_source::file_reading::{FileReadingTask, FileReadingTaskSource};
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub enum FileReaderFunction {
ReadAsText,
ReadAsDataUrl,
@@ -48,7 +48,7 @@ pub enum FileReaderFunction {
pub type TrustedFileReader = Trusted<FileReader>;
-#[derive(Clone, HeapSizeOf)]
+#[derive(Clone, MallocSizeOf)]
pub struct ReadMetaData {
pub blobtype: String,
pub label: Option<String>,
@@ -66,18 +66,18 @@ impl ReadMetaData {
}
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub struct GenerationId(u32);
#[repr(u16)]
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
pub enum FileReaderReadyState {
Empty = FileReaderConstants::EMPTY,
Loading = FileReaderConstants::LOADING,
Done = FileReaderConstants::DONE,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum FileReaderResult {
ArrayBuffer(Heap<JSVal>),
String(DOMString),
diff --git a/components/script/dom/gamepad.rs b/components/script/dom/gamepad.rs
index 47605b7794e..99f52cb203f 100644
--- a/components/script/dom/gamepad.rs
+++ b/components/script/dom/gamepad.rs
@@ -35,7 +35,7 @@ pub struct Gamepad {
axes: Heap<*mut JSObject>,
buttons: Dom<GamepadButtonList>,
pose: Option<Dom<VRPose>>,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
hand: WebVRGamepadHand,
display_id: u32
}
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index b226924bdef..0d3b9b47298 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -72,22 +72,22 @@ pub struct GlobalScope {
console_timers: DomRefCell<HashMap<DOMString, u64>>,
/// For providing instructions to an optional devtools server.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>,
/// For sending messages to the memory profiler.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
mem_profiler_chan: mem::ProfilerChan,
/// For sending messages to the time profiler.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
time_profiler_chan: time::ProfilerChan,
/// A handle for communicating messages to the constellation thread.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
script_to_constellation_chan: ScriptToConstellationChan,
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
scheduler_chan: IpcSender<TimerSchedulerMsg>,
/// <https://html.spec.whatwg.org/multipage/#in-error-reporting-mode>
@@ -108,7 +108,7 @@ pub struct GlobalScope {
/// same microtask queue.
///
/// <https://html.spec.whatwg.org/multipage/#microtask-queue>
- #[ignore_heap_size_of = "Rc<T> is hard"]
+ #[ignore_malloc_size_of = "Rc<T> is hard"]
microtask_queue: Rc<MicrotaskQueue>,
}
diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs
index 9b8910bc893..5d152ab93bb 100644
--- a/components/script/dom/headers.rs
+++ b/components/script/dom/headers.rs
@@ -21,12 +21,12 @@ use std::str;
pub struct Headers {
reflector_: Reflector,
guard: Cell<Guard>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
header_list: DomRefCell<HyperHeaders>
}
// https://fetch.spec.whatwg.org/#concept-headers-guard
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub enum Guard {
Immutable,
Request,
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index 70d16684bdd..feb9a3f1805 100755
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -30,7 +30,7 @@ use std::default::Default;
use style::element_state::*;
#[derive(Clone, Copy, JSTraceable, PartialEq)]
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
enum ButtonType {
Submit,
Reset,
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index 916fcce9ab6..3e7de52fd29 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -42,7 +42,7 @@ const DEFAULT_WIDTH: u32 = 300;
const DEFAULT_HEIGHT: u32 = 150;
#[must_root]
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub enum CanvasContext {
Context2d(Dom<CanvasRenderingContext2D>),
WebGL(Dom<WebGLRenderingContext>),
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs
index 19b756769bc..3da4503cb0e 100644
--- a/components/script/dom/htmlcollection.rs
+++ b/components/script/dom/htmlcollection.rs
@@ -26,7 +26,7 @@ pub trait CollectionFilter : JSTraceable {
// An optional u32, using maxint to represent None.
// It would be nicer just to use Option<u32> for this, but that would produce word
// alignment issues since Option<u32> uses 33 bits.
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf)]
struct OptionU32 {
bits: u32,
}
@@ -54,7 +54,7 @@ impl OptionU32 {
pub struct HTMLCollection {
reflector_: Reflector,
root: Dom<Node>,
- #[ignore_heap_size_of = "Contains a trait object; can't measure due to #6870"]
+ #[ignore_malloc_size_of = "Contains a trait object; can't measure due to #6870"]
filter: Box<CollectionFilter + 'static>,
// We cache the version of the root node and all its decendents,
// the length of the collection, and a cursor into the collection.
@@ -119,7 +119,7 @@ impl HTMLCollection {
-> DomRoot<HTMLCollection> {
// case 1
if qualified_name == local_name!("*") {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct AllFilter;
impl CollectionFilter for AllFilter {
fn filter(&self, _elem: &Element, _root: &Node) -> bool {
@@ -129,7 +129,7 @@ impl HTMLCollection {
return HTMLCollection::create(window, root, Box::new(AllFilter));
}
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct HtmlDocumentFilter {
qualified_name: LocalName,
ascii_lower_qualified_name: LocalName,
@@ -169,7 +169,7 @@ impl HTMLCollection {
}
pub fn by_qual_tag_name(window: &Window, root: &Node, qname: QualName) -> DomRoot<HTMLCollection> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct TagNameNSFilter {
qname: QualName
}
@@ -193,7 +193,7 @@ impl HTMLCollection {
pub fn by_atomic_class_name(window: &Window, root: &Node, classes: Vec<Atom>)
-> DomRoot<HTMLCollection> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct ClassNameFilter {
classes: Vec<Atom>
}
@@ -212,7 +212,7 @@ impl HTMLCollection {
}
pub fn children(window: &Window, root: &Node) -> DomRoot<HTMLCollection> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct ElementChildFilter;
impl CollectionFilter for ElementChildFilter {
fn filter(&self, elem: &Element, root: &Node) -> bool {
diff --git a/components/script/dom/htmldatalistelement.rs b/components/script/dom/htmldatalistelement.rs
index 2352fa99bcf..43e2eaa4928 100644
--- a/components/script/dom/htmldatalistelement.rs
+++ b/components/script/dom/htmldatalistelement.rs
@@ -43,7 +43,7 @@ impl HTMLDataListElement {
impl HTMLDataListElementMethods for HTMLDataListElement {
// https://html.spec.whatwg.org/multipage/#dom-datalist-options
fn Options(&self) -> DomRoot<HTMLCollection> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct HTMLDataListOptionsFilter;
impl CollectionFilter for HTMLDataListOptionsFilter {
fn filter(&self, elem: &Element, _root: &Node) -> bool {
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index bee8a41d4cd..81fc57dbce3 100644
--- a/components/script/dom/htmlfieldsetelement.rs
+++ b/components/script/dom/htmlfieldsetelement.rs
@@ -52,7 +52,7 @@ impl HTMLFieldSetElement {
impl HTMLFieldSetElementMethods for HTMLFieldSetElement {
// https://html.spec.whatwg.org/multipage/#dom-fieldset-elements
fn Elements(&self) -> DomRoot<HTMLCollection> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct ElementsFilter;
impl CollectionFilter for ElementsFilter {
fn filter<'a>(&self, elem: &'a Element, _root: &'a Node) -> bool {
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index ecca8998978..d99b101dd4a 100755
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -57,7 +57,7 @@ use style::attr::AttrValue;
use style::str::split_html_space_chars;
use task_source::TaskSource;
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub struct GenerationId(u32);
#[dom_struct]
@@ -166,7 +166,7 @@ impl HTMLFormElementMethods for HTMLFormElement {
// https://html.spec.whatwg.org/multipage/#dom-form-elements
fn Elements(&self) -> DomRoot<HTMLFormControlsCollection> {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct ElementsFilter {
form: DomRoot<HTMLFormElement>
}
@@ -235,13 +235,13 @@ impl HTMLFormElementMethods for HTMLFormElement {
}
}
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum SubmittedFrom {
FromForm,
NotFromForm
}
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub enum ResetFrom {
FromForm,
NotFromForm
@@ -674,14 +674,14 @@ impl HTMLFormElement {
}
}
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub enum FormDatumValue {
#[allow(dead_code)]
File(DomRoot<File>),
String(DOMString)
}
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub struct FormDatum {
pub ty: DOMString,
pub name: DOMString,
@@ -701,21 +701,21 @@ impl FormDatum {
}
}
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub enum FormEncType {
TextPlainEncoded,
UrlEncoded,
FormDataEncoded
}
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub enum FormMethod {
FormGet,
FormPost,
FormDialog
}
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
#[allow(dead_code)]
pub enum FormSubmittableElement {
ButtonElement(DomRoot<HTMLButtonElement>),
@@ -759,7 +759,7 @@ impl FormSubmittableElement {
}
}
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub enum FormSubmitter<'a> {
FormElement(&'a HTMLFormElement),
InputElement(&'a HTMLInputElement),
diff --git a/components/script/dom/htmlheadingelement.rs b/components/script/dom/htmlheadingelement.rs
index 8420def4a84..5dbf23fa157 100644
--- a/components/script/dom/htmlheadingelement.rs
+++ b/components/script/dom/htmlheadingelement.rs
@@ -10,7 +10,7 @@ use dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum HeadingLevel {
Heading1,
Heading2,
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 08d67b9eff3..697e32636b1 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -56,7 +56,7 @@ use style::attr::{AttrValue, LengthOrPercentageOrAuto};
use task_source::TaskSource;
bitflags! {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
flags SandboxAllowance: u8 {
const ALLOW_NOTHING = 0x00,
const ALLOW_SAME_ORIGIN = 0x01,
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 6f33849ad80..498930624c4 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -85,7 +85,7 @@ pub struct Descriptor {
pub den: Option<f64>,
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf)]
#[allow(dead_code)]
enum State {
Unavailable,
@@ -100,19 +100,19 @@ pub struct Size {
pub length: Length,
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf)]
enum ImageRequestPhase {
Pending,
Current
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
struct ImageRequest {
state: State,
parsed_url: Option<ServoUrl>,
source_url: Option<DOMString>,
blocker: Option<LoadBlocker>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
image: Option<Arc<Image>>,
metadata: Option<ImageMetadata>,
final_url: Option<ServoUrl>,
@@ -695,7 +695,7 @@ impl HTMLImageElement {
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum ImageElementMicrotask {
StableStateUpdateImageDataTask {
elem: DomRoot<HTMLImageElement>,
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index ad82972d0e3..658c1917212 100755
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -62,7 +62,7 @@ const PASSWORD_REPLACEMENT_CHAR: char = '●';
#[derive(Clone, Copy, JSTraceable, PartialEq)]
#[allow(dead_code)]
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
enum InputType {
InputSubmit,
InputReset,
@@ -93,7 +93,7 @@ pub struct HTMLInputElement {
size: Cell<u32>,
maxlength: Cell<i32>,
minlength: Cell<i32>,
- #[ignore_heap_size_of = "#7193"]
+ #[ignore_malloc_size_of = "#7193"]
textinput: DomRefCell<TextInput<ScriptToConstellationChan>>,
activation_state: DomRefCell<InputActivationState>,
// https://html.spec.whatwg.org/multipage/#concept-input-value-dirty-flag
@@ -105,7 +105,7 @@ pub struct HTMLInputElement {
#[derive(JSTraceable)]
#[must_root]
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
struct InputActivationState {
indeterminate: bool,
checked: bool,
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs
index 2eb346a00c7..03353d70bc4 100644
--- a/components/script/dom/htmllinkelement.rs
+++ b/components/script/dom/htmllinkelement.rs
@@ -38,7 +38,7 @@ use style::stylesheets::{CssRuleType, Stylesheet};
use style_traits::PARSING_MODE_DEFAULT;
use stylesheet_loader::{StylesheetLoader, StylesheetContextSource, StylesheetOwner};
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub struct RequestGenerationId(u32);
impl RequestGenerationId {
@@ -51,7 +51,7 @@ impl RequestGenerationId {
pub struct HTMLLinkElement {
htmlelement: HTMLElement,
rel_list: MutNullableDom<DOMTokenList>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
stylesheet: DomRefCell<Option<Arc<Stylesheet>>>,
cssom_stylesheet: MutNullableDom<CSSStyleSheet>,
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index f264bde0206..daddcee4377 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -77,15 +77,15 @@ pub struct HTMLMediaElement {
/// <https://html.spec.whatwg.org/multipage/#delaying-the-load-event-flag>
delaying_the_load_event_flag: DomRefCell<Option<LoadBlocker>>,
/// <https://html.spec.whatwg.org/multipage/#list-of-pending-play-promises>
- #[ignore_heap_size_of = "promises are hard"]
+ #[ignore_malloc_size_of = "promises are hard"]
pending_play_promises: DomRefCell<Vec<Rc<Promise>>>,
/// Play promises which are soon to be fulfilled by a queued task.
- #[ignore_heap_size_of = "promises are hard"]
+ #[ignore_malloc_size_of = "promises are hard"]
in_flight_play_promises_queue: DomRefCell<VecDeque<(Box<[Rc<Promise>]>, ErrorResult)>>,
}
/// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate>
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
#[repr(u8)]
pub enum NetworkState {
Empty = HTMLMediaElementConstants::NETWORK_EMPTY as u8,
@@ -95,7 +95,7 @@ pub enum NetworkState {
}
/// <https://html.spec.whatwg.org/multipage/#dom-media-readystate>
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq, PartialOrd)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq, PartialOrd)]
#[repr(u8)]
enum ReadyState {
HaveNothing = HTMLMediaElementConstants::HAVE_NOTHING as u8,
@@ -940,7 +940,7 @@ impl VirtualMethods for HTMLMediaElement {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum MediaElementMicrotask {
ResourceSelectionTask {
elem: DomRoot<HTMLMediaElement>,
diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs
index 56f31be0964..f27161036e7 100644
--- a/components/script/dom/htmlmetaelement.rs
+++ b/components/script/dom/htmlmetaelement.rs
@@ -32,7 +32,7 @@ use style::stylesheets::{Stylesheet, StylesheetContents, CssRule, CssRules, Orig
#[dom_struct]
pub struct HTMLMetaElement {
htmlelement: HTMLElement,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
stylesheet: DomRefCell<Option<Arc<Stylesheet>>>,
cssom_stylesheet: MutNullableDom<CSSStyleSheet>,
}
diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs
index ce45e089fdc..d78e102d1da 100755
--- a/components/script/dom/htmlobjectelement.rs
+++ b/components/script/dom/htmlobjectelement.rs
@@ -26,7 +26,7 @@ use std::default::Default;
#[dom_struct]
pub struct HTMLObjectElement {
htmlelement: HTMLElement,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
image: DomRefCell<Option<Arc<Image>>>,
form_owner: MutNullableDom<HTMLFormElement>,
}
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 1a21ce28a1c..31871104687 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -112,7 +112,7 @@ static SCRIPT_JS_MIMES: StaticStringVec = &[
"text/x-javascript",
];
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct ClassicScript {
text: DOMString,
url: ServoUrl,
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 75dea8d461e..3423db303e4 100755
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -37,7 +37,7 @@ use std::iter;
use style::attr::AttrValue;
use style::element_state::*;
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct OptionsFilter;
impl CollectionFilter for OptionsFilter {
fn filter<'a>(&self, elem: &'a Element, root: &'a Node) -> bool {
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index af01adfd9c5..ef25b52dbb3 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -31,7 +31,7 @@ use stylesheet_loader::{StylesheetLoader, StylesheetOwner};
#[dom_struct]
pub struct HTMLStyleElement {
htmlelement: HTMLElement,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
stylesheet: DomRefCell<Option<Arc<Stylesheet>>>,
cssom_stylesheet: MutNullableDom<CSSStyleSheet>,
/// <https://html.spec.whatwg.org/multipage/#a-style-sheet-that-is-blocking-scripts>
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs
index cda13a6496d..c475c3eee1d 100644
--- a/components/script/dom/htmltableelement.rs
+++ b/components/script/dom/htmltableelement.rs
@@ -36,7 +36,7 @@ pub struct HTMLTableElement {
}
#[allow(unrooted_must_root)]
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct TableRowFilter {
sections: Vec<Dom<Node>>,
}
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index 0825bb70302..c15553faa75 100755
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -38,7 +38,7 @@ use textinput::{KeyReaction, Lines, SelectionDirection, TextInput};
#[dom_struct]
pub struct HTMLTextAreaElement {
htmlelement: HTMLElement,
- #[ignore_heap_size_of = "#7193"]
+ #[ignore_malloc_size_of = "#7193"]
textinput: DomRefCell<TextInput<ScriptToConstellationChan>>,
placeholder: DomRefCell<DOMString>,
// https://html.spec.whatwg.org/multipage/#concept-textarea-dirty
diff --git a/components/script/dom/keyboardevent.rs b/components/script/dom/keyboardevent.rs
index 237876ecdda..2d2a2391372 100644
--- a/components/script/dom/keyboardevent.rs
+++ b/components/script/dom/keyboardevent.rs
@@ -742,7 +742,7 @@ fn key_keycode(key: Key) -> u32 {
}
}
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub struct KeyEventProperties {
pub key_string: Cow<'static, str>,
pub code: &'static str,
diff --git a/components/script/dom/medialist.rs b/components/script/dom/medialist.rs
index df59886226d..30d6ad9ed34 100644
--- a/components/script/dom/medialist.rs
+++ b/components/script/dom/medialist.rs
@@ -24,7 +24,7 @@ use style_traits::{PARSING_MODE_DEFAULT, ToCss};
pub struct MediaList {
reflector_: Reflector,
parent_stylesheet: Dom<CSSStyleSheet>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
media_queries: Arc<Locked<StyleMediaList>>,
}
diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs
index 6252f9c5098..e89e7d4d744 100644
--- a/components/script/dom/mediaquerylist.rs
+++ b/components/script/dom/mediaquerylist.rs
@@ -118,7 +118,7 @@ impl MediaQueryListMethods for MediaQueryList {
event_handler!(change, GetOnchange, SetOnchange);
}
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub struct WeakMediaQueryListVec {
cell: DomRefCell<WeakRefVec<MediaQueryList>>,
}
diff --git a/components/script/dom/mutationobserver.rs b/components/script/dom/mutationobserver.rs
index 9f8ba823bd1..5aee5adecd9 100644
--- a/components/script/dom/mutationobserver.rs
+++ b/components/script/dom/mutationobserver.rs
@@ -24,7 +24,7 @@ use std::rc::Rc;
#[dom_struct]
pub struct MutationObserver {
reflector_: Reflector,
- #[ignore_heap_size_of = "can't measure Rc values"]
+ #[ignore_malloc_size_of = "can't measure Rc values"]
callback: Rc<MutationCallback>,
record_queue: DomRefCell<Vec<DomRoot<MutationRecord>>>,
}
@@ -35,13 +35,13 @@ pub enum Mutation<'a> {
prev: Option<&'a Node>, next: Option<&'a Node> },
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct RegisteredObserver {
observer: DomRoot<MutationObserver>,
options: ObserverOptions,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct ObserverOptions {
attribute_old_value: bool,
attributes: bool,
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 52641c37474..0186d9e6a67 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -56,10 +56,10 @@ use dom::virtualmethods::{VirtualMethods, vtable_for};
use dom::window::Window;
use dom_struct::dom_struct;
use euclid::{Point2D, Vector2D, Rect, Size2D};
-use heapsize::{HeapSizeOf, heap_size_of};
use html5ever::{Prefix, Namespace, QualName};
use js::jsapi::{JSContext, JSObject, JSRuntime};
use libc::{self, c_void, uintptr_t};
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use msg::constellation_msg::{BrowsingContextId, PipelineId};
use ref_slice::ref_slice;
use script_layout_interface::{HTMLCanvasData, OpaqueStyleAndLayoutData, SVGSVGData};
@@ -147,7 +147,7 @@ pub struct Node {
bitflags! {
#[doc = "Flags for node items."]
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
pub flags NodeFlags: u16 {
#[doc = "Specifies whether this node is in a document."]
const IS_IN_DOC = 1 << 0,
@@ -200,7 +200,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(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
enum SuppressObserver {
Suppressed,
Unsuppressed
@@ -1368,7 +1368,7 @@ impl Iterator for TreeIterator {
}
/// Specifies whether children must be recursively cloned or not.
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum CloneChildrenFlag {
CloneChildren,
DoNotCloneChildren
@@ -2531,7 +2531,7 @@ impl VirtualMethods for Node {
}
/// A summary of the changes that happened to a node.
-#[derive(Clone, Copy, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
pub enum NodeDamage {
/// The node's `style` attribute changed.
NodeStyleDamaged,
@@ -2704,11 +2704,11 @@ struct UniqueId {
unsafe_no_jsmanaged_fields!(UniqueId);
-impl HeapSizeOf for UniqueId {
+impl MallocSizeOf for UniqueId {
#[allow(unsafe_code)]
- fn heap_size_of_children(&self) -> usize {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
if let &Some(ref uuid) = unsafe { &*self.cell.get() } {
- unsafe { heap_size_of(&** uuid as *const Uuid as *const _) }
+ unsafe { ops.malloc_size_of(&** uuid) }
} else {
0
}
diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs
index 688f46e7df7..5897c4075c9 100644
--- a/components/script/dom/nodeiterator.rs
+++ b/components/script/dom/nodeiterator.rs
@@ -21,11 +21,11 @@ use std::rc::Rc;
pub struct NodeIterator {
reflector_: Reflector,
root_node: Dom<Node>,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
reference_node: MutDom<Node>,
pointer_before_reference_node: Cell<bool>,
what_to_show: u32,
- #[ignore_heap_size_of = "Can't measure due to #6870"]
+ #[ignore_malloc_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 86d8a2a951d..24165267480 100644
--- a/components/script/dom/nodelist.rs
+++ b/components/script/dom/nodelist.rs
@@ -12,7 +12,7 @@ use dom::window::Window;
use dom_struct::dom_struct;
use std::cell::Cell;
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub enum NodeListType {
Simple(Vec<Dom<Node>>),
@@ -109,11 +109,11 @@ impl NodeList {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct ChildrenList {
node: Dom<Node>,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
last_visited: MutNullableDom<Node>,
last_index: Cell<u32>,
}
diff --git a/components/script/dom/paintworkletglobalscope.rs b/components/script/dom/paintworkletglobalscope.rs
index 8c74f86b7a7..61527c8dd9f 100644
--- a/components/script/dom/paintworkletglobalscope.rs
+++ b/components/script/dom/paintworkletglobalscope.rs
@@ -68,7 +68,7 @@ pub struct PaintWorkletGlobalScope {
/// The worklet global for this object
worklet_global: WorkletGlobalScope,
/// The image cache
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
image_cache: Arc<ImageCache>,
/// <https://drafts.css-houdini.org/css-paint-api/#paint-definitions>
paint_definitions: DomRefCell<HashMap<Atom, Box<PaintDefinition>>>,
@@ -464,7 +464,7 @@ pub enum PaintWorkletTask {
/// <https://drafts.css-houdini.org/css-paint-api/#paint-definition>
/// This type is dangerous, because it contains uboxed `Heap<JSVal>` values,
/// which can't be moved.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
struct PaintDefinition {
class_constructor: Heap<JSVal>,
diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs
index cb773c06e22..f491fbb7654 100644
--- a/components/script/dom/performance.rs
+++ b/components/script/dom/performance.rs
@@ -50,7 +50,7 @@ const INVALID_ENTRY_NAMES: &'static [&'static str] = &[
/// Implementation of a list of PerformanceEntry items shared by the
/// Performance and PerformanceObserverEntryList interfaces implementations.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct PerformanceEntryList {
entries: DOMPerformanceEntryList,
}
@@ -101,7 +101,7 @@ impl IntoIterator for PerformanceEntryList {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct PerformanceObserver {
observer: DomRoot<DOMPerformanceObserver>,
entry_types: Vec<DOMString>,
diff --git a/components/script/dom/performanceobserver.rs b/components/script/dom/performanceobserver.rs
index 06c243e7818..96ad99edf92 100644
--- a/components/script/dom/performanceobserver.rs
+++ b/components/script/dom/performanceobserver.rs
@@ -32,7 +32,7 @@ const VALID_ENTRY_TYPES: &'static [&'static str] = &[
#[dom_struct]
pub struct PerformanceObserver {
reflector_: Reflector,
- #[ignore_heap_size_of = "can't measure Rc values"]
+ #[ignore_malloc_size_of = "can't measure Rc values"]
callback: Rc<PerformanceObserverCallback>,
entries: DomRefCell<DOMPerformanceEntryList>,
}
diff --git a/components/script/dom/popstateevent.rs b/components/script/dom/popstateevent.rs
index 218ed5d3af6..d485499cea5 100644
--- a/components/script/dom/popstateevent.rs
+++ b/components/script/dom/popstateevent.rs
@@ -22,7 +22,7 @@ use servo_atoms::Atom;
#[dom_struct]
pub struct PopStateEvent {
event: Event,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
state: Heap<JSVal>,
}
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs
index 51b7c1763af..ad8ee2adfeb 100644
--- a/components/script/dom/promise.rs
+++ b/components/script/dom/promise.rs
@@ -37,7 +37,7 @@ pub struct Promise {
/// the SpiderMonkey GC, an explicit root for the reflector is stored while any
/// native instance exists. This ensures that the reflector will never be GCed
/// while native code could still interact with its native representation.
- #[ignore_heap_size_of = "SM handles JS values"]
+ #[ignore_malloc_size_of = "SM handles JS values"]
permanent_js_root: Heap<JSVal>,
}
diff --git a/components/script/dom/promisenativehandler.rs b/components/script/dom/promisenativehandler.rs
index 4ed9b4b30b4..d87589ccaa8 100644
--- a/components/script/dom/promisenativehandler.rs
+++ b/components/script/dom/promisenativehandler.rs
@@ -8,10 +8,10 @@ use dom::bindings::root::DomRoot;
use dom::bindings::trace::JSTraceable;
use dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
-use heapsize::HeapSizeOf;
use js::jsapi::{JSContext, HandleValue};
+use malloc_size_of::MallocSizeOf;
-pub trait Callback: JSTraceable + HeapSizeOf {
+pub trait Callback: JSTraceable + MallocSizeOf {
fn callback(&self, cx: *mut JSContext, v: HandleValue);
}
diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs
index c4699c7f8ff..f43c9e1922c 100644
--- a/components/script/dom/range.rs
+++ b/components/script/dom/range.rs
@@ -27,8 +27,8 @@ use dom::node::{Node, UnbindContext};
use dom::text::Text;
use dom::window::Window;
use dom_struct::dom_struct;
-use heapsize::HeapSizeOf;
use js::jsapi::JSTracer;
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use std::cell::{Cell, UnsafeCell};
use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
@@ -933,7 +933,7 @@ impl RangeMethods for Range {
}
}
-#[derive(DenyPublicFields, HeapSizeOf, JSTraceable)]
+#[derive(DenyPublicFields, JSTraceable, MallocSizeOf)]
#[must_root]
pub struct BoundaryPoint {
node: MutDom<Node>,
@@ -1251,9 +1251,9 @@ impl WeakRangeVec {
}
#[allow(unsafe_code)]
-impl HeapSizeOf for WeakRangeVec {
- fn heap_size_of_children(&self) -> usize {
- unsafe { (*self.cell.get()).heap_size_of_children() }
+impl MallocSizeOf for WeakRangeVec {
+ fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
+ unsafe { (*self.cell.get()).size_of(ops) }
}
}
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs
index a4bfbf96f83..a018467b46d 100644
--- a/components/script/dom/request.rs
+++ b/components/script/dom/request.rs
@@ -48,7 +48,7 @@ pub struct Request {
body_used: Cell<bool>,
headers: MutNullableDom<Headers>,
mime_type: DomRefCell<Vec<u8>>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
body_promise: DomRefCell<Option<(Rc<Promise>, BodyType)>>,
}
diff --git a/components/script/dom/response.rs b/components/script/dom/response.rs
index ee4276e711a..e4af7f48187 100644
--- a/components/script/dom/response.rs
+++ b/components/script/dom/response.rs
@@ -36,7 +36,7 @@ pub struct Response {
mime_type: DomRefCell<Vec<u8>>,
body_used: Cell<bool>,
/// `None` can be considered a StatusCode of `0`.
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
status: DomRefCell<Option<StatusCode>>,
raw_status: DomRefCell<Option<(u16, Vec<u8>)>>,
response_type: DomRefCell<DOMResponseType>,
@@ -44,7 +44,7 @@ pub struct Response {
url_list: DomRefCell<Vec<ServoUrl>>,
// For now use the existing NetTraitsResponseBody enum
body: DomRefCell<NetTraitsResponseBody>,
- #[ignore_heap_size_of = "Rc"]
+ #[ignore_malloc_size_of = "Rc"]
body_promise: DomRefCell<Option<(Rc<Promise>, BodyType)>>,
}
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index bd9de0db9f5..9cffa2c341d 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -71,13 +71,13 @@ impl ScriptChan for ServiceWorkerChan {
#[dom_struct]
pub struct ServiceWorkerGlobalScope {
workerglobalscope: WorkerGlobalScope,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
receiver: Receiver<ServiceWorkerScriptMsg>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
own_sender: Sender<ServiceWorkerScriptMsg>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
timer_event_port: Receiver<()>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
swmanager_sender: IpcSender<ServiceWorkerMsg>,
scope_url: ServoUrl,
}
diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs
index 2c4e71047b5..bbfa1da0a93 100644
--- a/components/script/dom/servoparser/async_html.rs
+++ b/components/script/dom/servoparser/async_html.rs
@@ -38,25 +38,25 @@ use style::context::QuirksMode as ServoQuirksMode;
type ParseNodeId = usize;
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub struct ParseNode {
id: ParseNodeId,
qual_name: Option<QualName>,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
enum NodeOrText {
Node(ParseNode),
Text(String),
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct Attribute {
name: QualName,
value: String,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
enum ParseOperation {
GetTemplateContents { target: ParseNodeId, contents: ParseNodeId },
@@ -99,21 +99,21 @@ enum ParseOperation {
Pop { node: ParseNodeId },
SetQuirksMode {
- #[ignore_heap_size_of = "Defined in style"]
+ #[ignore_malloc_size_of = "Defined in style"]
mode: ServoQuirksMode
},
}
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
enum ToTokenizerMsg {
// From HtmlTokenizer
TokenizerResultDone {
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
updated_input: VecDeque<SendTendril<UTF8>>
},
TokenizerResultScript {
script: ParseNode,
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
updated_input: VecDeque<SendTendril<UTF8>>
},
End, // Sent to Tokenizer to signify HtmlTokenizer's end method has returned
@@ -122,10 +122,10 @@ enum ToTokenizerMsg {
ProcessOperation(ParseOperation),
}
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
enum ToHtmlTokenizerMsg {
Feed {
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
input: VecDeque<SendTendril<UTF8>>
},
End,
@@ -165,15 +165,15 @@ fn create_buffer_queue(mut buffers: VecDeque<SendTendril<UTF8>>) -> BufferQueue
// | | | |________| |
// |_____________| |_______________|
//
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct Tokenizer {
document: Dom<Document>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
receiver: Receiver<ToTokenizerMsg>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
html_tokenizer_sender: Sender<ToHtmlTokenizerMsg>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
nodes: HashMap<ParseNodeId, Dom<Node>>,
url: ServoUrl,
}
@@ -495,7 +495,7 @@ fn run(sink: Sink,
}
}
-#[derive(Default, HeapSizeOf, JSTraceable)]
+#[derive(Default, JSTraceable, MallocSizeOf)]
struct ParseNodeData {
contents: Option<ParseNode>,
is_integration_point: bool,
diff --git a/components/script/dom/servoparser/html.rs b/components/script/dom/servoparser/html.rs
index f6857fcd198..53dcc3fc7c6 100644
--- a/components/script/dom/servoparser/html.rs
+++ b/components/script/dom/servoparser/html.rs
@@ -28,10 +28,10 @@ use js::jsapi::JSTracer;
use servo_url::ServoUrl;
use std::io;
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct Tokenizer {
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
inner: HtmlTokenizer<TreeBuilder<Dom<Node>, Sink>>,
}
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs
index f5f7943693e..08310326716 100644
--- a/components/script/dom/servoparser/mod.rs
+++ b/components/script/dom/servoparser/mod.rs
@@ -74,13 +74,13 @@ pub struct ServoParser {
/// The document associated with this parser.
document: Dom<Document>,
/// Input received from network.
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
network_input: DomRefCell<BufferQueue>,
/// Part of an UTF-8 code point spanning input chunks
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
incomplete_utf8: DomRefCell<Option<IncompleteUtf8>>,
/// Input received from script. Used only to support document.write().
- #[ignore_heap_size_of = "Defined in html5ever"]
+ #[ignore_malloc_size_of = "Defined in html5ever"]
script_input: DomRefCell<BufferQueue>,
/// The tokenizer of this parser.
tokenizer: DomRefCell<Tokenizer>,
@@ -493,13 +493,13 @@ impl<I> Iterator for FragmentParsingResult<I>
}
}
-#[derive(HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(JSTraceable, MallocSizeOf, PartialEq)]
enum ParserKind {
Normal,
ScriptCreated,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
enum Tokenizer {
Html(self::html::Tokenizer),
@@ -742,7 +742,7 @@ fn insert(parent: &Node, reference_child: Option<&Node>, child: NodeOrText<Dom<N
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct Sink {
base_url: ServoUrl,
diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs
index fe74d627349..d34792b56c3 100644
--- a/components/script/dom/servoparser/xml.rs
+++ b/components/script/dom/servoparser/xml.rs
@@ -16,10 +16,10 @@ use xml5ever::buffer_queue::BufferQueue;
use xml5ever::tokenizer::XmlTokenizer;
use xml5ever::tree_builder::{Tracer as XmlTracer, XmlTreeBuilder};
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[must_root]
pub struct Tokenizer {
- #[ignore_heap_size_of = "Defined in xml5ever"]
+ #[ignore_malloc_size_of = "Defined in xml5ever"]
inner: XmlTokenizer<XmlTreeBuilder<Dom<Node>, Sink>>,
}
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index 62738fcf379..ce8bce56878 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -723,9 +723,9 @@ impl TestBindingMethods for TestBinding {
p.append_native_handler(&handler);
return p;
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
struct SimpleHandler {
- #[ignore_heap_size_of = "Rc has unclear ownership semantics"]
+ #[ignore_malloc_size_of = "Rc has unclear ownership semantics"]
handler: Rc<SimpleCallback>,
}
impl SimpleHandler {
@@ -804,9 +804,9 @@ impl TestBinding {
pub unsafe fn condition_unsatisfied(_: *mut JSContext, _: HandleObject) -> bool { false }
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct TestBindingCallback {
- #[ignore_heap_size_of = "unclear ownership semantics"]
+ #[ignore_malloc_size_of = "unclear ownership semantics"]
promise: TrustedPromise,
value: DOMString,
}
diff --git a/components/script/dom/textdecoder.rs b/components/script/dom/textdecoder.rs
index 26ba8047c6b..2bfe574c380 100644
--- a/components/script/dom/textdecoder.rs
+++ b/components/script/dom/textdecoder.rs
@@ -18,7 +18,7 @@ use std::borrow::ToOwned;
#[dom_struct]
pub struct TextDecoder {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in rust-encoding"]
+ #[ignore_malloc_size_of = "Defined in rust-encoding"]
encoding: EncodingRef,
fatal: bool,
}
diff --git a/components/script/dom/treewalker.rs b/components/script/dom/treewalker.rs
index c1d60c5a9f6..de5219a608f 100644
--- a/components/script/dom/treewalker.rs
+++ b/components/script/dom/treewalker.rs
@@ -23,7 +23,7 @@ pub struct TreeWalker {
root_node: Dom<Node>,
current_node: MutDom<Node>,
what_to_show: u32,
- #[ignore_heap_size_of = "function pointers and Rc<T> are hard"]
+ #[ignore_malloc_size_of = "function pointers and Rc<T> are hard"]
filter: Filter
}
diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs
index d00189156f0..d98dcc438bf 100644
--- a/components/script/dom/urlhelper.rs
+++ b/components/script/dom/urlhelper.rs
@@ -7,7 +7,7 @@ use servo_url::ServoUrl;
use std::borrow::ToOwned;
use url::quirks;
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub struct UrlHelper;
impl UrlHelper {
diff --git a/components/script/dom/validitystate.rs b/components/script/dom/validitystate.rs
index 3357c29a175..0178764c3d0 100755
--- a/components/script/dom/validitystate.rs
+++ b/components/script/dom/validitystate.rs
@@ -11,7 +11,7 @@ use dom::window::Window;
use dom_struct::dom_struct;
// https://html.spec.whatwg.org/multipage/#validity-states
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
#[allow(dead_code)]
pub enum ValidityStatus {
ValueMissing,
diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs
index 4f012856c2c..d63e0f514e0 100644
--- a/components/script/dom/vrdisplay.rs
+++ b/components/script/dom/vrdisplay.rs
@@ -46,7 +46,7 @@ use webvr_traits::{WebVRDisplayData, WebVRDisplayEvent, WebVRFrameData, WebVRLay
#[dom_struct]
pub struct VRDisplay {
eventtarget: EventTarget,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
display: DomRefCell<WebVRDisplayData>,
depth_near: Cell<f64>,
depth_far: Cell<f64>,
@@ -55,19 +55,19 @@ pub struct VRDisplay {
right_eye_params: MutDom<VREyeParameters>,
capabilities: MutDom<VRDisplayCapabilities>,
stage_params: MutNullableDom<VRStageParameters>,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
frame_data: DomRefCell<WebVRFrameData>,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
layer: DomRefCell<WebVRLayer>,
layer_ctx: MutNullableDom<WebGLRenderingContext>,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
next_raf_id: Cell<u32>,
/// List of request animation frame callbacks
- #[ignore_heap_size_of = "closures are hard"]
+ #[ignore_malloc_size_of = "closures are hard"]
raf_callback_list: DomRefCell<Vec<(u32, Option<Rc<FrameRequestCallback>>)>>,
// Compositor VRFrameData synchonization
frame_data_status: Cell<VRFrameDataStatus>,
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "closures are hard"]
frame_data_receiver: DomRefCell<Option<WebGLReceiver<Result<Vec<u8>, ()>>>>,
running_display_raf: Cell<bool>,
paused: Cell<bool>,
@@ -78,7 +78,7 @@ unsafe_no_jsmanaged_fields!(WebVRDisplayData);
unsafe_no_jsmanaged_fields!(WebVRFrameData);
unsafe_no_jsmanaged_fields!(WebVRLayer);
-#[derive(Clone, Copy, Eq, HeapSizeOf, PartialEq)]
+#[derive(Clone, Copy, Eq, MallocSizeOf, PartialEq)]
enum VRFrameDataStatus {
Waiting,
Synced,
diff --git a/components/script/dom/vrdisplaycapabilities.rs b/components/script/dom/vrdisplaycapabilities.rs
index 9721de0e1b6..ef1f1d7f275 100644
--- a/components/script/dom/vrdisplaycapabilities.rs
+++ b/components/script/dom/vrdisplaycapabilities.rs
@@ -14,7 +14,7 @@ use webvr_traits::WebVRDisplayCapabilities;
#[dom_struct]
pub struct VRDisplayCapabilities {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
capabilities: DomRefCell<WebVRDisplayCapabilities>
}
diff --git a/components/script/dom/vreyeparameters.rs b/components/script/dom/vreyeparameters.rs
index f29d0230de5..b573d3d96b8 100644
--- a/components/script/dom/vreyeparameters.rs
+++ b/components/script/dom/vreyeparameters.rs
@@ -20,7 +20,7 @@ use webvr_traits::WebVREyeParameters;
#[dom_struct]
pub struct VREyeParameters {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
parameters: DomRefCell<WebVREyeParameters>,
offset: Heap<*mut JSObject>,
fov: Dom<VRFieldOfView>,
diff --git a/components/script/dom/vrfieldofview.rs b/components/script/dom/vrfieldofview.rs
index 3bcb80b3e2c..eb798bafc8a 100644
--- a/components/script/dom/vrfieldofview.rs
+++ b/components/script/dom/vrfieldofview.rs
@@ -15,7 +15,7 @@ use webvr_traits::WebVRFieldOfView;
#[dom_struct]
pub struct VRFieldOfView {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
fov: DomRefCell<WebVRFieldOfView>
}
diff --git a/components/script/dom/vrstageparameters.rs b/components/script/dom/vrstageparameters.rs
index a2a185fd6cc..fa545621001 100644
--- a/components/script/dom/vrstageparameters.rs
+++ b/components/script/dom/vrstageparameters.rs
@@ -19,7 +19,7 @@ use webvr_traits::WebVRStageParameters;
#[dom_struct]
pub struct VRStageParameters {
reflector_: Reflector,
- #[ignore_heap_size_of = "Defined in rust-webvr"]
+ #[ignore_malloc_size_of = "Defined in rust-webvr"]
parameters: DomRefCell<WebVRStageParameters>,
transform: Heap<*mut JSObject>,
}
diff --git a/components/script/dom/webgl_extensions/extensions.rs b/components/script/dom/webgl_extensions/extensions.rs
index 9b022ac7def..85559612471 100644
--- a/components/script/dom/webgl_extensions/extensions.rs
+++ b/components/script/dom/webgl_extensions/extensions.rs
@@ -13,9 +13,9 @@ use dom::bindings::trace::JSTraceable;
use dom::webglrenderingcontext::WebGLRenderingContext;
use fnv::{FnvHashMap, FnvHashSet};
use gleam::gl::GLenum;
-use heapsize::HeapSizeOf;
use js::jsapi::JSContext;
use js::jsval::JSVal;
+use malloc_size_of::MallocSizeOf;
use ref_filter_map::ref_filter_map;
use std::cell::Ref;
use std::collections::HashMap;
@@ -45,7 +45,7 @@ const DEFAULT_DISABLED_GET_PARAMETER_NAMES: [GLenum; 1] = [
];
/// WebGL features that are enabled/disabled by WebGL Extensions.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct WebGLExtensionFeatures {
gl_extensions: FnvHashSet<String>,
disabled_tex_types: FnvHashSet<GLenum>,
@@ -74,7 +74,7 @@ impl Default for WebGLExtensionFeatures {
/// Handles the list of implemented, supported and enabled WebGL extensions.
#[must_root]
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct WebGLExtensions {
extensions: DomRefCell<HashMap<String, Box<WebGLExtensionWrapper>>>,
features: DomRefCell<WebGLExtensionFeatures>,
@@ -97,7 +97,7 @@ impl WebGLExtensions {
}
}
- pub fn register<T:'static + WebGLExtension + JSTraceable + HeapSizeOf>(&self) {
+ pub fn register<T:'static + WebGLExtension + JSTraceable + MallocSizeOf>(&self) {
let name = T::name().to_uppercase();
self.extensions.borrow_mut().insert(name, Box::new(TypedWebGLExtensionWrapper::<T>::new()));
}
@@ -122,7 +122,7 @@ impl WebGLExtensions {
pub fn is_enabled<T>(&self) -> bool
where
- T: 'static + WebGLExtension + JSTraceable + HeapSizeOf
+ T: 'static + WebGLExtension + JSTraceable + MallocSizeOf
{
let name = T::name().to_uppercase();
self.extensions.borrow().get(&name).map_or(false, |ext| { ext.is_enabled() })
@@ -130,7 +130,7 @@ impl WebGLExtensions {
pub fn get_dom_object<T>(&self) -> Option<DomRoot<T::Extension>>
where
- T: 'static + WebGLExtension + JSTraceable + HeapSizeOf
+ T: 'static + WebGLExtension + JSTraceable + MallocSizeOf
{
let name = T::name().to_uppercase();
self.extensions.borrow().get(&name).and_then(|extension| {
@@ -224,15 +224,15 @@ impl WebGLExtensions {
}
// Helper structs
-#[derive(Eq, Hash, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Eq, Hash, JSTraceable, MallocSizeOf, PartialEq)]
struct TexFormatType(u32, u32);
type WebGLQueryParameterFunc = Fn(*mut JSContext, &WebGLRenderingContext)
-> Result<JSVal, WebGLError>;
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
struct WebGLQueryParameterHandler {
- #[ignore_heap_size_of = "Closures are hard"]
+ #[ignore_malloc_size_of = "Closures are hard"]
func: Box<WebGLQueryParameterFunc>
}
diff --git a/components/script/dom/webgl_extensions/wrapper.rs b/components/script/dom/webgl_extensions/wrapper.rs
index 49d698bf14c..1c10e692f51 100644
--- a/components/script/dom/webgl_extensions/wrapper.rs
+++ b/components/script/dom/webgl_extensions/wrapper.rs
@@ -7,13 +7,13 @@ use dom::bindings::reflector::DomObject;
use dom::bindings::root::{DomRoot, MutNullableDom};
use dom::bindings::trace::JSTraceable;
use dom::webglrenderingcontext::WebGLRenderingContext;
-use heapsize::HeapSizeOf;
+use malloc_size_of::MallocSizeOf;
use std::any::Any;
use super::{WebGLExtension, WebGLExtensions};
/// Trait used internally by WebGLExtensions to store and
/// handle the different WebGL extensions in a common list.
-pub trait WebGLExtensionWrapper: JSTraceable + HeapSizeOf {
+pub trait WebGLExtensionWrapper: JSTraceable + MallocSizeOf {
fn instance_or_init(&self,
ctx: &WebGLRenderingContext,
ext: &WebGLExtensions)
@@ -26,7 +26,7 @@ pub trait WebGLExtensionWrapper: JSTraceable + HeapSizeOf {
}
#[must_root]
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct TypedWebGLExtensionWrapper<T: WebGLExtension> {
extension: MutNullableDom<T::Extension>
}
@@ -42,7 +42,7 @@ impl<T: WebGLExtension> TypedWebGLExtensionWrapper<T> {
}
impl<T> WebGLExtensionWrapper for TypedWebGLExtensionWrapper<T>
- where T: WebGLExtension + JSTraceable + HeapSizeOf + 'static {
+ where T: WebGLExtension + JSTraceable + MallocSizeOf + 'static {
#[allow(unsafe_code)]
fn instance_or_init(&self,
ctx: &WebGLRenderingContext,
@@ -82,7 +82,9 @@ impl<T> WebGLExtensionWrapper for TypedWebGLExtensionWrapper<T>
}
}
-impl<T> TypedWebGLExtensionWrapper<T> where T: WebGLExtension + JSTraceable + HeapSizeOf + 'static {
+impl<T> TypedWebGLExtensionWrapper<T>
+ where T: WebGLExtension + JSTraceable + MallocSizeOf + 'static
+{
pub fn dom_object(&self) -> Option<DomRoot<T::Extension>> {
self.extension.get()
}
diff --git a/components/script/dom/webgl_validations/types.rs b/components/script/dom/webgl_validations/types.rs
index 9271175b462..a2bdaa0de2f 100644
--- a/components/script/dom/webgl_validations/types.rs
+++ b/components/script/dom/webgl_validations/types.rs
@@ -9,7 +9,7 @@ use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderi
/// with gl constants.
macro_rules! type_safe_wrapper {
($name: ident, $($variant:ident => $mod:ident::$constant:ident, )+) => {
- #[derive(Clone, Copy, Debug, Eq, Hash, HeapSizeOf, JSTraceable, PartialEq)]
+ #[derive(Clone, Copy, Debug, Eq, Hash, JSTraceable, MallocSizeOf, PartialEq)]
#[repr(u32)]
pub enum $name {
$(
diff --git a/components/script/dom/webglbuffer.rs b/components/script/dom/webglbuffer.rs
index fc916f99a6c..68cae62429b 100644
--- a/components/script/dom/webglbuffer.rs
+++ b/components/script/dom/webglbuffer.rs
@@ -27,7 +27,7 @@ pub struct WebGLBuffer {
// The Vertex Array Objects that are referencing this buffer
vao_references: DomRefCell<Option<HashSet<WebGLVertexArrayId>>>,
pending_delete: Cell<bool>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
renderer: WebGLMsgSender,
}
diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs
index 1fcfbf83f51..c9165609cdb 100644
--- a/components/script/dom/webglframebuffer.rs
+++ b/components/script/dom/webglframebuffer.rs
@@ -19,7 +19,7 @@ use dom_struct::dom_struct;
use std::cell::Cell;
#[must_root]
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
enum WebGLFramebufferAttachment {
Renderbuffer(Dom<WebGLRenderbuffer>),
Texture { texture: Dom<WebGLTexture>, level: i32 },
@@ -34,7 +34,7 @@ pub struct WebGLFramebuffer {
is_deleted: Cell<bool>,
size: Cell<Option<(i32, i32)>>,
status: Cell<u32>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
renderer: WebGLMsgSender,
// The attachment points for textures and renderbuffers on this
diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs
index 58b4b51f645..98b788fc2ae 100644
--- a/components/script/dom/webglprogram.rs
+++ b/components/script/dom/webglprogram.rs
@@ -27,7 +27,7 @@ pub struct WebGLProgram {
linked: Cell<bool>,
fragment_shader: MutNullableDom<WebGLShader>,
vertex_shader: MutNullableDom<WebGLShader>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
renderer: WebGLMsgSender,
}
diff --git a/components/script/dom/webglrenderbuffer.rs b/components/script/dom/webglrenderbuffer.rs
index c1cc99955b4..feac4eed416 100644
--- a/components/script/dom/webglrenderbuffer.rs
+++ b/components/script/dom/webglrenderbuffer.rs
@@ -21,7 +21,7 @@ pub struct WebGLRenderbuffer {
is_deleted: Cell<bool>,
size: Cell<Option<(i32, i32)>>,
internal_format: Cell<Option<u32>>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
renderer: WebGLMsgSender,
}
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 98076fa4889..514fac1e492 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -135,7 +135,7 @@ fn has_invalid_blend_constants(arg1: u32, arg2: u32) -> bool {
/// Set of bitflags for texture unpacking (texImage2d, etc...)
bitflags! {
- #[derive(HeapSizeOf, JSTraceable)]
+ #[derive(JSTraceable, MallocSizeOf)]
flags TextureUnpacking: u8 {
const FLIP_Y_AXIS = 0x01,
const PREMULTIPLY_ALPHA = 0x02,
@@ -145,7 +145,7 @@ bitflags! {
/// Information about the bound textures of a WebGL texture unit.
#[must_root]
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct TextureUnitBindings {
bound_texture_2d: MutNullableDom<WebGLTexture>,
bound_texture_cube_map: MutNullableDom<WebGLTexture>,
@@ -181,15 +181,15 @@ impl TextureUnitBindings {
#[dom_struct]
pub struct WebGLRenderingContext {
reflector_: Reflector,
- #[ignore_heap_size_of = "Channels are hard"]
+ #[ignore_malloc_size_of = "Channels are hard"]
webgl_sender: WebGLMsgSender,
- #[ignore_heap_size_of = "Defined in webrender"]
+ #[ignore_malloc_size_of = "Defined in webrender"]
webrender_image: Cell<Option<webrender_api::ImageKey>>,
share_mode: WebGLContextShareMode,
- #[ignore_heap_size_of = "Defined in offscreen_gl_context"]
+ #[ignore_malloc_size_of = "Defined in offscreen_gl_context"]
limits: GLLimits,
canvas: Dom<HTMLCanvasElement>,
- #[ignore_heap_size_of = "Defined in canvas_traits"]
+ #[ignore_malloc_size_of = "Defined in canvas_traits"]
last_error: Cell<Option<WebGLError>>,
texture_unpacking_settings: Cell<TextureUnpacking>,
texture_unpacking_alignment: Cell<u32>,
@@ -201,11 +201,11 @@ pub struct WebGLRenderingContext {
bound_buffer_element_array: MutNullableDom<WebGLBuffer>,
bound_attrib_buffers: DomRefCell<FnvHashMap<u32, Dom<WebGLBuffer>>>,
current_program: MutNullableDom<WebGLProgram>,
- #[ignore_heap_size_of = "Because it's small"]
+ #[ignore_malloc_size_of = "Because it's small"]
current_vertex_attrib_0: Cell<(f32, f32, f32, f32)>,
- #[ignore_heap_size_of = "Because it's small"]
+ #[ignore_malloc_size_of = "Because it's small"]
current_scissor: Cell<(i32, i32, i32, i32)>,
- #[ignore_heap_size_of = "Because it's small"]
+ #[ignore_malloc_size_of = "Because it's small"]
current_clear_color: Cell<(f32, f32, f32, f32)>,
extension_manager: WebGLExtensions,
}
diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs
index d2060b1756c..781db93c8f2 100644
--- a/components/script/dom/webglshader.rs
+++ b/components/script/dom/webglshader.rs
@@ -18,7 +18,7 @@ use dom_struct::dom_struct;
use std::cell::Cell;
use std::sync::{ONCE_INIT, Once};
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
pub enum ShaderCompilationStatus {
NotCompiled,
Succeeded,
@@ -35,7 +35,7 @@ pub struct WebGLShader {
is_deleted: Cell<bool>,
attached_counter: Cell<u32>,
compilation_status: Cell<ShaderCompilationStatus>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
renderer: WebGLMsgSender,
}
diff --git a/components/script/dom/webgltexture.rs b/components/script/dom/webgltexture.rs
index 6927fd10a48..1336718eb00 100644
--- a/components/script/dom/webgltexture.rs
+++ b/components/script/dom/webgltexture.rs
@@ -36,7 +36,7 @@ pub struct WebGLTexture {
target: Cell<Option<u32>>,
is_deleted: Cell<bool>,
/// Stores information about mipmap levels and cubemap faces.
- #[ignore_heap_size_of = "Arrays are cumbersome"]
+ #[ignore_malloc_size_of = "Arrays are cumbersome"]
image_info_array: DomRefCell<[ImageInfo; MAX_LEVEL_COUNT * MAX_FACE_COUNT]>,
/// Face count can only be 1 or 6
face_count: Cell<u8>,
@@ -44,7 +44,7 @@ pub struct WebGLTexture {
// Store information for min and mag filters
min_filter: Cell<Option<u32>>,
mag_filter: Cell<Option<u32>>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
renderer: WebGLMsgSender,
/// True if this texture is used for the DOMToTexture feature.
attached_to_dom: Cell<bool>,
@@ -394,7 +394,7 @@ impl Drop for WebGLTexture {
}
}
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
pub struct ImageInfo {
width: u32,
height: u32,
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 11172c403cb..47d3a6f3668 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -41,7 +41,7 @@ use task::{TaskOnce, TaskCanceller};
use task_source::TaskSource;
use task_source::networking::NetworkingTaskSource;
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
enum WebSocketRequestState {
Connecting = 0,
Open = 1,
@@ -104,7 +104,7 @@ pub struct WebSocket {
ready_state: Cell<WebSocketRequestState>,
buffered_amount: Cell<u64>,
clearing_buffer: Cell<bool>, //Flag to tell if there is a running thread to clear buffered_amount
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
sender: DomRefCell<Option<IpcSender<WebSocketDomAction>>>,
binary_type: Cell<BinaryType>,
protocol: DomRefCell<String>, //Subprotocol selected by server
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 9d2137911d7..6a62e124b92 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -127,14 +127,14 @@ use webrender_api::{ClipId, DocumentId};
use webvr_traits::WebVRMsg;
/// Current state of the window object
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
enum WindowState {
Alive,
Zombie, // Pipeline is closed, but the window hasn't been GCed yet.
}
/// Extra information concerning the reason for reflowing.
-#[derive(Debug, HeapSizeOf)]
+#[derive(Debug, MallocSizeOf)]
pub enum ReflowReason {
CachedPageNeededReflow,
RefreshTick,
@@ -161,24 +161,24 @@ pub enum ReflowReason {
#[dom_struct]
pub struct Window {
globalscope: GlobalScope,
- #[ignore_heap_size_of = "trait objects are hard"]
+ #[ignore_malloc_size_of = "trait objects are hard"]
script_chan: MainThreadScriptChan,
- #[ignore_heap_size_of = "task sources are hard"]
+ #[ignore_malloc_size_of = "task sources are hard"]
dom_manipulation_task_source: DOMManipulationTaskSource,
- #[ignore_heap_size_of = "task sources are hard"]
+ #[ignore_malloc_size_of = "task sources are hard"]
user_interaction_task_source: UserInteractionTaskSource,
- #[ignore_heap_size_of = "task sources are hard"]
+ #[ignore_malloc_size_of = "task sources are hard"]
networking_task_source: NetworkingTaskSource,
- #[ignore_heap_size_of = "task sources are hard"]
+ #[ignore_malloc_size_of = "task sources are hard"]
history_traversal_task_source: HistoryTraversalTaskSource,
- #[ignore_heap_size_of = "task sources are hard"]
+ #[ignore_malloc_size_of = "task sources are hard"]
file_reading_task_source: FileReadingTaskSource,
- #[ignore_heap_size_of = "task sources are hard"]
+ #[ignore_malloc_size_of = "task sources are hard"]
performance_timeline_task_source: PerformanceTimelineTaskSource,
navigator: MutNullableDom<Navigator>,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
image_cache: Arc<ImageCache>,
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
image_cache_chan: Sender<ImageCacheMsg>,
window_proxy: MutNullableDom<WindowProxy>,
document: MutNullableDom<Document>,
@@ -196,7 +196,7 @@ pub struct Window {
/// For sending timeline markers. Will be ignored if
/// no devtools server
devtools_markers: DomRefCell<HashSet<TimelineMarkerType>>,
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
devtools_marker_sender: DomRefCell<Option<IpcSender<Option<TimelineMarker>>>>,
/// Pending resize event, if any.
@@ -209,22 +209,22 @@ pub struct Window {
dom_static: GlobalStaticData,
/// The JavaScript runtime.
- #[ignore_heap_size_of = "Rc<T> is hard"]
+ #[ignore_malloc_size_of = "Rc<T> is hard"]
js_runtime: DomRefCell<Option<Rc<Runtime>>>,
/// A handle for communicating messages to the layout thread.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
layout_chan: Sender<Msg>,
/// A handle to perform RPC calls into the layout, quickly.
- #[ignore_heap_size_of = "trait objects are hard"]
+ #[ignore_malloc_size_of = "trait objects are hard"]
layout_rpc: Box<LayoutRPC + Send + 'static>,
/// The current size of the window, in pixels.
window_size: Cell<Option<WindowSizeData>>,
/// A handle for communicating messages to the bluetooth thread.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
bluetooth_thread: IpcSender<BluetoothRequest>,
bluetooth_extra_permission_data: BluetoothExtraPermissionData,
@@ -242,7 +242,7 @@ pub struct Window {
pending_reflow_count: Cell<u32>,
/// A channel for communicating results of async scripts back to the webdriver server
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
webdriver_script_chan: DomRefCell<Option<IpcSender<WebDriverJSResult>>>,
/// The current state of the window object
@@ -251,7 +251,7 @@ pub struct Window {
current_viewport: Cell<Rect<Au>>,
/// A flag to prevent async events from attempting to interact with this window.
- #[ignore_heap_size_of = "defined in std"]
+ #[ignore_malloc_size_of = "defined in std"]
ignore_further_async_events: DomRefCell<Arc<AtomicBool>>,
error_reporter: CSSErrorReporter,
@@ -265,11 +265,11 @@ pub struct Window {
test_runner: MutNullableDom<TestRunner>,
/// A handle for communicating messages to the webvr thread, if available.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
webgl_chan: WebGLChan,
/// A handle for communicating messages to the webvr thread, if available.
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
webvr_chan: Option<IpcSender<WebVRMsg>>,
/// A map for storing the previous permission state read results.
@@ -290,7 +290,7 @@ pub struct Window {
/// <https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet>
paint_worklet: MutNullableDom<Worklet>,
/// The Webrender Document id associated with this window.
- #[ignore_heap_size_of = "defined in webrender_api"]
+ #[ignore_malloc_size_of = "defined in webrender_api"]
webrender_document: DocumentId,
}
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 4963b57c3aa..f397ef42148 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -36,12 +36,13 @@ pub type TrustedWorkerAddress = Trusted<Worker>;
#[dom_struct]
pub struct Worker {
eventtarget: EventTarget,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
/// Sender to the Receiver associated with the DedicatedWorkerGlobalScope
/// this Worker created.
sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>,
+ #[ignore_malloc_size_of = "Arc"]
closing: Arc<AtomicBool>,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
runtime: Arc<Mutex<Option<SharedRt>>>,
terminated: Cell<bool>,
}
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index ca7e2c3b7a9..760f879b37e 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -73,19 +73,19 @@ pub struct WorkerGlobalScope {
worker_id: WorkerId,
worker_url: ServoUrl,
- #[ignore_heap_size_of = "Arc"]
+ #[ignore_malloc_size_of = "Arc"]
closing: Option<Arc<AtomicBool>>,
- #[ignore_heap_size_of = "Defined in js"]
+ #[ignore_malloc_size_of = "Defined in js"]
runtime: Runtime,
location: MutNullableDom<WorkerLocation>,
navigator: MutNullableDom<WorkerNavigator>,
- #[ignore_heap_size_of = "Defined in ipc-channel"]
+ #[ignore_malloc_size_of = "Defined in ipc-channel"]
/// Optional `IpcSender` for sending the `DevtoolScriptControlMsg`
/// to the server from within the worker
from_devtools_sender: Option<IpcSender<DevtoolScriptControlMsg>>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
/// This `Receiver` will be ignored later if the corresponding
/// `IpcSender` doesn't exist
from_devtools_receiver: Receiver<DevtoolScriptControlMsg>,
diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs
index ae122c8e0d5..7a608a189e1 100644
--- a/components/script/dom/worklet.rs
+++ b/components/script/dom/worklet.rs
@@ -151,7 +151,7 @@ impl WorkletMethods for Worklet {
#[derive(Clone, Copy, Debug, Eq, Hash, JSTraceable, PartialEq)]
pub struct WorkletId(Uuid);
-known_heap_size!(0, WorkletId);
+malloc_size_of_is_0!(WorkletId);
impl WorkletId {
fn new() -> WorkletId {
@@ -653,10 +653,10 @@ impl WorkletThread {
}
/// An executor of worklet tasks
-#[derive(Clone, HeapSizeOf, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
pub struct WorkletExecutor {
worklet_id: WorkletId,
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
primary_sender: Sender<WorkletData>,
}
diff --git a/components/script/dom/workletglobalscope.rs b/components/script/dom/workletglobalscope.rs
index 3dea747ee74..653c8e6468e 100644
--- a/components/script/dom/workletglobalscope.rs
+++ b/components/script/dom/workletglobalscope.rs
@@ -40,7 +40,7 @@ pub struct WorkletGlobalScope {
/// The base URL for this worklet.
base_url: ServoUrl,
/// Sender back to the script thread
- #[ignore_heap_size_of = "channels are hard"]
+ #[ignore_malloc_size_of = "channels are hard"]
to_script_thread_sender: Sender<MainThreadScriptMsg>,
/// Worklet task executor
executor: WorkletExecutor,
@@ -155,7 +155,7 @@ pub struct WorkletGlobalScopeInit {
}
/// <https://drafts.css-houdini.org/worklets/#worklet-global-scope-type>
-#[derive(Clone, Copy, Debug, HeapSizeOf, JSTraceable)]
+#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf)]
pub enum WorkletGlobalScopeType {
/// A servo-specific testing worklet
Test,
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 2baa7351034..68a96ca38d6 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -73,7 +73,7 @@ use time;
use timers::{OneshotTimerCallback, OneshotTimerHandle};
use url::Position;
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
enum XMLHttpRequestState {
Unsent = 0,
Opened = 1,
@@ -82,7 +82,7 @@ enum XMLHttpRequestState {
Done = 4,
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub struct GenerationId(u32);
/// Closure of required data for each async network event that comprises the
@@ -131,20 +131,20 @@ pub struct XMLHttpRequest {
response_type: Cell<XMLHttpRequestResponseType>,
response_xml: MutNullableDom<Document>,
response_blob: MutNullableDom<Blob>,
- #[ignore_heap_size_of = "Defined in rust-mozjs"]
+ #[ignore_malloc_size_of = "Defined in rust-mozjs"]
response_json: Heap<JSVal>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
response_headers: DomRefCell<Headers>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
override_mime_type: DomRefCell<Option<Mime>>,
- #[ignore_heap_size_of = "Defined in rust-encoding"]
+ #[ignore_malloc_size_of = "Defined in rust-encoding"]
override_charset: DomRefCell<Option<EncodingRef>>,
// Associated concepts
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
request_method: DomRefCell<Method>,
request_url: DomRefCell<Option<ServoUrl>>,
- #[ignore_heap_size_of = "Defined in hyper"]
+ #[ignore_malloc_size_of = "Defined in hyper"]
request_headers: DomRefCell<Headers>,
request_body_len: Cell<usize>,
sync: Cell<bool>,
@@ -1243,7 +1243,7 @@ impl XMLHttpRequest {
use std::fmt;
// a dummy header so we can use headers.remove::<SetCookie2>()
- #[derive(Clone, Debug, HeapSizeOf)]
+ #[derive(Clone, Debug, MallocSizeOf)]
struct SetCookie2;
impl Header for SetCookie2 {
fn header_name() -> &'static str {
@@ -1334,9 +1334,9 @@ impl XMLHttpRequest {
}
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct XHRTimeoutCallback {
- #[ignore_heap_size_of = "Because it is non-owning"]
+ #[ignore_malloc_size_of = "Because it is non-owning"]
xhr: Trusted<XMLHttpRequest>,
generation_id: GenerationId,
}
diff --git a/components/script/lib.rs b/components/script/lib.rs
index 5f33f1e1151..edf954d4c96 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -39,8 +39,6 @@ extern crate euclid;
extern crate fnv;
extern crate gleam;
extern crate half;
-#[macro_use] extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
#[macro_use] extern crate html5ever;
#[macro_use]
extern crate hyper;
@@ -56,6 +54,8 @@ extern crate lazy_static;
extern crate libc;
#[macro_use]
extern crate log;
+#[macro_use] extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate metrics;
#[macro_use]
extern crate mime;
diff --git a/components/script/mem.rs b/components/script/mem.rs
index b40a78ec569..47491359a6d 100644
--- a/components/script/mem.rs
+++ b/components/script/mem.rs
@@ -6,24 +6,28 @@
use dom::bindings::conversions::get_dom_class;
use dom::bindings::reflector::DomObject;
-use heapsize::{HeapSizeOf, heap_size_of};
+use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use std::os::raw::c_void;
// This is equivalent to measuring a Box<T>, except that DOM objects lose their
// associated box in order to stash their pointers in a reserved slot of their
// JS reflector.
#[allow(unsafe_code)]
-pub fn heap_size_of_self_and_children<T: DomObject + HeapSizeOf>(obj: &T) -> usize {
+pub fn malloc_size_of_including_self<T: DomObject + MallocSizeOf>(
+ ops: &mut MallocSizeOfOps, obj: &T) -> usize
+{
unsafe {
let class = get_dom_class(obj.reflector().get_jsobject().get()).unwrap();
- (class.heap_size_of)(obj as *const T as *const c_void)
+ (class.malloc_size_of)(ops, obj as *const T as *const c_void)
}
}
-/// Used by codegen to include the pointer to the `HeapSizeOf` implementation of each
+/// Used by codegen to include the pointer to the `MallocSizeOf` implementation of each
/// IDL interface. This way we don't have to find the most-derived interface of DOM
/// objects by hand in code.
#[allow(unsafe_code)]
-pub unsafe fn heap_size_of_raw_self_and_children<T: HeapSizeOf>(obj: *const c_void) -> usize {
- heap_size_of(obj) + (*(obj as *const T)).heap_size_of_children()
+pub unsafe fn malloc_size_of_including_raw_self<T: MallocSizeOf>(
+ ops: &mut MallocSizeOfOps, obj: *const c_void) -> usize
+{
+ ops.malloc_size_of(obj) + (*(obj as *const T)).size_of(ops)
}
diff --git a/components/script/microtask.rs b/components/script/microtask.rs
index 7560d97d883..8457a43b1b8 100644
--- a/components/script/microtask.rs
+++ b/components/script/microtask.rs
@@ -21,7 +21,7 @@ use std::mem;
use std::rc::Rc;
/// A collection of microtasks in FIFO order.
-#[derive(Default, HeapSizeOf, JSTraceable)]
+#[derive(Default, JSTraceable, MallocSizeOf)]
pub struct MicrotaskQueue {
/// The list of enqueued microtasks that will be invoked at the next microtask checkpoint.
microtask_queue: DomRefCell<Vec<Microtask>>,
@@ -29,7 +29,7 @@ pub struct MicrotaskQueue {
performing_a_microtask_checkpoint: Cell<bool>,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum Microtask {
Promise(EnqueuedPromiseCallback),
MediaElement(MediaElementMicrotask),
@@ -43,9 +43,9 @@ pub trait MicrotaskRunnable {
}
/// A promise callback scheduled to run during the next microtask checkpoint (#4283).
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct EnqueuedPromiseCallback {
- #[ignore_heap_size_of = "Rc has unclear ownership"]
+ #[ignore_malloc_size_of = "Rc has unclear ownership"]
pub callback: Rc<PromiseJobCallback>,
pub pipeline: PipelineId,
}
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 1413a0c40dc..e5a9a0401aa 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -73,7 +73,8 @@ use js::jsapi::{JSAutoCompartment, JSContext, JS_SetWrapObjectCallbacks};
use js::jsapi::{JSTracer, SetWindowProxyClass};
use js::jsval::UndefinedValue;
use js::rust::Runtime;
-use mem::heap_size_of_self_and_children;
+use malloc_size_of::{malloc_size_of, MallocSizeOfOps};
+use mem::malloc_size_of_including_self;
use metrics::PaintTimeMetrics;
use microtask::{MicrotaskQueue, Microtask};
use msg::constellation_msg::{BrowsingContextId, FrameType, PipelineId, PipelineNamespace, TopLevelBrowsingContextId};
@@ -1503,14 +1504,17 @@ impl ScriptThread {
let mut path_seg = String::from("url(");
let mut dom_tree_size = 0;
let mut reports = vec![];
+ // Servo uses vanilla jemalloc, which doesn't have a
+ // malloc_enclosing_size_of function.
+ let mut ops = MallocSizeOfOps::new(malloc_size_of, None, None);
for (_, document) in self.documents.borrow().iter() {
let current_url = document.url();
for child in document.upcast::<Node>().traverse_preorder() {
- dom_tree_size += heap_size_of_self_and_children(&*child);
+ dom_tree_size += malloc_size_of_including_self(&mut ops, &*child);
}
- dom_tree_size += heap_size_of_self_and_children(document.window());
+ dom_tree_size += malloc_size_of_including_self(&mut ops, document.window());
if reports.len() > 0 {
path_seg.push_str(", ");
diff --git a/components/script/textinput.rs b/components/script/textinput.rs
index a2374cb6a82..3c533964b7d 100644
--- a/components/script/textinput.rs
+++ b/components/script/textinput.rs
@@ -22,7 +22,7 @@ pub enum Selection {
NotSelected
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub enum SelectionDirection {
Forward,
Backward,
@@ -49,7 +49,7 @@ impl From<SelectionDirection> for DOMString {
}
}
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub struct TextPoint {
/// 0-based line number
pub line: usize,
@@ -58,7 +58,7 @@ pub struct TextPoint {
}
/// Encapsulated state for handling keyboard input in a single or multiline text input control.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct TextInput<T: ClipboardProvider> {
/// Current text input content, split across lines without trailing '\n'
lines: Vec<DOMString>,
@@ -68,7 +68,7 @@ pub struct TextInput<T: ClipboardProvider> {
pub selection_begin: Option<TextPoint>,
/// Is this a multiline input?
multiline: bool,
- #[ignore_heap_size_of = "Can't easily measure this generic type"]
+ #[ignore_malloc_size_of = "Can't easily measure this generic type"]
clipboard_provider: T,
/// The maximum number of UTF-16 code units this text input is allowed to hold.
///
diff --git a/components/script/timers.rs b/components/script/timers.rs
index 1f69eca03ba..4bc4bf37fff 100644
--- a/components/script/timers.rs
+++ b/components/script/timers.rs
@@ -13,7 +13,6 @@ use dom::globalscope::GlobalScope;
use dom::testbinding::TestBindingCallback;
use dom::xmlhttprequest::XHRTimeoutCallback;
use euclid::Length;
-use heapsize::HeapSizeOf;
use ipc_channel::ipc::IpcSender;
use js::jsapi::{HandleValue, Heap};
use js::jsval::{JSVal, UndefinedValue};
@@ -27,15 +26,15 @@ use std::collections::HashMap;
use std::default::Default;
use std::rc::Rc;
-#[derive(Clone, Copy, Debug, Eq, Hash, HeapSizeOf, JSTraceable, Ord, PartialEq, PartialOrd)]
+#[derive(Clone, Copy, Debug, Eq, Hash, JSTraceable, MallocSizeOf, Ord, PartialEq, PartialOrd)]
pub struct OneshotTimerHandle(i32);
-#[derive(DenyPublicFields, HeapSizeOf, JSTraceable)]
+#[derive(DenyPublicFields, JSTraceable, MallocSizeOf)]
pub struct OneshotTimers {
js_timers: JsTimers,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
timer_event_chan: IpcSender<TimerEvent>,
- #[ignore_heap_size_of = "Defined in std"]
+ #[ignore_malloc_size_of = "Defined in std"]
scheduler_chan: IpcSender<TimerSchedulerMsg>,
next_timer_handle: Cell<OneshotTimerHandle>,
timers: DomRefCell<Vec<OneshotTimer>>,
@@ -54,7 +53,7 @@ pub struct OneshotTimers {
expected_event_id: Cell<TimerEventId>,
}
-#[derive(DenyPublicFields, HeapSizeOf, JSTraceable)]
+#[derive(DenyPublicFields, JSTraceable, MallocSizeOf)]
struct OneshotTimer {
handle: OneshotTimerHandle,
source: TimerSource,
@@ -65,7 +64,7 @@ struct OneshotTimer {
// This enum is required to work around the fact that trait objects do not support generic methods.
// A replacement trait would have a method such as
// `invoke<T: DomObject>(self: Box<Self>, this: &T, js_timers: &JsTimers);`.
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub enum OneshotTimerCallback {
XhrTimeout(XHRTimeoutCallback),
EventSourceTimeout(EventSourceTimeoutCallback),
@@ -301,10 +300,10 @@ impl OneshotTimers {
}
}
-#[derive(Clone, Copy, Eq, Hash, HeapSizeOf, JSTraceable, Ord, PartialEq, PartialOrd)]
+#[derive(Clone, Copy, Eq, Hash, JSTraceable, MallocSizeOf, Ord, PartialEq, PartialOrd)]
pub struct JsTimerHandle(i32);
-#[derive(DenyPublicFields, HeapSizeOf, JSTraceable)]
+#[derive(DenyPublicFields, JSTraceable, MallocSizeOf)]
pub struct JsTimers {
next_timer_handle: Cell<JsTimerHandle>,
active_timers: DomRefCell<HashMap<JsTimerHandle, JsTimerEntry>>,
@@ -314,7 +313,7 @@ pub struct JsTimers {
min_duration: Cell<Option<MsDuration>>,
}
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
struct JsTimerEntry {
oneshot_handle: OneshotTimerHandle,
}
@@ -323,9 +322,9 @@ struct JsTimerEntry {
// (ie. function value to invoke and all arguments to pass
// to the function when calling it)
// TODO: Handle rooting during invocation when movable GC is turned on
-#[derive(HeapSizeOf, JSTraceable)]
+#[derive(JSTraceable, MallocSizeOf)]
pub struct JsTimerTask {
- #[ignore_heap_size_of = "Because it is non-owning"]
+ #[ignore_malloc_size_of = "Because it is non-owning"]
handle: JsTimerHandle,
source: TimerSource,
callback: InternalTimerCallback,
@@ -335,7 +334,7 @@ pub struct JsTimerTask {
}
// Enum allowing more descriptive values for the is_interval field
-#[derive(Clone, Copy, HeapSizeOf, JSTraceable, PartialEq)]
+#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
pub enum IsInterval {
Interval,
NonInterval,
@@ -347,17 +346,14 @@ pub enum TimerCallback {
FunctionTimerCallback(Rc<Function>),
}
-#[derive(Clone, JSTraceable)]
+#[derive(Clone, JSTraceable, MallocSizeOf)]
enum InternalTimerCallback {
StringTimerCallback(DOMString),
- FunctionTimerCallback(Rc<Function>, Rc<Box<[Heap<JSVal>]>>),
-}
-
-impl HeapSizeOf for InternalTimerCallback {
- fn heap_size_of_children(&self) -> usize {
- // FIXME: Rc<T> isn't HeapSizeOf and we can't ignore it due to #6870 and #6871
- 0
- }
+ FunctionTimerCallback(
+ #[ignore_malloc_size_of = "Rc"]
+ Rc<Function>,
+ #[ignore_malloc_size_of = "Rc"]
+ Rc<Box<[Heap<JSVal>]>>),
}
impl JsTimers {
diff --git a/components/script_layout_interface/Cargo.toml b/components/script_layout_interface/Cargo.toml
index 47e47222c7d..087dc984e42 100644
--- a/components/script_layout_interface/Cargo.toml
+++ b/components/script_layout_interface/Cargo.toml
@@ -16,12 +16,12 @@ canvas_traits = {path = "../canvas_traits"}
cssparser = "0.22.0"
euclid = "0.15"
gfx_traits = {path = "../gfx_traits"}
-heapsize = "0.4"
-heapsize_derive = "0.1"
html5ever = "0.20.0"
ipc-channel = "0.9"
libc = "0.2"
log = "0.3.5"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
metrics = {path = "../metrics"}
msg = {path = "../msg"}
net_traits = {path = "../net_traits"}
diff --git a/components/script_layout_interface/lib.rs b/components/script_layout_interface/lib.rs
index 0216ca84543..4e17570f92d 100644
--- a/components/script_layout_interface/lib.rs
+++ b/components/script_layout_interface/lib.rs
@@ -14,13 +14,13 @@ extern crate canvas_traits;
extern crate cssparser;
extern crate euclid;
extern crate gfx_traits;
-extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
#[macro_use] extern crate html5ever;
extern crate ipc_channel;
extern crate libc;
#[macro_use]
extern crate log;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate metrics;
extern crate msg;
extern crate net_traits;
@@ -72,11 +72,11 @@ impl StyleData {
}
}
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub struct OpaqueStyleAndLayoutData {
// NB: We really store a `StyleAndLayoutData` here, so be careful!
- #[ignore_heap_size_of = "TODO(#6910) Box value that should be counted but \
- the type lives in layout"]
+ #[ignore_malloc_size_of = "TODO(#6910) Box value that should be counted but \
+ the type lives in layout"]
pub ptr: NonZero<*mut StyleData>,
}
@@ -84,7 +84,7 @@ pub struct OpaqueStyleAndLayoutData {
unsafe impl Send for OpaqueStyleAndLayoutData {}
/// Information that we need stored in each DOM node.
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub struct DomParallelInfo {
/// The number of children remaining to process during bottom-up traversal.
pub children_to_process: AtomicIsize,
diff --git a/components/script_layout_interface/reporter.rs b/components/script_layout_interface/reporter.rs
index 7f5acfef8c1..42adfa40d52 100644
--- a/components/script_layout_interface/reporter.rs
+++ b/components/script_layout_interface/reporter.rs
@@ -11,13 +11,13 @@ use servo_url::ServoUrl;
use std::sync::{Mutex, Arc};
use style::error_reporting::{ParseErrorReporter, ContextualParseError};
-#[derive(Clone, HeapSizeOf)]
+#[derive(Clone, MallocSizeOf)]
pub struct CSSErrorReporter {
pub pipelineid: PipelineId,
// Arc+Mutex combo is necessary to make this struct Sync,
// which is necessary to fulfill the bounds required by the
// uses of the ParseErrorReporter trait.
- #[ignore_heap_size_of = "Arc is defined in libstd"]
+ #[ignore_malloc_size_of = "Arc is defined in libstd"]
pub script_chan: Arc<Mutex<IpcSender<ConstellationControlMsg>>>,
}
diff --git a/components/script_traits/Cargo.toml b/components/script_traits/Cargo.toml
index 88fb50c3384..274f8435d73 100644
--- a/components/script_traits/Cargo.toml
+++ b/components/script_traits/Cargo.toml
@@ -16,12 +16,12 @@ cookie = "0.6"
devtools_traits = {path = "../devtools_traits"}
euclid = "0.15"
gfx_traits = {path = "../gfx_traits"}
-heapsize = "0.4"
-heapsize_derive = "0.1"
hyper = "0.10"
hyper_serde = "0.7"
ipc-channel = "0.9"
libc = "0.2"
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
msg = {path = "../msg"}
net_traits = {path = "../net_traits"}
profile_traits = {path = "../profile_traits"}
@@ -31,6 +31,6 @@ servo_atoms = {path = "../atoms"}
servo_url = {path = "../url"}
style_traits = {path = "../style_traits", features = ["servo"]}
time = "0.1.12"
-url = {version = "1.2", features = ["heap_size"]}
+url = "1.2"
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}
webvr_traits = {path = "../webvr_traits"}
diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs
index 1b9beaf37ff..16c16b83ebe 100644
--- a/components/script_traits/lib.rs
+++ b/components/script_traits/lib.rs
@@ -15,13 +15,14 @@ extern crate cookie as cookie_rs;
extern crate devtools_traits;
extern crate euclid;
extern crate gfx_traits;
-extern crate heapsize;
-#[macro_use]
-extern crate heapsize_derive;
extern crate hyper;
extern crate hyper_serde;
extern crate ipc_channel;
extern crate libc;
+#[macro_use]
+extern crate malloc_size_of;
+#[macro_use]
+extern crate malloc_size_of_derive;
extern crate msg;
extern crate net_traits;
extern crate profile_traits;
@@ -42,7 +43,6 @@ use canvas_traits::webgl::WebGLPipeline;
use devtools_traits::{DevtoolScriptControlMsg, ScriptToDevtoolsControlMsg, WorkerId};
use euclid::{Size2D, Length, Point2D, Vector2D, Rect, ScaleFactor, TypedSize2D};
use gfx_traits::Epoch;
-use heapsize::HeapSizeOf;
use hyper::header::Headers;
use hyper::method::Method;
use ipc_channel::{Error as IpcError};
@@ -81,11 +81,7 @@ pub use script_msg::{ServiceWorkerMsg, ScopeThings, SWManagerMsg, SWManagerSende
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct UntrustedNodeAddress(pub *const c_void);
-impl HeapSizeOf for UntrustedNodeAddress {
- fn heap_size_of_children(&self) -> usize {
- 0
- }
-}
+malloc_size_of_is_0!(UntrustedNodeAddress);
#[allow(unsafe_code)]
unsafe impl Send for UntrustedNodeAddress {}
@@ -225,7 +221,7 @@ pub enum DiscardBrowsingContext {
///
/// * <https://html.spec.whatwg.org/multipage/#active-document>
/// * <https://html.spec.whatwg.org/multipage/#fully-active>
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub enum DocumentActivity {
/// An inactive document
Inactive,
@@ -245,7 +241,7 @@ pub enum PaintMetricType {
}
/// The reason why the pipeline id of an iframe is being updated.
-#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize)]
pub enum UpdatePipelineIdReason {
/// The pipeline id is being updated due to a navigation.
Navigation,
@@ -420,7 +416,7 @@ pub enum MouseButton {
}
/// The types of mouse events
-#[derive(Deserialize, HeapSizeOf, Serialize)]
+#[derive(Deserialize, MallocSizeOf, Serialize)]
pub enum MouseEventType {
/// Mouse button clicked
Click,
@@ -448,7 +444,7 @@ pub enum CompositorEvent {
}
/// Touchpad pressure phase for `TouchpadPressureEvent`.
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum TouchpadPressurePhase {
/// Pressure before a regular click.
BeforeClick,
@@ -478,7 +474,7 @@ pub enum TimerSchedulerMsg {
pub struct TimerEvent(pub TimerSource, pub TimerEventId);
/// Describes the thread that requested the TimerEvent.
-#[derive(Clone, Copy, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, Serialize)]
pub enum TimerSource {
/// The event was requested from a window (ScriptThread).
FromWindow(PipelineId),
@@ -487,14 +483,14 @@ pub enum TimerSource {
}
/// The id to be used for a `TimerEvent` is defined by the corresponding `TimerEventRequest`.
-#[derive(Clone, Copy, Debug, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Debug, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub struct TimerEventId(pub u32);
/// Unit of measurement.
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub enum Milliseconds {}
/// Unit of measurement.
-#[derive(Clone, Copy, HeapSizeOf)]
+#[derive(Clone, Copy, MallocSizeOf)]
pub enum Nanoseconds {}
/// Amount of milliseconds.
@@ -721,7 +717,7 @@ pub struct ScrollState {
}
/// Data about the window size.
-#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub struct WindowSizeData {
/// The size of the initial layout viewport, before parsing an
/// <http://www.w3.org/TR/css-device-adapt/#initial-viewport>
@@ -732,7 +728,7 @@ pub struct WindowSizeData {
}
/// The type of window size change.
-#[derive(Clone, Copy, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Copy, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub enum WindowSizeType {
/// Initial load.
Initial,
@@ -877,7 +873,7 @@ impl fmt::Debug for Painter {
/// The result of executing paint code: the image together with any image URLs that need to be loaded.
///
/// TODO: this should return a WR display list. <https://github.com/servo/servo/issues/17497>
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct DrawAPaintImageResult {
/// The image height
pub width: u32,
diff --git a/components/servo_arc/Cargo.toml b/components/servo_arc/Cargo.toml
index 51e4dcccc16..9a82346e68b 100644
--- a/components/servo_arc/Cargo.toml
+++ b/components/servo_arc/Cargo.toml
@@ -10,10 +10,9 @@ name = "servo_arc"
path = "lib.rs"
[features]
-servo = ["serde", "heapsize"]
+servo = ["serde"]
[dependencies]
-heapsize = {version = "0.4.0", optional = true}
nodrop = {version = "0.1.8"}
serde = {version = "1.0", optional = true}
stable_deref_trait = "1.0.0"
diff --git a/components/servo_arc/lib.rs b/components/servo_arc/lib.rs
index 22d443a2db3..cc378e237d3 100644
--- a/components/servo_arc/lib.rs
+++ b/components/servo_arc/lib.rs
@@ -27,8 +27,6 @@ extern crate nodrop;
#[cfg(feature = "servo")] extern crate serde;
extern crate stable_deref_trait;
-#[cfg(feature = "servo")]
-use heapsize::HeapSizeOf;
use nodrop::NoDrop;
#[cfg(feature = "servo")]
use serde::{Deserialize, Serialize};
@@ -476,15 +474,6 @@ impl<T: ?Sized> AsRef<T> for Arc<T> {
unsafe impl<T: ?Sized> StableDeref for Arc<T> {}
unsafe impl<T: ?Sized> CloneStableDeref for Arc<T> {}
-// This is what the HeapSize crate does for regular arc, but is questionably
-// sound. See https://github.com/servo/heapsize/issues/37
-#[cfg(feature = "servo")]
-impl<T: HeapSizeOf> HeapSizeOf for Arc<T> {
- fn heap_size_of_children(&self) -> usize {
- (**self).heap_size_of_children()
- }
-}
-
#[cfg(feature = "servo")]
impl<'de, T: Deserialize<'de>> Deserialize<'de> for Arc<T>
{
diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml
index 140c1b7d094..eb79cdbe40f 100644
--- a/components/style/Cargo.toml
+++ b/components/style/Cargo.toml
@@ -16,12 +16,11 @@ path = "lib.rs"
doctest = false
[features]
-gecko = ["malloc_size_of", "malloc_size_of_derive", "nsstring_vendor", "num_cpus",
+gecko = ["nsstring_vendor", "num_cpus",
"style_traits/gecko", "fallible/known_system_malloc"]
use_bindgen = ["bindgen", "regex", "toml"]
-servo = ["serde", "heapsize", "heapsize_derive",
- "style_traits/servo", "servo_atoms", "servo_config", "html5ever",
- "cssparser/heapsize", "cssparser/serde", "encoding", "smallvec/heapsizeof",
+servo = ["serde", "style_traits/servo", "servo_atoms", "servo_config", "html5ever",
+ "cssparser/serde", "encoding", "malloc_size_of/servo",
# FIXME: Uncomment when https://github.com/servo/servo/pull/16953 has landed:
#"arrayvec/use_union"
@@ -42,16 +41,14 @@ euclid = "0.15"
fallible = { path = "../fallible" }
fnv = "1.0"
hashglobe = { path = "../hashglobe" }
-heapsize = {version = "0.4", optional = true}
-heapsize_derive = {version = "0.1", optional = true}
itertools = "0.5"
itoa = "0.3"
html5ever = {version = "0.20", optional = true}
lazy_static = "0.2"
lru_cache = { path = "../lru_cache" }
log = "0.3"
-malloc_size_of = { path = "../malloc_size_of", optional=true }
-malloc_size_of_derive = { path = "../malloc_size_of_derive", optional=true }
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
matches = "0.1"
nsstring_vendor = {path = "gecko_bindings/nsstring_vendor", optional = true}
num_cpus = {version = "1.1.0", optional = true}
diff --git a/components/style/applicable_declarations.rs b/components/style/applicable_declarations.rs
index 0824b60a0a2..48597c33a10 100644
--- a/components/style/applicable_declarations.rs
+++ b/components/style/applicable_declarations.rs
@@ -36,9 +36,7 @@ const SOURCE_ORDER_MASK: u32 = (1 << SOURCE_ORDER_BITS) - 1;
const SOURCE_ORDER_MAX: u32 = SOURCE_ORDER_MASK;
/// Stores the source order of a block and the cascade level it belongs to.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Eq, PartialEq)]
+#[derive(Clone, Copy, Eq, MallocSizeOf, PartialEq)]
struct SourceOrderAndCascadeLevel(u32);
impl SourceOrderAndCascadeLevel {
@@ -76,13 +74,10 @@ impl Debug for SourceOrderAndCascadeLevel {
///
/// This represents the declarations in a given declaration block for a given
/// importance.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct ApplicableDeclarationBlock {
/// The style source, either a style rule, or a property declaration block.
- #[cfg_attr(feature = "gecko", ignore_malloc_size_of = "contains Arcs")]
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[ignore_malloc_size_of = "Arc"]
pub source: StyleSource,
/// The source order of the block, and the cascade level it belongs to.
order_and_level: SourceOrderAndCascadeLevel,
diff --git a/components/style/attr.rs b/components/style/attr.rs
index 60757990c3f..7306b2e9e1d 100644
--- a/components/style/attr.rs
+++ b/components/style/attr.rs
@@ -27,7 +27,7 @@ use values::specified::Length;
const UNSIGNED_LONG_MAX: u32 = 2147483647;
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum LengthOrPercentageOrAuto {
Auto,
Percentage(f32),
@@ -35,7 +35,7 @@ pub enum LengthOrPercentageOrAuto {
}
#[derive(Clone, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum AttrValue {
String(String),
TokenList(String, Vec<Atom>),
@@ -66,7 +66,7 @@ pub enum AttrValue {
/// declaration block), but that avoids keeping a refcounted
/// declarationblock for longer than needed.
Declaration(String,
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[ignore_malloc_size_of = "Arc"]
Arc<Locked<PropertyDeclarationBlock>>)
}
@@ -596,7 +596,7 @@ pub fn parse_length(mut value: &str) -> LengthOrPercentageOrAuto {
/// A struct that uniquely identifies an element's attribute.
#[derive(Clone, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct AttrIdentifier {
pub local_name: LocalName,
pub name: LocalName,
diff --git a/components/style/custom_properties.rs b/components/style/custom_properties.rs
index d29d948fab1..90446ec02e7 100644
--- a/components/style/custom_properties.rs
+++ b/components/style/custom_properties.rs
@@ -41,9 +41,7 @@ pub fn parse_name(s: &str) -> Result<&str, ()> {
///
/// We preserve the original CSS for serialization, and also the variable
/// references to other custom property names.
-#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct VariableValue {
css: String,
diff --git a/components/style/dom.rs b/components/style/dom.rs
index 766b217863f..e9405fdc767 100644
--- a/components/style/dom.rs
+++ b/components/style/dom.rs
@@ -44,7 +44,7 @@ use traversal_flags::{TraversalFlags, self};
/// data structures. Also, layout code tends to be faster when the DOM is not being accessed, for
/// locality reasons. Using `OpaqueNode` enforces this invariant.
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf, Deserialize, Serialize))]
pub struct OpaqueNode(pub usize);
impl OpaqueNode {
diff --git a/components/style/element_state.rs b/components/style/element_state.rs
index 7c7f5c5d07a..d6ecc3bf5a9 100644
--- a/components/style/element_state.rs
+++ b/components/style/element_state.rs
@@ -14,8 +14,7 @@ bitflags! {
///
/// TODO(emilio): We really really want to use the NS_EVENT_STATE bindings
/// for this.
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(MallocSizeOf)]
pub flags ElementState: u64 {
/// The mouse is down on this element.
/// <https://html.spec.whatwg.org/multipage/#selector-active>
diff --git a/components/style/invalidation/element/invalidation_map.rs b/components/style/invalidation/element/invalidation_map.rs
index bcc597330f1..1ee1358a91a 100644
--- a/components/style/invalidation/element/invalidation_map.rs
+++ b/components/style/invalidation/element/invalidation_map.rs
@@ -55,14 +55,12 @@ pub fn dir_selector_to_state(s: &[u16]) -> ElementState {
/// This allows us to quickly scan through the dependency sites of all style
/// rules and determine the maximum effect that a given state or attribute
/// change may have on the style of elements in the document.
-#[derive(Clone, Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf)]
pub struct Dependency {
/// The dependency selector.
#[cfg_attr(feature = "gecko",
ignore_malloc_size_of = "CssRules have primary refs, we measure there")]
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
pub selector: Selector<SelectorImpl>,
/// The offset into the selector that we should match on.
@@ -115,9 +113,7 @@ impl SelectorMapEntry for Dependency {
/// The same, but for state selectors, which can track more exactly what state
/// do they track.
-#[derive(Clone, Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf)]
pub struct StateDependency {
/// The other dependency fields.
pub dep: Dependency,
@@ -139,9 +135,7 @@ impl SelectorMapEntry for StateDependency {
/// In particular, we want to lookup as few things as possible to get the fewer
/// selectors the better, so this looks up by id, class, or looks at the list of
/// state/other attribute affecting selectors.
-#[derive(Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf)]
pub struct InvalidationMap {
/// A map from a given class name to all the selectors with that class
/// selector.
diff --git a/components/style/invalidation/element/restyle_hints.rs b/components/style/invalidation/element/restyle_hints.rs
index 94bab930732..06549e4fb0f 100644
--- a/components/style/invalidation/element/restyle_hints.rs
+++ b/components/style/invalidation/element/restyle_hints.rs
@@ -230,9 +230,7 @@ impl From<nsRestyleHint> for RestyleHint {
}
#[cfg(feature = "servo")]
-impl ::heapsize::HeapSizeOf for RestyleHint {
- fn heap_size_of_children(&self) -> usize { 0 }
-}
+malloc_size_of_is_0!(RestyleHint);
/// Asserts that all replacement hints have a matching nsRestyleHint value.
#[cfg(feature = "gecko")]
diff --git a/components/style/invalidation/media_queries.rs b/components/style/invalidation/media_queries.rs
index 9521e3cdc16..f9a7d47f49f 100644
--- a/components/style/invalidation/media_queries.rs
+++ b/components/style/invalidation/media_queries.rs
@@ -23,9 +23,7 @@ use stylesheets::{NestedRuleIterationCondition, Stylesheet, SupportsRule};
///
/// If this changes, though, we may need to remove the item from the cache if
/// present before it goes away.
-#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
pub struct MediaListKey(usize);
impl MediaListKey {
@@ -53,9 +51,7 @@ impl ToMediaListKey for MediaRule {}
/// A struct that holds the result of a media query evaluation pass for the
/// media queries that evaluated successfully.
-#[derive(Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf, PartialEq)]
pub struct EffectiveMediaQueryResults {
/// The set of media lists that matched last time.
set: FnvHashSet<MediaListKey>,
diff --git a/components/style/invalidation/stylesheets.rs b/components/style/invalidation/stylesheets.rs
index 2e2abdf4960..17c9d9ce920 100644
--- a/components/style/invalidation/stylesheets.rs
+++ b/components/style/invalidation/stylesheets.rs
@@ -24,7 +24,7 @@ use stylesheets::{CssRule, StylesheetInDocument};
/// element is determined by whether the invalidation is stored in the
/// StylesheetInvalidationSet's invalid_scopes or invalid_elements table.
#[derive(Debug, Eq, Hash, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
enum Invalidation {
/// An element with a given id.
ID(Atom),
@@ -75,7 +75,7 @@ impl Invalidation {
///
/// TODO(emilio): We might be able to do the same analysis for media query
/// changes too (or even selector changes?).
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct StylesheetInvalidationSet {
/// The subtrees we know we have to restyle so far.
invalid_scopes: FnvHashSet<Invalidation>,
diff --git a/components/style/lib.rs b/components/style/lib.rs
index 00a83d1f39a..505bbb97e4b 100644
--- a/components/style/lib.rs
+++ b/components/style/lib.rs
@@ -50,8 +50,6 @@ extern crate fallible;
extern crate fnv;
#[cfg(feature = "gecko")] #[macro_use] pub mod gecko_string_cache;
extern crate hashglobe;
-#[cfg(feature = "servo")] extern crate heapsize;
-#[cfg(feature = "servo")] #[macro_use] extern crate heapsize_derive;
extern crate itertools;
extern crate itoa;
#[cfg(feature = "servo")] #[macro_use] extern crate html5ever;
@@ -60,8 +58,8 @@ extern crate lazy_static;
#[macro_use]
extern crate log;
extern crate lru_cache;
-#[cfg(feature = "gecko")] #[macro_use] extern crate malloc_size_of;
-#[cfg(feature = "gecko")] #[macro_use] extern crate malloc_size_of_derive;
+#[macro_use] extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
#[allow(unused_extern_crates)]
#[macro_use]
extern crate matches;
diff --git a/components/style/logical_geometry.rs b/components/style/logical_geometry.rs
index dd6653d25f1..1e56fa8fa18 100644
--- a/components/style/logical_geometry.rs
+++ b/components/style/logical_geometry.rs
@@ -24,7 +24,7 @@ pub enum InlineBaseDirection {
// TODO: improve the readability of the WritingMode serialization, refer to the Debug:fmt()
bitflags!(
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Serialize))]
+ #[cfg_attr(feature = "servo", derive(MallocSizeOf, Serialize))]
pub flags WritingMode: u8 {
const FLAG_RTL = 1 << 0,
const FLAG_VERTICAL = 1 << 1,
diff --git a/components/style/macros.rs b/components/style/macros.rs
index a93f7f545e4..200fd61a8c4 100644
--- a/components/style/macros.rs
+++ b/components/style/macros.rs
@@ -47,9 +47,8 @@ macro_rules! define_numbered_css_keyword_enum {
};
($name: ident: $( $css: expr => $variant: ident = $value: expr ),+) => {
#[allow(non_camel_case_types, missing_docs)]
- #[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, Ord, PartialEq, PartialOrd)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub enum $name {
$( $variant = $value ),+
}
@@ -103,9 +102,7 @@ macro_rules! add_impls_for_keyword_enum {
macro_rules! define_keyword_type {
($name: ident, $css: expr) => {
#[allow(missing_docs)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq)]
+ #[derive(Animate, Clone, ComputeSquaredDistance, Copy, MallocSizeOf, PartialEq)]
#[derive(ToAnimatedZero, ToComputedValue, ToCss)]
pub struct $name;
diff --git a/components/style/media_queries.rs b/components/style/media_queries.rs
index d2ecf0595bb..b77f7c85f84 100644
--- a/components/style/media_queries.rs
+++ b/components/style/media_queries.rs
@@ -26,7 +26,7 @@ pub use gecko::media_queries::{Device, Expression};
/// A type that encapsulates a media query list.
#[derive(Clone, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct MediaList {
/// The list of media queries.
pub media_queries: Vec<MediaQuery>,
@@ -48,7 +48,7 @@ impl MediaList {
}
/// <https://drafts.csswg.org/mediaqueries/#mq-prefix>
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, Copy, Debug, Eq, PartialEq, ToCss)]
pub enum Qualifier {
/// Hide a media query from legacy UAs:
@@ -63,7 +63,7 @@ pub enum Qualifier {
///
/// [mq]: https://drafts.csswg.org/mediaqueries/
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct MediaQuery {
/// The qualifier for this query.
pub qualifier: Option<Qualifier>,
@@ -135,7 +135,7 @@ impl ToCss for MediaQuery {
/// <http://dev.w3.org/csswg/mediaqueries-3/#media0>
#[derive(Clone, Debug, Eq, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum MediaQueryType {
/// A media type that matches every device.
All,
@@ -164,7 +164,7 @@ impl MediaQueryType {
/// <https://drafts.csswg.org/mediaqueries/#media-types>
#[derive(Clone, Debug, Eq, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct MediaType(pub CustomIdent);
impl MediaType {
diff --git a/components/style/properties/declaration_block.rs b/components/style/properties/declaration_block.rs
index 77e4ef96343..7053433f9d5 100644
--- a/components/style/properties/declaration_block.rs
+++ b/components/style/properties/declaration_block.rs
@@ -40,9 +40,7 @@ impl AnimationRules {
}
/// Whether a given declaration comes from CSS parsing, or from CSSOM.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
+#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
pub enum DeclarationSource {
/// The declaration was obtained from CSS parsing of sheets and such.
Parsing,
@@ -53,9 +51,7 @@ pub enum DeclarationSource {
/// A declaration [importance][importance].
///
/// [importance]: https://drafts.csswg.org/css-cascade/#importance
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
+#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
pub enum Importance {
/// Indicates a declaration without `!important`.
Normal,
diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs
index d8f6b10f444..2abf80a0a9b 100644
--- a/components/style/properties/helpers.mako.rs
+++ b/components/style/properties/helpers.mako.rs
@@ -117,9 +117,7 @@
use values::computed::ComputedVecIter;
/// The computed value, effectively a list of single values.
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
% if need_animatable or animation_value_type == "ComputedValue":
#[derive(Animate, ComputeSquaredDistance)]
% endif
@@ -178,9 +176,7 @@
}
/// The specified value of ${name}.
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct SpecifiedValue(pub Vec<single_value::SpecifiedValue>);
impl ToCss for SpecifiedValue {
@@ -950,9 +946,7 @@
pub type T = ::values::computed::${length_type};
}
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToCss)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub struct SpecifiedValue(pub ${length_type});
% if length_type == "MozLength":
diff --git a/components/style/properties/helpers/animated_properties.mako.rs b/components/style/properties/helpers/animated_properties.mako.rs
index 85adcabfe6b..422447d582d 100644
--- a/components/style/properties/helpers/animated_properties.mako.rs
+++ b/components/style/properties/helpers/animated_properties.mako.rs
@@ -77,9 +77,7 @@ pub fn nscsspropertyid_is_animatable(property: nsCSSPropertyID) -> bool {
/// a shorthand with at least one transitionable longhand component, or an unsupported property.
// NB: This needs to be here because it needs all the longhands generated
// beforehand.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, Eq, Hash, PartialEq)]
+#[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
pub enum TransitionProperty {
/// All, any transitionable property changing should generate a transition.
///
@@ -203,7 +201,7 @@ pub fn nscsspropertyid_is_transitionable(property: nsCSSPropertyID) -> bool {
/// property.
#[cfg(feature = "servo")]
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum AnimatedProperty {
% for prop in data.longhands:
% if prop.animatable:
@@ -339,7 +337,7 @@ unsafe impl HasSimpleFFI for AnimationValueMap {}
/// FIXME: We need to add a path for custom properties, but that's trivial after
/// this (is a similar path to that of PropertyDeclaration).
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum AnimationValue {
% for prop in data.longhands:
% if prop.animatable:
@@ -1190,7 +1188,7 @@ fn rotate_to_matrix(x: f32, y: f32, z: f32, a: Angle) -> ComputedMatrix {
/// A 2d matrix for interpolation.
#[derive(Clone, ComputeSquaredDistance, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[allow(missing_docs)]
// FIXME: We use custom derive for ComputeSquaredDistance. However, If possible, we should convert
// the InnerMatrix2D into types with physical meaning. This custom derive computes the squared
@@ -1202,18 +1200,18 @@ pub struct InnerMatrix2D {
}
/// A 2d translation function.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
pub struct Translate2D(f32, f32);
/// A 2d scale function.
#[derive(Clone, ComputeSquaredDistance, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct Scale2D(f32, f32);
/// A decomposed 2d matrix.
#[derive(Clone, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct MatrixDecomposed2D {
/// The translation function.
pub translate: Translate2D,
@@ -1497,33 +1495,33 @@ impl From<ComputedMatrix> for RawGeckoGfxMatrix4x4 {
}
/// A 3d translation.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
pub struct Translate3D(f32, f32, f32);
/// A 3d scale function.
#[derive(Clone, ComputeSquaredDistance, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct Scale3D(f32, f32, f32);
/// A 3d skew function.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Animate, Clone, Copy, Debug)]
pub struct Skew(f32, f32, f32);
/// A 3d perspective transformation.
#[derive(Clone, ComputeSquaredDistance, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct Perspective(f32, f32, f32, f32);
/// A quaternion used to represent a rotation.
#[derive(Clone, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct Quaternion(f64, f64, f64, f64);
/// A decomposed 3d matrix.
#[derive(Clone, ComputeSquaredDistance, Copy, Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct MatrixDecomposed3D {
/// A translation function.
pub translate: Translate3D,
diff --git a/components/style/properties/longhand/background.mako.rs b/components/style/properties/longhand/background.mako.rs
index 3cf41d5ca0a..069f272e4c1 100644
--- a/components/style/properties/longhand/background.mako.rs
+++ b/components/style/properties/longhand/background.mako.rs
@@ -52,9 +52,7 @@ ${helpers.predefined_type("background-image", "ImageLayer",
"round" => Round,
"no-repeat" => NoRepeat);
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToCss)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum SpecifiedValue {
RepeatX,
RepeatY,
@@ -64,9 +62,7 @@ ${helpers.predefined_type("background-image", "ImageLayer",
pub mod computed_value {
pub use super::RepeatKeyword;
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct T(pub RepeatKeyword, pub RepeatKeyword);
}
diff --git a/components/style/properties/longhand/border.mako.rs b/components/style/properties/longhand/border.mako.rs
index 845a100f98e..7e33bb886f1 100644
--- a/components/style/properties/longhand/border.mako.rs
+++ b/components/style/properties/longhand/border.mako.rs
@@ -81,15 +81,11 @@ ${helpers.gecko_keyword_conversion(Keyword('border-style',
pub mod computed_value {
use cssparser::RGBA;
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct T(pub Option<Vec<RGBA>>);
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum SpecifiedValue {
None,
Colors(Vec<RGBAColor>),
@@ -232,15 +228,11 @@ ${helpers.predefined_type("border-image-outset", "LengthOrNumberRect",
pub mod computed_value {
pub use super::RepeatKeyword;
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToCss)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub struct T(pub RepeatKeyword, pub RepeatKeyword);
}
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToCss)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub struct SpecifiedValue(pub RepeatKeyword,
pub Option<RepeatKeyword>);
diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs
index f7b34b78f54..a6d23949d75 100644
--- a/components/style/properties/longhand/box.mako.rs
+++ b/components/style/properties/longhand/box.mako.rs
@@ -162,9 +162,8 @@
}
#[allow(non_camel_case_types)]
- #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+ #[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq, ToComputedValue)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub enum SpecifiedValue {
% for value in values:
${to_rust_ident(value)},
@@ -460,9 +459,7 @@ ${helpers.predefined_type("transition-delay",
pub use super::SpecifiedValue as T;
}
- #[derive(Clone, Debug, Eq, Hash, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct SpecifiedValue(pub Option<KeyframesName>);
impl SpecifiedValue {
@@ -555,9 +552,7 @@ ${helpers.predefined_type("animation-timing-function",
}
// https://drafts.csswg.org/css-animations/#animation-iteration-count
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToCss, ToComputedValue)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss, ToComputedValue)]
pub enum SpecifiedValue {
Number(f32),
Infinite,
@@ -689,9 +684,7 @@ ${helpers.predefined_type(
use values::computed;
use values::computed::{Length, LengthOrPercentage};
- #[derive(Clone, Copy, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub struct ComputedMatrix {
pub m11: CSSFloat, pub m12: CSSFloat, pub m13: CSSFloat, pub m14: CSSFloat,
pub m21: CSSFloat, pub m22: CSSFloat, pub m23: CSSFloat, pub m24: CSSFloat,
@@ -699,9 +692,7 @@ ${helpers.predefined_type(
pub m41: CSSFloat, pub m42: CSSFloat, pub m43: CSSFloat, pub m44: CSSFloat,
}
- #[derive(Clone, Copy, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub struct ComputedMatrixWithPercents {
pub m11: CSSFloat, pub m12: CSSFloat, pub m13: CSSFloat, pub m14: CSSFloat,
pub m21: CSSFloat, pub m22: CSSFloat, pub m23: CSSFloat, pub m24: CSSFloat,
@@ -733,9 +724,7 @@ ${helpers.predefined_type(
}
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum ComputedOperation {
Matrix(ComputedMatrix),
// For `-moz-transform` matrix and matrix3d.
@@ -767,9 +756,7 @@ ${helpers.predefined_type(
count: computed::Integer },
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct T(pub Option<Vec<ComputedOperation>>);
}
@@ -779,9 +766,7 @@ ${helpers.predefined_type(
/// Multiple transform functions compose a transformation.
///
/// Some transformations can be expressed by other more general functions.
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum SpecifiedOperation {
/// Represents a 2D 2x3 matrix.
Matrix(Matrix<Number>),
@@ -970,9 +955,7 @@ ${helpers.predefined_type(
}
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct SpecifiedValue(Vec<SpecifiedOperation>);
impl ToCss for SpecifiedValue {
@@ -1688,9 +1671,7 @@ ${helpers.predefined_type("transform-origin",
}
bitflags! {
- #[derive(ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(MallocSizeOf, ToComputedValue)]
pub flags SpecifiedValue: u8 {
const LAYOUT = 0x01,
const STYLE = 0x02,
@@ -1829,9 +1810,7 @@ ${helpers.single_keyword("-moz-orient",
pub use super::SpecifiedValue as T;
}
- #[derive(Clone, Debug, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum SpecifiedValue {
Auto,
AnimateableFeatures(Vec<CustomIdent>),
diff --git a/components/style/properties/longhand/counters.mako.rs b/components/style/properties/longhand/counters.mako.rs
index a5b54fab150..b7b9cc21f4d 100644
--- a/components/style/properties/longhand/counters.mako.rs
+++ b/components/style/properties/longhand/counters.mako.rs
@@ -36,9 +36,7 @@
#[cfg(feature = "gecko")]
use values::specified::Attr;
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)]
+ #[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum ContentItem {
/// Literal string content.
String(String),
@@ -98,9 +96,7 @@
}
}
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)]
+ #[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum T {
Normal,
None,
@@ -249,9 +245,7 @@
use style_traits::ToCss;
use values::CustomIdent;
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct T(pub Vec<(CustomIdent, i32)>);
impl ToCss for T {
diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs
index 04d6c694a21..9cf3fd1b4fd 100644
--- a/components/style/properties/longhand/font.mako.rs
+++ b/components/style/properties/longhand/font.mako.rs
@@ -91,25 +91,22 @@ macro_rules! impl_gecko_keyword_conversions {
use Atom;
pub use self::FontFamily as SingleComputedValue;
- #[derive(Clone, Debug, Eq, Hash, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+ #[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub enum FontFamily {
FamilyName(FamilyName),
Generic(Atom),
}
- #[derive(Clone, Debug, Eq, Hash, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+ #[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub struct FamilyName {
pub name: Atom,
pub syntax: FamilyNameSyntax,
}
- #[derive(Clone, Debug, Eq, Hash, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+ #[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub enum FamilyNameSyntax {
/// The family name was specified in a quoted form, e.g. "Font Name"
/// or 'Font Name'.
@@ -334,7 +331,7 @@ macro_rules! impl_gecko_keyword_conversions {
}
#[cfg(feature = "servo")]
- #[derive(Clone, Debug, Eq, Hash, HeapSizeOf, PartialEq)]
+ #[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
pub struct FontFamilyList(Vec<FontFamily>);
#[cfg(feature = "gecko")]
@@ -460,7 +457,7 @@ macro_rules! impl_gecko_keyword_conversions {
}
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct T(pub FontFamilyList);
#[cfg(feature = "gecko")]
@@ -625,9 +622,7 @@ ${helpers.single_keyword_system("font-variant-caps",
use properties::longhands::system_font::SystemFont;
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Copy, Debug, Eq, PartialEq, ToCss)]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToCss)]
pub enum SpecifiedValue {
Normal,
Bold,
@@ -679,9 +674,9 @@ ${helpers.single_keyword_system("font-variant-caps",
///
/// However, system fonts may provide other values. Pango
/// may provide 350, 380, and 1000 (on top of the existing values), for example.
- #[derive(Clone, ComputeSquaredDistance, Copy, Debug, Eq, Hash, PartialEq, ToCss)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+ #[derive(Clone, ComputeSquaredDistance, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq,
+ ToCss)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub struct T(pub u16);
impl T {
@@ -927,9 +922,7 @@ ${helpers.single_keyword_system("font-variant-caps",
use properties::longhands::system_font::SystemFont;
- #[derive(Clone, Copy, Debug, PartialEq, ToCss)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum SpecifiedValue {
None,
Number(specified::Number),
@@ -976,9 +969,8 @@ ${helpers.single_keyword_system("font-variant-caps",
use values::CSSFloat;
use values::animated::{ToAnimatedValue, ToAnimatedZero};
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToCss)]
+ #[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq,
+ ToCss)]
pub enum T {
#[animation(error)]
None,
@@ -1051,9 +1043,7 @@ ${helpers.single_keyword_system("font-variant-caps",
pub use super::SpecifiedValue as T;
}
- #[derive(Clone, Debug, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct SpecifiedValue {
pub weight: bool,
pub style: bool,
@@ -1159,9 +1149,7 @@ ${helpers.single_keyword_system("font-kerning",
use values::CustomIdent;
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum VariantAlternates {
Stylistic(CustomIdent),
Styleset(Box<[CustomIdent]>),
@@ -1172,14 +1160,10 @@ ${helpers.single_keyword_system("font-kerning",
HistoricalForms,
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct VariantAlternatesList(pub Box<[VariantAlternates]>);
- #[derive(Clone, Debug, PartialEq, ToCss)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum SpecifiedValue {
Value(VariantAlternatesList),
System(SystemFont)
@@ -1268,7 +1252,7 @@ ${helpers.single_keyword_system("font-kerning",
}
bitflags! {
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub flags ParsingFlags: u8 {
const NORMAL = 0,
const HISTORICAL_FORMS = 0x01,
@@ -1375,8 +1359,7 @@ macro_rules! exclusive_value {
bitflags! {
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(MallocSizeOf)]
pub flags VariantEastAsian: u16 {
const NORMAL = 0,
const JIS78 = 0x01,
@@ -1521,8 +1504,7 @@ macro_rules! exclusive_value {
bitflags! {
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(MallocSizeOf)]
pub flags VariantLigatures: u16 {
const NORMAL = 0,
const NONE = 0x01,
@@ -1681,8 +1663,7 @@ macro_rules! exclusive_value {
bitflags! {
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(MallocSizeOf)]
pub flags VariantNumeric: u8 {
const NORMAL = 0,
const LINING_NUMS = 0x01,
@@ -1907,9 +1888,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
use style_traits::ToCss;
use byteorder::{BigEndian, ByteOrder};
- #[derive(Clone, Debug, Eq, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq)]
pub enum SpecifiedValue {
Normal,
Override(String),
@@ -1965,9 +1944,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
// OpenType "language system" tag, so we should be able to compute
// it and store it as a 32-bit integer
// (see http://www.microsoft.com/typography/otspec/languagetags.htm).
- #[derive(Clone, Copy, Debug, Eq, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq)]
pub struct T(pub u32);
}
@@ -2074,9 +2051,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
}
}
- #[derive(Clone, Debug, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct T(pub Atom);
}
@@ -2278,9 +2253,7 @@ ${helpers.single_keyword("-moz-math-variant",
}
}
- #[derive(Clone, Debug, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
/// text-zoom. Enable if true, disable if false
pub struct T(pub bool);
}
@@ -2473,7 +2446,7 @@ ${helpers.single_keyword("-moz-math-variant",
// dummy system font module that does nothing
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, ToCss)]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[cfg_attr(feature = "servo", derive(MallocSizeOf))]
/// void enum for system font, can never exist
pub enum SystemFont {}
impl SystemFont {
diff --git a/components/style/properties/longhand/inherited_box.mako.rs b/components/style/properties/longhand/inherited_box.mako.rs
index 6b7ad377c02..56887723678 100644
--- a/components/style/properties/longhand/inherited_box.mako.rs
+++ b/components/style/properties/longhand/inherited_box.mako.rs
@@ -70,9 +70,7 @@ ${helpers.single_keyword("image-rendering",
use std::f64::consts::PI;
const TWO_PI: f64 = 2.0 * PI;
- #[derive(Clone, Copy, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub struct SpecifiedValue {
pub angle: Option<Angle>,
pub flipped: bool
@@ -102,9 +100,7 @@ ${helpers.single_keyword("image-rendering",
use style_traits::ToCss;
use values::specified::Angle;
- #[derive(Clone, Copy, Debug, Eq, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq)]
pub enum Orientation {
Angle0 = 0,
Angle90,
@@ -135,9 +131,7 @@ ${helpers.single_keyword("image-rendering",
}
}
- #[derive(Clone, Copy, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub enum T {
FromImage,
AngleWithFlipped(Orientation, bool),
diff --git a/components/style/properties/longhand/inherited_svg.mako.rs b/components/style/properties/longhand/inherited_svg.mako.rs
index 6b49c1ed5cc..5f1e41ba0da 100644
--- a/components/style/properties/longhand/inherited_svg.mako.rs
+++ b/components/style/properties/longhand/inherited_svg.mako.rs
@@ -166,9 +166,7 @@ ${helpers.predefined_type("marker-end", "UrlOrNone", "Either::Second(None_)",
///
/// Higher priority values, i.e. the values specified first,
/// will be painted first (and may be covered by paintings of lower priority)
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct SpecifiedValue(pub u8);
impl SpecifiedValue {
diff --git a/components/style/properties/longhand/inherited_text.mako.rs b/components/style/properties/longhand/inherited_text.mako.rs
index e42830309d3..5416433bedd 100644
--- a/components/style/properties/longhand/inherited_text.mako.rs
+++ b/components/style/properties/longhand/inherited_text.mako.rs
@@ -285,9 +285,7 @@ ${helpers.predefined_type("word-spacing",
use std::fmt;
use style_traits::ToCss;
- #[derive(Clone, Copy, Debug, Default, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, Default, MallocSizeOf, PartialEq)]
pub struct SpecifiedValue {
pub underline: bool,
pub overline: bool,
@@ -408,36 +406,29 @@ ${helpers.predefined_type(
pub mod computed_value {
- #[derive(Clone, Debug, PartialEq, ToCss)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf, ToComputedValue))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
+ #[cfg_attr(feature = "servo", derive(ToComputedValue))]
pub enum T {
Keyword(KeywordValue),
None,
String(String),
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct KeywordValue {
pub fill: bool,
pub shape: super::ShapeKeyword,
}
}
- #[derive(Clone, Debug, PartialEq, ToCss)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum SpecifiedValue {
Keyword(KeywordValue),
None,
String(String),
}
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum KeywordValue {
Fill(bool),
Shape(ShapeKeyword),
@@ -604,9 +595,7 @@ ${helpers.predefined_type(
"left" => Left);
add_impls_for_keyword_enum!(HorizontalWritingModeValue);
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToComputedValue, ToCss)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub struct SpecifiedValue(pub HorizontalWritingModeValue, pub VerticalWritingModeValue);
pub mod computed_value {
diff --git a/components/style/properties/longhand/list.mako.rs b/components/style/properties/longhand/list.mako.rs
index 8f9b8d9b103..4f3442da376 100644
--- a/components/style/properties/longhand/list.mako.rs
+++ b/components/style/properties/longhand/list.mako.rs
@@ -104,9 +104,7 @@ ${helpers.single_keyword("list-style-position", "outside inside", animation_valu
pub mod computed_value {
use values::specified::UrlOrNone;
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToCss)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub struct T(pub UrlOrNone);
// FIXME(nox): This is wrong, there are different types for specified
@@ -146,9 +144,7 @@ ${helpers.single_keyword("list-style-position", "outside inside", animation_valu
pub use self::computed_value::T as SpecifiedValue;
pub mod computed_value {
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, PartialEq, ToComputedValue)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct T(pub Vec<(String, String)>);
}
diff --git a/components/style/properties/longhand/pointing.mako.rs b/components/style/properties/longhand/pointing.mako.rs
index 858f6f10f73..3c7d693f302 100644
--- a/components/style/properties/longhand/pointing.mako.rs
+++ b/components/style/properties/longhand/pointing.mako.rs
@@ -21,9 +21,7 @@
#[cfg(feature = "gecko")]
use values::specified::url::SpecifiedUrl;
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum Keyword {
Auto,
Cursor(Cursor),
diff --git a/components/style/properties/longhand/position.mako.rs b/components/style/properties/longhand/position.mako.rs
index 45f7c077188..9a4ec5c4b3f 100644
--- a/components/style/properties/longhand/position.mako.rs
+++ b/components/style/properties/longhand/position.mako.rs
@@ -294,17 +294,13 @@ ${helpers.predefined_type("object-position",
pub type SpecifiedValue = computed_value::T;
pub mod computed_value {
- #[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum AutoFlow {
Row,
Column,
}
- #[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct T {
pub autoflow: AutoFlow,
pub dense: bool,
diff --git a/components/style/properties/longhand/table.mako.rs b/components/style/properties/longhand/table.mako.rs
index 788805878b9..67c4e25accb 100644
--- a/components/style/properties/longhand/table.mako.rs
+++ b/components/style/properties/longhand/table.mako.rs
@@ -19,9 +19,7 @@ ${helpers.single_keyword("table-layout", "auto fixed",
use std::fmt;
use style_traits::ToCss;
- #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct T(pub i32);
impl ToCss for T {
diff --git a/components/style/properties/longhand/text.mako.rs b/components/style/properties/longhand/text.mako.rs
index d59063eba63..a88d5199797 100644
--- a/components/style/properties/longhand/text.mako.rs
+++ b/components/style/properties/longhand/text.mako.rs
@@ -19,18 +19,14 @@
use style_traits::ToCss;
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, Eq, PartialEq, ToCss)]
+ #[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToCss)]
pub enum Side {
Clip,
Ellipsis,
String(Box<str>),
}
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Debug, Eq, PartialEq, ToCss)]
+ #[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToCss)]
pub struct SpecifiedValue {
pub first: Side,
pub second: Option<Side>
@@ -39,9 +35,7 @@
pub mod computed_value {
pub use super::Side;
- #[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct T {
// When the specified value only has one side, that's the "second"
// side, and the sides are logical, so "second" means "end". The
@@ -153,9 +147,7 @@ ${helpers.single_keyword("unicode-bidi",
use style_traits::ToCss;
bitflags! {
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(ToComputedValue)]
+ #[derive(MallocSizeOf, ToComputedValue)]
pub flags SpecifiedValue: u8 {
const NONE = 0,
const UNDERLINE = 0x01,
diff --git a/components/style/properties/longhand/ui.mako.rs b/components/style/properties/longhand/ui.mako.rs
index 5976b01b288..5115e31d6f5 100644
--- a/components/style/properties/longhand/ui.mako.rs
+++ b/components/style/properties/longhand/ui.mako.rs
@@ -48,9 +48,7 @@ ${helpers.single_keyword("-moz-window-shadow", "none default menu tooltip sheet"
use style_traits::ToCss;
pub mod computed_value {
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
+ #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct T(pub bool);
}
diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs
index e9bf69849c1..517b0a4e9ab 100644
--- a/components/style/properties/properties.mako.rs
+++ b/components/style/properties/properties.mako.rs
@@ -250,9 +250,7 @@ static ${name}: LonghandIdSet = LonghandIdSet {
</%def>
/// A set of longhand properties
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct LonghandIdSet {
storage: [u32; (${len(data.longhands)} - 1 + 32) / 32]
}
@@ -400,9 +398,7 @@ impl PropertyDeclarationIdSet {
}
/// An enum to represent a CSS Wide keyword.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, Eq, PartialEq, ToCss)]
+#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToCss)]
pub enum CSSWideKeyword {
/// The `initial` keyword.
Initial,
@@ -465,9 +461,7 @@ bitflags! {
}
/// An identifier for a given longhand property.
-#[derive(Clone, Copy, Eq, Hash, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Eq, Hash, MallocSizeOf, PartialEq)]
pub enum LonghandId {
% for i, property in enumerate(data.longhands):
/// ${property.name}
@@ -731,9 +725,7 @@ impl LonghandId {
}
/// An identifier for a given shorthand property.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, ToCss)]
+#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, PartialEq, ToCss)]
pub enum ShorthandId {
% for property in data.shorthands:
/// ${property.name}
@@ -1022,7 +1014,7 @@ impl<'a, T: ToCss> ToCss for DeclaredValue<'a, T> {
/// An identifier for a given property declaration, which can be either a
/// longhand or a custom property.
#[derive(Clone, Copy, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum PropertyDeclarationId<'a> {
/// A longhand.
Longhand(LonghandId),
@@ -1810,12 +1802,10 @@ pub mod style_structs {
% for style_struct in data.active_style_structs():
% if style_struct.name == "Font":
- #[derive(Clone, Debug)]
+ #[derive(Clone, Debug, MallocSizeOf)]
% else:
- #[derive(Clone, Debug, PartialEq)]
+ #[derive(Clone, Debug, MallocSizeOf, PartialEq)]
% endif
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
/// The ${style_struct.name} style struct.
pub struct ${style_struct.name} {
% for longhand in style_struct.longhands:
@@ -3575,7 +3565,7 @@ pub fn adjust_border_width(style: &mut StyleBuilder) {
/// An identifier for a given alias property.
#[derive(Clone, Copy, Eq, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum AliasId {
% for i, property in enumerate(data.all_aliases()):
/// ${property.name}
diff --git a/components/style/rule_tree/mod.rs b/components/style/rule_tree/mod.rs
index c7fbfcd3904..49c42a7f223 100644
--- a/components/style/rule_tree/mod.rs
+++ b/components/style/rule_tree/mod.rs
@@ -9,8 +9,6 @@
use applicable_declarations::ApplicableDeclarationList;
#[cfg(feature = "gecko")]
use gecko::selector_parser::PseudoElement;
-#[cfg(feature = "servo")]
-use heapsize::HeapSizeOf;
#[cfg(feature = "gecko")]
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use properties::{Importance, LonghandIdSet, PropertyDeclarationBlock};
@@ -46,7 +44,7 @@ use thread_state;
/// logs from http://logs.glob.uno/?c=mozilla%23servo&s=3+Apr+2017&e=3+Apr+2017#c644094
/// to se a discussion about the different memory orderings used here.
#[derive(Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct RuleTree {
root: StrongRuleNode,
}
@@ -463,7 +461,7 @@ const RULE_TREE_GC_INTERVAL: usize = 300;
/// [1]: https://drafts.csswg.org/css-cascade/#cascade-origin
#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum CascadeLevel {
/// Normal User-Agent rules.
UANormal = 0,
@@ -827,10 +825,7 @@ pub struct StrongRuleNode {
}
#[cfg(feature = "servo")]
-impl HeapSizeOf for StrongRuleNode {
- fn heap_size_of_children(&self) -> usize { 0 }
-}
-
+malloc_size_of_is_0!(StrongRuleNode);
impl StrongRuleNode {
fn new(n: Box<RuleNode>) -> Self {
diff --git a/components/style/selector_map.rs b/components/style/selector_map.rs
index 9e0f01a2c9f..4d1ec302f15 100644
--- a/components/style/selector_map.rs
+++ b/components/style/selector_map.rs
@@ -94,9 +94,7 @@ pub trait SelectorMapEntry : Sized + Clone {
/// * https://bugzilla.mozilla.org/show_bug.cgi?id=681755
///
/// TODO: Tune the initial capacity of the HashMap
-#[derive(Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf)]
pub struct SelectorMap<T: 'static> {
/// A hash from an ID to rules which contain that ID selector.
pub id_hash: MaybeCaseInsensitiveHashMap<Atom, SmallVec<[T; 1]>>,
@@ -465,9 +463,7 @@ fn find_bucket<'a>(mut iter: SelectorIter<'a, SelectorImpl>) -> Bucket<'a> {
}
/// Wrapper for PrecomputedHashMap that does ASCII-case-insensitive lookup in quirks mode.
-#[derive(Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf)]
pub struct MaybeCaseInsensitiveHashMap<K: PrecomputedHash + Hash + Eq, V: 'static>(PrecomputedDiagnosticHashMap<K, V>);
// FIXME(Manishearth) the 'static bound can be removed when
diff --git a/components/style/selector_parser.rs b/components/style/selector_parser.rs
index 85b4d09d758..55dba1e3a3b 100644
--- a/components/style/selector_parser.rs
+++ b/components/style/selector_parser.rs
@@ -35,7 +35,7 @@ pub use servo::restyle_damage::ServoRestyleDamage as RestyleDamage;
pub use gecko::restyle_damage::GeckoRestyleDamage as RestyleDamage;
/// Servo's selector parser.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct SelectorParser<'a> {
/// The origin of the stylesheet we're parsing.
pub stylesheet_origin: Origin,
@@ -103,8 +103,7 @@ pub enum PseudoElementCascadeType {
}
/// A per-functional-pseudo map, from a given pseudo to a `T`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(MallocSizeOf)]
pub struct PerPseudoElementMap<T> {
entries: [Option<T>; SIMPLE_PSEUDO_COUNT],
}
diff --git a/components/style/servo/media_queries.rs b/components/style/servo/media_queries.rs
index 9594247ef8e..ecdbf4aa9b3 100644
--- a/components/style/servo/media_queries.rs
+++ b/components/style/servo/media_queries.rs
@@ -27,7 +27,7 @@ use values::specified;
/// is displayed in.
///
/// This is the struct against which media queries are evaluated.
-#[derive(HeapSizeOf)]
+#[derive(MallocSizeOf)]
pub struct Device {
/// The current media type used by de device.
media_type: MediaType,
@@ -44,14 +44,14 @@ pub struct Device {
/// other style being computed at the same time, given we need the style of
/// the parent to compute everything else. So it is correct to just use
/// a relaxed atomic here.
- #[ignore_heap_size_of = "Pure stack type"]
+ #[ignore_malloc_size_of = "Pure stack type"]
root_font_size: AtomicIsize,
/// Whether any styles computed in the document relied on the root font-size
/// by using rem units.
- #[ignore_heap_size_of = "Pure stack type"]
+ #[ignore_malloc_size_of = "Pure stack type"]
used_root_font_size: AtomicBool,
/// Whether any styles computed in the document relied on the viewport size.
- #[ignore_heap_size_of = "Pure stack type"]
+ #[ignore_malloc_size_of = "Pure stack type"]
used_viewport_units: AtomicBool,
}
@@ -153,7 +153,7 @@ impl Device {
///
/// Only `pub` for unit testing, please don't use it directly!
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum ExpressionKind {
/// <http://dev.w3.org/csswg/mediaqueries-3/#width>
Width(Range<specified::Length>),
@@ -163,7 +163,7 @@ pub enum ExpressionKind {
///
/// <http://dev.w3.org/csswg/mediaqueries-3/#media1>
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct Expression(pub ExpressionKind);
impl Expression {
@@ -240,7 +240,7 @@ impl ToCss for Expression {
/// Only public for testing, implementation details of `Expression` may change
/// for Stylo.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum Range<T> {
/// At least the inner value.
Min(T),
diff --git a/components/style/servo/restyle_damage.rs b/components/style/servo/restyle_damage.rs
index ca8a5ea0046..cec14dfb31f 100644
--- a/components/style/servo/restyle_damage.rs
+++ b/components/style/servo/restyle_damage.rs
@@ -8,7 +8,6 @@
#![deny(missing_docs)]
use computed_values::display;
-use heapsize::HeapSizeOf;
use matching::{StyleChange, StyleDifference};
use properties::ComputedValues;
use std::fmt;
@@ -53,9 +52,7 @@ bitflags! {
}
}
-impl HeapSizeOf for ServoRestyleDamage {
- fn heap_size_of_children(&self) -> usize { 0 }
-}
+malloc_size_of_is_0!(ServoRestyleDamage);
impl ServoRestyleDamage {
/// Compute the `StyleDifference` (including the appropriate restyle damage)
diff --git a/components/style/servo/selector_parser.rs b/components/style/servo/selector_parser.rs
index 719e76f42f2..bffb436cf1c 100644
--- a/components/style/servo/selector_parser.rs
+++ b/components/style/servo/selector_parser.rs
@@ -30,7 +30,7 @@ use style_traits::{ParseError, StyleParseErrorKind};
///
/// NB: If you add to this list, be sure to update `each_simple_pseudo_element` too.
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[allow(missing_docs)]
#[repr(usize)]
pub enum PseudoElement {
@@ -251,7 +251,7 @@ pub type PseudoClassStringArg = Box<str>;
/// A non tree-structural pseudo-class.
/// See https://drafts.csswg.org/selectors-4/#structural-pseudos
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[allow(missing_docs)]
pub enum NonTSPseudoClass {
Active,
@@ -368,7 +368,7 @@ impl NonTSPseudoClass {
/// The abstract struct we implement the selector parser implementation on top
/// of.
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct SelectorImpl;
impl ::selectors::SelectorImpl for SelectorImpl {
@@ -601,7 +601,7 @@ impl DerefMut for SnapshotMap {
/// Servo's version of an element snapshot.
#[derive(Debug)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct ServoElementSnapshot {
/// The stored state of the element.
pub state: Option<ElementState>,
diff --git a/components/style/servo/url.rs b/components/style/servo/url.rs
index 0169ff9c884..6dc1d46d2aa 100644
--- a/components/style/servo/url.rs
+++ b/components/style/servo/url.rs
@@ -22,7 +22,7 @@ use values::computed::{Context, ToComputedValue, ComputedUrl};
///
/// However, this approach is still not necessarily optimal: See
/// <https://bugzilla.mozilla.org/show_bug.cgi?id=1347435#c6>
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct SpecifiedUrl {
/// The original URI. This might be optional since we may insert computed
/// values of images into the cascade directly, and we don't bother to
@@ -30,6 +30,7 @@ pub struct SpecifiedUrl {
///
/// Refcounted since cloning this should be cheap and data: uris can be
/// really large.
+ #[ignore_malloc_size_of = "Arc"]
original: Option<Arc<String>>,
/// The resolved value for the url, if valid.
diff --git a/components/style/shared_lock.rs b/components/style/shared_lock.rs
index 1e23ed8a12b..29b92b29d36 100644
--- a/components/style/shared_lock.rs
+++ b/components/style/shared_lock.rs
@@ -26,10 +26,10 @@ use stylesheets::Origin;
/// but that may not be web-compatible and may need to be changed (at which
/// point Servo could use AtomicRefCell too).
#[derive(Clone)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct SharedRwLock {
#[cfg(feature = "servo")]
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
arc: Arc<RwLock<()>>,
#[cfg(feature = "gecko")]
diff --git a/components/style/stylesheet_set.rs b/components/style/stylesheet_set.rs
index 0b5079a0751..fcecf46947a 100644
--- a/components/style/stylesheet_set.rs
+++ b/components/style/stylesheet_set.rs
@@ -12,7 +12,7 @@ use std::slice;
use stylesheets::{Origin, OriginSet, OriginSetIterator, PerOrigin, StylesheetInDocument};
/// Entry for a StylesheetSet.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
struct StylesheetSetEntry<S>
where
S: StylesheetInDocument + PartialEq + 'static,
@@ -103,7 +103,7 @@ where
/// The validity of the data in a given cascade origin.
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum OriginValidity {
/// The origin is clean, all the data already there is valid, though we may
/// have new sheets at the end.
@@ -260,7 +260,7 @@ where
}
}
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
struct SheetCollection<S>
where
S: StylesheetInDocument + PartialEq + 'static,
@@ -366,7 +366,7 @@ where
}
/// The set of stylesheets effective for a given document.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct StylesheetSet<S>
where
S: StylesheetInDocument + PartialEq + 'static,
diff --git a/components/style/stylesheets/keyframes_rule.rs b/components/style/stylesheets/keyframes_rule.rs
index a3e978326e3..d85b0e06ea6 100644
--- a/components/style/stylesheets/keyframes_rule.rs
+++ b/components/style/stylesheets/keyframes_rule.rs
@@ -96,9 +96,7 @@ impl DeepCloneWithLock for KeyframesRule {
/// A number from 0 to 1, indicating the percentage of the animation when this
/// keyframe should run.
-#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd)]
pub struct KeyframePercentage(pub f32);
impl ::std::cmp::Ord for KeyframePercentage {
@@ -260,16 +258,14 @@ impl DeepCloneWithLock for Keyframe {
/// declarations to apply.
///
/// TODO: Find a better name for this?
-#[derive(Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf)]
pub enum KeyframesStepValue {
/// A step formed by a declaration block specified by the CSS.
Declarations {
/// The declaration block per se.
#[cfg_attr(feature = "gecko",
ignore_malloc_size_of = "XXX: Primary ref, measure if DMD says it's worthwhile")]
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
block: Arc<Locked<PropertyDeclarationBlock>>
},
/// A synthetic step computed from the current computed values at the time
@@ -278,9 +274,7 @@ pub enum KeyframesStepValue {
}
/// A single step from a keyframe animation.
-#[derive(Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf)]
pub struct KeyframesStep {
/// The percentage of the animation duration when this step starts.
pub start_percentage: KeyframePercentage,
@@ -350,9 +344,7 @@ impl KeyframesStep {
/// of keyframes, in order.
///
/// It only takes into account animable properties.
-#[derive(Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Debug, MallocSizeOf)]
pub struct KeyframesAnimation {
/// The difference steps of the animation.
pub steps: Vec<KeyframesStep>,
diff --git a/components/style/stylesheets/origin.rs b/components/style/stylesheets/origin.rs
index f19805b5d36..a64214691c0 100644
--- a/components/style/stylesheets/origin.rs
+++ b/components/style/stylesheets/origin.rs
@@ -12,7 +12,7 @@ use std::ops::BitOrAssign;
/// <https://drafts.csswg.org/css-cascade/#cascading-origins>
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(u8)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum Origin {
/// <https://drafts.csswg.org/css-cascade/#cascade-origin-user-agent>
UserAgent = 1 << 0,
@@ -40,7 +40,7 @@ impl Origin {
bitflags! {
/// A set of origins. This is equivalent to Gecko's OriginFlags.
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub flags OriginSet: u8 {
/// <https://drafts.csswg.org/css-cascade/#cascade-origin-user-agent>
const ORIGIN_USER_AGENT = Origin::UserAgent as u8,
@@ -104,9 +104,7 @@ impl Iterator for OriginSetIterator {
}
/// An object that stores a `T` for each origin of the CSS cascade.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Debug, Default)]
+#[derive(Debug, Default, MallocSizeOf)]
pub struct PerOrigin<T> {
/// Data for `Origin::UserAgent`.
pub user_agent: T,
diff --git a/components/style/stylesheets/rule_parser.rs b/components/style/stylesheets/rule_parser.rs
index 2c25d64e8c8..6fddada91d7 100644
--- a/components/style/stylesheets/rule_parser.rs
+++ b/components/style/stylesheets/rule_parser.rs
@@ -100,9 +100,7 @@ pub enum State {
Body = 4,
}
-#[derive(Clone, Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf)]
/// Vendor prefix.
pub enum VendorPrefix {
/// -moz prefix.
diff --git a/components/style/stylesheets/stylesheet.rs b/components/style/stylesheets/stylesheet.rs
index e8d22e19bb2..29ffbf1fa98 100644
--- a/components/style/stylesheets/stylesheet.rs
+++ b/components/style/stylesheets/stylesheet.rs
@@ -38,7 +38,7 @@ pub struct UserAgentStylesheets {
/// A set of namespaces applying to a given stylesheet.
///
/// The namespace id is used in gecko
-#[derive(Clone, Debug, Default)]
+#[derive(Clone, Debug, Default, MallocSizeOf)]
#[allow(missing_docs)]
pub struct Namespaces {
pub default: Option<(Namespace, NamespaceId)>,
@@ -275,9 +275,9 @@ impl StylesheetInDocument for Stylesheet {
/// A simple wrapper over an `Arc<Stylesheet>`, with pointer comparison, and
/// suitable for its use in a `StylesheetSet`.
#[derive(Clone)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct DocumentStyleSheet(
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
pub Arc<Stylesheet>
);
diff --git a/components/style/stylesheets/viewport_rule.rs b/components/style/stylesheets/viewport_rule.rs
index ec6d32f23fb..ddb91955e64 100644
--- a/components/style/stylesheets/viewport_rule.rs
+++ b/components/style/stylesheets/viewport_rule.rs
@@ -78,7 +78,7 @@ macro_rules! declare_viewport_descriptor_inner {
$number_of_variants: expr
) => {
#[derive(Clone, Debug, PartialEq)]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+ #[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[allow(missing_docs)]
pub enum ViewportDescriptor {
$(
@@ -140,7 +140,7 @@ trait FromMeta: Sized {
/// * http://dev.w3.org/csswg/css-device-adapt/#min-max-width-desc
/// * http://dev.w3.org/csswg/css-device-adapt/#extend-to-zoom
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[allow(missing_docs)]
pub enum ViewportLength {
Specified(LengthOrPercentageOrAuto),
@@ -231,7 +231,7 @@ struct ViewportRuleParser<'a, 'b: 'a> {
}
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[allow(missing_docs)]
pub struct ViewportDescriptorDeclaration {
pub origin: Origin,
@@ -330,7 +330,7 @@ impl<'a, 'b, 'i> DeclarationParser<'i> for ViewportRuleParser<'a, 'b> {
/// A `@viewport` rule.
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct ViewportRule {
/// The declarations contained in this @viewport rule.
pub declarations: Vec<ViewportDescriptorDeclaration>
diff --git a/components/style/stylist.rs b/components/style/stylist.rs
index 324bf2301af..e40c1a7c842 100644
--- a/components/style/stylist.rs
+++ b/components/style/stylist.rs
@@ -182,11 +182,11 @@ impl UserAgentCascadeData {
/// All the computed information for a stylesheet.
#[derive(Default)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
struct DocumentCascadeData {
#[cfg_attr(
feature = "servo",
- ignore_heap_size_of = "Arc, owned by UserAgentCascadeDataCache"
+ ignore_malloc_size_of = "Arc, owned by UserAgentCascadeDataCache"
)]
user_agent: Arc<UserAgentCascadeData>,
user: CascadeData,
@@ -338,7 +338,7 @@ impl DocumentCascadeData {
/// A wrapper over a StylesheetSet that can be `Sync`, since it's only used and
/// exposed via mutable methods in the `Stylist`.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
struct StylistStylesheetSet(StylesheetSet<StylistSheet>);
// Read above to see why this is fine.
unsafe impl Sync for StylistStylesheetSet {}
@@ -370,7 +370,7 @@ impl ops::DerefMut for StylistStylesheetSet {
///
/// This structure is effectively created once per pipeline, in the
/// LayoutThread corresponding to that pipeline.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct Stylist {
/// Device that the stylist is currently evaluating against.
///
@@ -393,7 +393,7 @@ pub struct Stylist {
stylesheets: StylistStylesheetSet,
/// If true, the quirks-mode stylesheet is applied.
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "defined in selectors")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "defined in selectors")]
quirks_mode: QuirksMode,
/// Selector maps for all of the style sheets in the stylist, after
@@ -1517,7 +1517,7 @@ impl Stylist {
/// This struct holds data which users of Stylist may want to extract
/// from stylesheets which can be done at the same time as updating.
#[derive(Debug, Default)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct ExtraStyleData {
/// A list of effective font-face rules and their origin.
#[cfg(feature = "gecko")]
@@ -1783,7 +1783,7 @@ impl<'a> SelectorVisitor for StylistSelectorVisitor<'a> {
///
/// FIXME(emilio): Consider renaming and splitting in `CascadeData` and
/// `InvalidationData`? That'd make `clear_cascade_data()` clearer.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Debug)]
struct CascadeData {
/// Rules from stylesheets at this `CascadeData`'s origin.
@@ -1808,7 +1808,7 @@ struct CascadeData {
/// to avoid taking element snapshots when an irrelevant attribute changes.
/// (We don't bother storing the namespace, since namespaced attributes
/// are rare.)
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "just an array")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "just an array")]
attribute_dependencies: NonCountingBloomFilter,
/// Whether `"style"` appears in an attribute selector. This is not common,
@@ -1828,13 +1828,13 @@ struct CascadeData {
/// hence in our selector maps). Used to determine when sharing styles is
/// safe: we disallow style sharing for elements whose id matches this
/// filter, and hence might be in one of our selector maps.
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "just an array")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "just an array")]
mapped_ids: NonCountingBloomFilter,
/// Selectors that require explicit cache revalidation (i.e. which depend
/// on state that is not otherwise visible to the cache, like attributes or
/// tree-structural state like child index and pseudos).
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
selectors_for_cache_revalidation: SelectorMap<RevalidationSelectorAndHashes>,
/// Effective media query results cached from the last rebuild.
@@ -2251,21 +2251,16 @@ impl Default for CascadeData {
/// A rule, that wraps a style rule, but represents a single selector of the
/// rule.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug)]
+#[derive(Clone, Debug, MallocSizeOf)]
pub struct Rule {
/// The selector this struct represents. We store this and the
/// any_{important,normal} booleans inline in the Rule to avoid
/// pointer-chasing when gathering applicable declarations, which
/// can ruin performance when there are a lot of rules.
- #[cfg_attr(feature = "gecko",
- ignore_malloc_size_of = "CssRules have primary refs, we measure there")]
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[ignore_malloc_size_of = "CssRules have primary refs, we measure there"]
pub selector: Selector<SelectorImpl>,
/// The ancestor hashes associated with the selector.
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "No heap data")]
pub hashes: AncestorHashes,
/// The source order this style rule appears in. Note that we only use
@@ -2277,7 +2272,7 @@ pub struct Rule {
#[cfg_attr(feature = "gecko",
ignore_malloc_size_of =
"Secondary ref. Primary ref is in StyleRule under Stylesheet.")]
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
pub style_rule: Arc<Locked<StyleRule>>,
}
diff --git a/components/style/values/animated/color.rs b/components/style/values/animated/color.rs
index 5c891709374..4674cca8bb9 100644
--- a/components/style/values/animated/color.rs
+++ b/components/style/values/animated/color.rs
@@ -11,7 +11,7 @@ use values::distance::{ComputeSquaredDistance, SquaredDistance};
///
/// Unlike in computed values, each component value may exceed the
/// range `[0.0, 1.0]`.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, Copy, Debug, PartialEq, ToAnimatedZero)]
pub struct RGBA {
/// The red component.
@@ -70,7 +70,7 @@ impl ComputeSquaredDistance for RGBA {
}
#[allow(missing_docs)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Color {
pub color: RGBA,
diff --git a/components/style/values/animated/effects.rs b/components/style/values/animated/effects.rs
index 95a999db54b..e677d5a1a8e 100644
--- a/components/style/values/animated/effects.rs
+++ b/components/style/values/animated/effects.rs
@@ -28,7 +28,7 @@ pub type TextShadowList = ShadowList<SimpleShadow>;
/// An animated value for shadow lists.
///
/// <https://drafts.csswg.org/css-transitions/#animtype-shadow-list>
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, Debug, PartialEq)]
pub struct ShadowList<Shadow>(Vec<Shadow>);
@@ -36,7 +36,7 @@ pub struct ShadowList<Shadow>(Vec<Shadow>);
pub type BoxShadow = GenericBoxShadow<Option<RGBA>, Length, NonNegativeLength, Length>;
/// An animated value for the `filter` property.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, Debug, PartialEq)]
pub struct FilterList(pub Vec<Filter>);
diff --git a/components/style/values/computed/angle.rs b/components/style/values/computed/angle.rs
index 0dd2b4261f2..fdaecf93ab1 100644
--- a/components/style/values/computed/angle.rs
+++ b/components/style/values/computed/angle.rs
@@ -14,9 +14,8 @@ use values::distance::{ComputeSquaredDistance, SquaredDistance};
/// A computed angle.
#[animate(fallback = "Self::animate_fallback")]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
-#[derive(Animate, Clone, Copy, Debug, PartialEq)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Animate, Clone, Copy, Debug, MallocSizeOf, PartialEq)]
#[derive(PartialOrd, ToAnimatedZero)]
pub enum Angle {
/// An angle with degree unit.
diff --git a/components/style/values/computed/color.rs b/components/style/values/computed/color.rs
index 7adfa646d7e..6327e734626 100644
--- a/components/style/values/computed/color.rs
+++ b/components/style/values/computed/color.rs
@@ -14,9 +14,7 @@ use values::animated::color::{Color as AnimatedColor, RGBA as AnimatedRGBA};
/// the current foreground color (currentcolor keyword).
/// Conceptually, the formula is "color * (1 - p) + currentcolor * p"
/// where p is foreground_ratio.
-#[derive(Clone, Copy, Debug)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf)]
pub struct Color {
/// RGBA color.
pub color: RGBA,
diff --git a/components/style/values/computed/font.rs b/components/style/values/computed/font.rs
index 6d0571b8c0c..08d2a584f53 100644
--- a/components/style/values/computed/font.rs
+++ b/components/style/values/computed/font.rs
@@ -11,10 +11,8 @@ use values::animated::ToAnimatedValue;
use values::computed::NonNegativeLength;
use values::specified::font as specified;
-#[derive(Animate, ComputeSquaredDistance, ToAnimatedZero)]
+#[derive(Animate, ComputeSquaredDistance, MallocSizeOf, ToAnimatedZero)]
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
/// The computed value of font-size
pub struct FontSize {
/// The size.
@@ -23,10 +21,8 @@ pub struct FontSize {
pub keyword_info: Option<KeywordInfo>,
}
-#[derive(Animate, ComputeSquaredDistance, ToAnimatedValue, ToAnimatedZero)]
+#[derive(Animate, ComputeSquaredDistance, MallocSizeOf, ToAnimatedValue, ToAnimatedZero)]
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
/// Additional information for keyword-derived font sizes.
pub struct KeywordInfo {
/// The keyword used
diff --git a/components/style/values/computed/image.rs b/components/style/values/computed/image.rs
index a54ae2098a3..8972774aa77 100644
--- a/components/style/values/computed/image.rs
+++ b/components/style/values/computed/image.rs
@@ -51,9 +51,7 @@ pub type GradientKind = GenericGradientKind<
>;
/// A computed gradient line direction.
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub enum LineDirection {
/// An angle.
Angle(Angle),
diff --git a/components/style/values/computed/length.rs b/components/style/values/computed/length.rs
index edc68ef9dcd..8cb69b65b17 100644
--- a/components/style/values/computed/length.rs
+++ b/components/style/values/computed/length.rs
@@ -66,9 +66,7 @@ impl ToComputedValue for specified::Length {
}
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToAnimatedZero)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToAnimatedZero)]
pub struct CalcLengthOrPercentage {
#[animation(constant)]
pub clamping_mode: AllowedNumericType,
@@ -294,10 +292,8 @@ impl ToComputedValue for specified::CalcLengthOrPercentage {
#[allow(missing_docs)]
#[animate(fallback = "Self::animate_fallback")]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[css(derive_debug)]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, MallocSizeOf, PartialEq)]
#[derive(ToAnimatedZero, ToCss)]
#[distance(fallback = "Self::compute_squared_distance_fallback")]
pub enum LengthOrPercentage {
@@ -452,10 +448,8 @@ impl ToComputedValue for specified::LengthOrPercentage {
#[allow(missing_docs)]
#[animate(fallback = "Self::animate_fallback")]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[css(derive_debug)]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq, ToCss)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, MallocSizeOf, PartialEq, ToCss)]
#[distance(fallback = "Self::compute_squared_distance_fallback")]
pub enum LengthOrPercentageOrAuto {
Length(Length),
@@ -549,7 +543,7 @@ impl ToComputedValue for specified::LengthOrPercentageOrAuto {
#[allow(missing_docs)]
#[animate(fallback = "Self::animate_fallback")]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[css(derive_debug)]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, PartialEq, ToCss)]
#[distance(fallback = "Self::compute_squared_distance_fallback")]
@@ -684,9 +678,8 @@ impl NonNegativeLengthOrPercentage {
}
/// The computed `<length>` value.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, PartialOrd)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd)]
#[derive(ToAnimatedValue, ToAnimatedZero)]
pub struct CSSPixelLength(CSSFloat);
@@ -850,7 +843,7 @@ pub type NonNegativeLengthOrNumber = Either<NonNegativeLength, NonNegativeNumber
/// A value suitable for a `min-width`, `min-height`, `width` or `height` property.
/// See values/specified/length.rs for more details.
#[allow(missing_docs)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq)]
#[derive(ToAnimatedZero, ToCss)]
pub enum MozLength {
@@ -900,7 +893,7 @@ impl ToComputedValue for specified::MozLength {
/// A value suitable for a `max-width` or `max-height` property.
/// See values/specified/length.rs for more details.
#[allow(missing_docs)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToCss)]
pub enum MaxLength {
LengthOrPercentageOrNone(LengthOrPercentageOrNone),
diff --git a/components/style/values/computed/mod.rs b/components/style/values/computed/mod.rs
index d7f6ddc5af9..8dc286cc6bc 100644
--- a/components/style/values/computed/mod.rs
+++ b/components/style/values/computed/mod.rs
@@ -397,9 +397,7 @@ impl From<GreaterThanOrEqualToOneNumber> for CSSFloat {
}
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToCss)]
+#[derive(Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum NumberOrPercentage {
Percentage(Percentage),
Number(Number),
@@ -468,7 +466,7 @@ pub type LengthOrPercentageOrNumber = Either<Number, LengthOrPercentage>;
pub type NonNegativeLengthOrPercentageOrNumber = Either<NonNegativeNumber, NonNegativeLengthOrPercentage>;
#[allow(missing_docs)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, ComputeSquaredDistance, Copy, Debug, PartialEq)]
/// A computed cliprect for clip and image-region
pub struct ClipRect {
@@ -550,10 +548,10 @@ pub type ColorOrAuto = Either<Color, Auto>;
/// The computed value of a CSS `url()`, resolved relative to the stylesheet URL.
#[cfg(feature = "servo")]
-#[derive(Clone, Debug, Deserialize, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum ComputedUrl {
/// The `url()` was invalid or it wasn't specified by the user.
- Invalid(Arc<String>),
+ Invalid(#[ignore_malloc_size_of = "Arc"] Arc<String>),
/// The resolved `url()` relative to the stylesheet URL.
Valid(ServoUrl),
}
diff --git a/components/style/values/computed/percentage.rs b/components/style/values/computed/percentage.rs
index 6b54c6722c3..1bc28a13488 100644
--- a/components/style/values/computed/percentage.rs
+++ b/components/style/values/computed/percentage.rs
@@ -9,9 +9,8 @@ use style_traits::ToCss;
use values::{CSSFloat, serialize_percentage};
/// A computed percentage.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, Default)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, Default, MallocSizeOf)]
#[derive(PartialEq, PartialOrd, ToAnimatedZero)]
pub struct Percentage(pub CSSFloat);
diff --git a/components/style/values/computed/time.rs b/components/style/values/computed/time.rs
index 02da4f5a681..a90a0935a8e 100644
--- a/components/style/values/computed/time.rs
+++ b/components/style/values/computed/time.rs
@@ -9,9 +9,8 @@ use style_traits::ToCss;
use values::CSSFloat;
/// A computed `<time>` value.
-#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub struct Time {
seconds: CSSFloat,
}
diff --git a/components/style/values/generics/background.rs b/components/style/values/generics/background.rs
index 1d3c2345b2f..584d021d7d1 100644
--- a/components/style/values/generics/background.rs
+++ b/components/style/values/generics/background.rs
@@ -5,10 +5,8 @@
//! Generic types for CSS values related to backgrounds.
/// A generic value for the `background-size` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToComputedValue, ToCss)]
+#[derive(MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum BackgroundSize<LengthOrPercentageOrAuto> {
/// `<width> <height>`
Explicit {
diff --git a/components/style/values/generics/basic_shape.rs b/components/style/values/generics/basic_shape.rs
index 091538eeccf..12c7411dbf9 100644
--- a/components/style/values/generics/basic_shape.rs
+++ b/components/style/values/generics/basic_shape.rs
@@ -18,9 +18,7 @@ pub type ClippingShape<BasicShape, Url> = ShapeSource<BasicShape, GeometryBox, U
/// <https://drafts.fxtf.org/css-masking-1/#typedef-geometry-box>
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum GeometryBox {
FillBox,
StrokeBox,
@@ -42,9 +40,7 @@ add_impls_for_keyword_enum!(ShapeBox);
/// A shape source, for some reference box.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Animate, Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum ShapeSource<BasicShape, ReferenceBox, Url> {
#[animation(error)]
Url(Url),
@@ -60,9 +56,7 @@ pub enum ShapeSource<BasicShape, ReferenceBox, Url> {
}
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Debug, PartialEq)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Debug, MallocSizeOf, PartialEq)]
#[derive(ToComputedValue, ToCss)]
pub enum BasicShape<H, V, LengthOrPercentage> {
Inset(InsetRect<LengthOrPercentage>),
@@ -73,9 +67,7 @@ pub enum BasicShape<H, V, LengthOrPercentage> {
/// <https://drafts.csswg.org/css-shapes/#funcdef-inset>
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Debug, PartialEq, ToComputedValue)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct InsetRect<LengthOrPercentage> {
pub rect: Rect<LengthOrPercentage>,
pub round: Option<BorderRadius<LengthOrPercentage>>,
@@ -83,9 +75,7 @@ pub struct InsetRect<LengthOrPercentage> {
/// <https://drafts.csswg.org/css-shapes/#funcdef-circle>
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToComputedValue)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Circle<H, V, LengthOrPercentage> {
pub position: Position<H, V>,
pub radius: ShapeRadius<LengthOrPercentage>,
@@ -93,9 +83,7 @@ pub struct Circle<H, V, LengthOrPercentage> {
/// <https://drafts.csswg.org/css-shapes/#funcdef-ellipse>
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq, ToComputedValue)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Ellipse<H, V, LengthOrPercentage> {
pub position: Position<H, V>,
pub semiaxis_x: ShapeRadius<LengthOrPercentage>,
@@ -104,9 +92,7 @@ pub struct Ellipse<H, V, LengthOrPercentage> {
/// <https://drafts.csswg.org/css-shapes/#typedef-shape-radius>
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq)]
#[derive(ToComputedValue, ToCss)]
pub enum ShapeRadius<LengthOrPercentage> {
Length(LengthOrPercentage),
@@ -116,12 +102,10 @@ pub enum ShapeRadius<LengthOrPercentage> {
FarthestSide,
}
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToComputedValue)]
/// A generic type for representing the `polygon()` function
///
/// <https://drafts.csswg.org/css-shapes/#funcdef-polygon>
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Polygon<LengthOrPercentage> {
/// The filling rule for a polygon.
pub fill: FillRule,
diff --git a/components/style/values/generics/border.rs b/components/style/values/generics/border.rs
index 939cb7060d5..9237d060ef0 100644
--- a/components/style/values/generics/border.rs
+++ b/components/style/values/generics/border.rs
@@ -10,9 +10,7 @@ use values::generics::rect::Rect;
use values::generics::size::Size;
/// A generic value for a single side of a `border-image-width` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum BorderImageSideWidth<LengthOrPercentage, Number> {
/// `<length-or-percentage>`
Length(LengthOrPercentage),
@@ -23,9 +21,7 @@ pub enum BorderImageSideWidth<LengthOrPercentage, Number> {
}
/// A generic value for the `border-image-slice` property.
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct BorderImageSlice<NumberOrPercentage> {
/// The offsets.
pub offsets: Rect<NumberOrPercentage>,
@@ -34,10 +30,8 @@ pub struct BorderImageSlice<NumberOrPercentage> {
}
/// A generic value for the `border-*-radius` longhand properties.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToComputedValue, ToCss)]
+#[derive(MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub struct BorderCornerRadius<L>(pub Size<L>);
impl<L> BorderCornerRadius<L> {
@@ -48,9 +42,7 @@ impl<L> BorderCornerRadius<L> {
}
/// A generic value for the `border-spacing` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf)]
#[derive(PartialEq, ToAnimatedValue, ToComputedValue, ToCss)]
pub struct BorderSpacing<L>(pub Size<L>);
@@ -64,10 +56,8 @@ impl<L> BorderSpacing<L> {
/// A generic value for `border-radius`, `outline-radius` and `inset()`.
///
/// <https://drafts.csswg.org/css-backgrounds-3/#border-radius>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToComputedValue)]
+#[derive(MallocSizeOf, PartialEq, ToComputedValue)]
pub struct BorderRadius<LengthOrPercentage> {
/// The top left radius.
pub top_left: BorderCornerRadius<LengthOrPercentage>,
diff --git a/components/style/values/generics/box.rs b/components/style/values/generics/box.rs
index a604596e94a..e12879f28dc 100644
--- a/components/style/values/generics/box.rs
+++ b/components/style/values/generics/box.rs
@@ -7,9 +7,7 @@
use values::animated::ToAnimatedZero;
/// A generic value for the `vertical-align` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, PartialEq)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq)]
#[derive(ToComputedValue, ToCss)]
pub enum VerticalAlign<LengthOrPercentage> {
/// `baseline`
diff --git a/components/style/values/generics/effects.rs b/components/style/values/generics/effects.rs
index 28b7105f7a8..ff77556d253 100644
--- a/components/style/values/generics/effects.rs
+++ b/components/style/values/generics/effects.rs
@@ -10,9 +10,7 @@ use style_traits::values::{SequenceWriter, ToCss};
use values::specified::url::SpecifiedUrl;
/// A generic value for a single `box-shadow`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, Debug, PartialEq)]
+#[derive(Animate, Clone, Debug, MallocSizeOf, PartialEq)]
#[derive(ToAnimatedValue, ToAnimatedZero)]
pub struct BoxShadow<Color, SizeLength, BlurShapeLength, ShapeLength> {
/// The base shadow.
@@ -25,9 +23,8 @@ pub struct BoxShadow<Color, SizeLength, BlurShapeLength, ShapeLength> {
}
/// A generic value for a single `filter`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Clone, Debug, PartialEq, ToAnimatedValue, ToComputedValue, ToCss)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToAnimatedValue, ToComputedValue, ToCss)]
pub enum Filter<Angle, Factor, Length, DropShadow> {
/// `blur(<length>)`
#[css(function)]
@@ -68,10 +65,8 @@ pub enum Filter<Angle, Factor, Length, DropShadow> {
///
/// Contrary to the canonical order from the spec, the color is serialised
/// first, like in Gecko and Webkit.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Debug)]
-#[derive(PartialEq, ToAnimatedValue, ToAnimatedZero, ToCss)]
+#[derive(MallocSizeOf, PartialEq, ToAnimatedValue, ToAnimatedZero, ToCss)]
pub struct SimpleShadow<Color, SizeLength, ShapeLength> {
/// Color.
pub color: Color,
diff --git a/components/style/values/generics/flex.rs b/components/style/values/generics/flex.rs
index 0ee864555de..5efc3a02d38 100644
--- a/components/style/values/generics/flex.rs
+++ b/components/style/values/generics/flex.rs
@@ -7,7 +7,7 @@
use values::computed::Percentage;
/// A generic value for the `flex-basis` property.
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
pub enum FlexBasis<LengthOrPercentage> {
/// `auto`
diff --git a/components/style/values/generics/grid.rs b/components/style/values/generics/grid.rs
index 062dd1a528f..db2e4721075 100644
--- a/components/style/values/generics/grid.rs
+++ b/components/style/values/generics/grid.rs
@@ -17,9 +17,7 @@ use values::specified::grid::parse_line_names;
/// A `<grid-line>` type.
///
/// <https://drafts.csswg.org/css-grid/#typedef-grid-row-start-grid-line>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, Default, PartialEq, ToComputedValue)]
+#[derive(Clone, Debug, Default, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct GridLine<Integer> {
/// Flag to check whether it's a `span` keyword.
pub is_span: bool,
@@ -145,9 +143,7 @@ add_impls_for_keyword_enum!(TrackKeyword);
/// avoid re-implementing it for the computed type.
///
/// <https://drafts.csswg.org/css-grid/#typedef-track-breadth>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToComputedValue)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum TrackBreadth<L> {
/// The generic type is almost always a non-negative `<length-percentage>`
Breadth(L),
@@ -184,9 +180,7 @@ impl<L: ToCss> ToCss for TrackBreadth<L> {
/// generic only to avoid code bloat. It only takes `<length-percentage>`
///
/// <https://drafts.csswg.org/css-grid/#typedef-track-size>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum TrackSize<L> {
/// A flexible `<track-breadth>`
Breadth(TrackBreadth<L>),
@@ -348,9 +342,7 @@ where
/// The initial argument of the `repeat` function.
///
/// <https://drafts.csswg.org/css-grid/#typedef-track-repeat>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum RepeatCount<Integer> {
/// A positive integer. This is allowed only for `<track-repeat>` and `<fixed-repeat>`
Number(Integer),
@@ -382,9 +374,7 @@ impl Parse for RepeatCount<specified::Integer> {
///
/// It can also hold `repeat()` function parameters, which expands into the respective
/// values in its computed form.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToComputedValue)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct TrackRepeat<L, I> {
/// The number of times for the value to be repeated (could also be `auto-fit` or `auto-fill`)
pub count: RepeatCount<I>,
@@ -465,9 +455,7 @@ impl<L: Clone> TrackRepeat<L, specified::Integer> {
}
/// Track list values. Can be <track-size> or <track-repeat>
-#[derive(Clone, Debug, PartialEq, ToComputedValue, ToCss)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum TrackListValue<LengthOrPercentage, Integer> {
/// A <track-size> value.
TrackSize(TrackSize<LengthOrPercentage>),
@@ -478,9 +466,7 @@ pub enum TrackListValue<LengthOrPercentage, Integer> {
/// The type of a `<track-list>` as determined during parsing.
///
/// <https://drafts.csswg.org/css-grid/#typedef-track-list>
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum TrackListType {
/// [`<auto-track-list>`](https://drafts.csswg.org/css-grid/#typedef-auto-track-list)
///
@@ -502,9 +488,7 @@ pub enum TrackListType {
/// A grid `<track-list>` type.
///
/// <https://drafts.csswg.org/css-grid/#typedef-track-list>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub struct TrackList<LengthOrPercentage, Integer> {
/// The type of this `<track-list>` (auto, explicit or general).
///
@@ -571,9 +555,7 @@ impl<L: ToCss, I: ToCss> ToCss for TrackList<L, I> {
///
/// `subgrid [ <line-names> | repeat(<positive-integer> | auto-fill, <line-names>+) ]+`
/// Old spec: https://www.w3.org/TR/2015/WD-css-grid-1-20150917/#typedef-line-name-list
-#[derive(Clone, Debug, Default, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, Default, MallocSizeOf, PartialEq)]
pub struct LineNameList {
/// The optional `<line-name-list>`
pub names: Box<[Box<[CustomIdent]>]>,
@@ -668,9 +650,7 @@ impl ToCss for LineNameList {
/// Variants for `<grid-template-rows> | <grid-template-columns>`
/// Subgrid deferred to Level 2 spec due to lack of implementation.
/// But it's implemented in gecko, so we have to as well.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum GridTemplateComponent<L, I> {
/// `none` value.
None,
diff --git a/components/style/values/generics/image.rs b/components/style/values/generics/image.rs
index a90e6dbca75..f7329cf4def 100644
--- a/components/style/values/generics/image.rs
+++ b/components/style/values/generics/image.rs
@@ -16,9 +16,7 @@ use style_traits::ToCss;
/// An [image].
///
/// [image]: https://drafts.csswg.org/css-images/#image-values
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, PartialEq, ToComputedValue)]
+#[derive(Clone, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum Image<Gradient, MozImageRect, ImageUrl> {
/// A `<url()>` image.
Url(ImageUrl),
@@ -37,9 +35,7 @@ pub enum Image<Gradient, MozImageRect, ImageUrl> {
/// A CSS gradient.
/// <https://drafts.csswg.org/css-images/#gradients>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToComputedValue)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Gradient<LineDirection, Length, LengthOrPercentage, Position, Color, Angle> {
/// Gradients can be linear or radial.
pub kind: GradientKind<LineDirection, Length, LengthOrPercentage, Position, Angle>,
@@ -53,9 +49,7 @@ pub struct Gradient<LineDirection, Length, LengthOrPercentage, Position, Color,
pub compat_mode: CompatMode,
}
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
/// Whether we used the modern notation or the compatibility `-webkit`, `-moz` prefixes.
pub enum CompatMode {
/// Modern syntax.
@@ -67,9 +61,7 @@ pub enum CompatMode {
}
/// A gradient kind.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum GradientKind<LineDirection, Length, LengthOrPercentage, Position, Angle> {
/// A linear gradient.
Linear(LineDirection),
@@ -78,9 +70,7 @@ pub enum GradientKind<LineDirection, Length, LengthOrPercentage, Position, Angle
}
/// A radial gradient's ending shape.
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum EndingShape<Length, LengthOrPercentage> {
/// A circular gradient.
Circle(Circle<Length>),
@@ -89,9 +79,7 @@ pub enum EndingShape<Length, LengthOrPercentage> {
}
/// A circle shape.
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub enum Circle<Length> {
/// A circle radius.
Radius(Length),
@@ -100,9 +88,7 @@ pub enum Circle<Length> {
}
/// An ellipse shape.
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum Ellipse<LengthOrPercentage> {
/// An ellipse pair of radii.
Radii(LengthOrPercentage, LengthOrPercentage),
@@ -123,9 +109,7 @@ add_impls_for_keyword_enum!(ShapeExtent);
/// A gradient item.
/// <https://drafts.csswg.org/css-images-4/#color-stop-syntax>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum GradientItem<Color, LengthOrPercentage> {
/// A color stop.
ColorStop(ColorStop<Color, LengthOrPercentage>),
@@ -135,9 +119,7 @@ pub enum GradientItem<Color, LengthOrPercentage> {
/// A color stop.
/// <https://drafts.csswg.org/css-images/#typedef-color-stop-list>
-#[derive(Clone, Copy, PartialEq, ToComputedValue, ToCss)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub struct ColorStop<Color, LengthOrPercentage> {
/// The color of this stop.
pub color: Color,
@@ -148,13 +130,13 @@ pub struct ColorStop<Color, LengthOrPercentage> {
/// Specified values for a paint worklet.
/// <https://drafts.css-houdini.org/css-paint-api/>
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub struct PaintWorklet {
/// The name the worklet was registered with.
pub name: Atom,
/// The arguments for the worklet.
/// TODO: store a parsed representation of the arguments.
- #[cfg_attr(feature = "servo", ignore_heap_size_of = "Arc")]
+ #[cfg_attr(feature = "servo", ignore_malloc_size_of = "Arc")]
pub arguments: Vec<Arc<custom_properties::SpecifiedValue>>,
}
@@ -176,10 +158,8 @@ impl ToCss for PaintWorklet {
///
/// `-moz-image-rect(<uri>, top, right, bottom, left);`
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[css(comma, function)]
-#[derive(Clone, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub struct MozImageRect<NumberOrPercentage, MozImageRectUrl> {
pub url: MozImageRectUrl,
pub top: NumberOrPercentage,
diff --git a/components/style/values/generics/mod.rs b/components/style/values/generics/mod.rs
index dc6d66bffe5..5052b2395e1 100644
--- a/components/style/values/generics/mod.rs
+++ b/components/style/values/generics/mod.rs
@@ -131,9 +131,7 @@ impl Parse for CounterStyleOrNone {
///
/// For font-feature-settings, this is a tag and an integer,
/// for font-variation-settings this is a tag and a float
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)]
+#[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct FontSettingTag<T> {
/// A four-character tag, packed into a u32 (one byte per character)
pub tag: u32,
@@ -190,9 +188,7 @@ impl<T: Parse> Parse for FontSettingTag<T> {
/// A font settings value for font-variation-settings or font-feature-settings
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, Eq, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum FontSettings<T> {
/// No settings (default)
Normal,
@@ -215,18 +211,15 @@ impl<T: Parse> Parse for FontSettings<T> {
///
/// Do not use this type anywhere except within FontSettings
/// because it serializes with the preceding space
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)]
+#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct FontSettingTagInt(pub u32);
/// A number value to be used for font-variation-settings
///
/// Do not use this type anywhere except within FontSettings
/// because it serializes with the preceding space
-#[cfg_attr(feature = "gecko", derive(Animate, ComputeSquaredDistance, MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToComputedValue)]
+#[cfg_attr(feature = "gecko", derive(Animate, ComputeSquaredDistance))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct FontSettingTagFloat(pub f32);
impl ToCss for FontSettingTagInt {
@@ -279,15 +272,13 @@ impl ToCss for FontSettingTagFloat {
}
/// A wrapper of Non-negative values.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf)]
#[derive(PartialEq, PartialOrd, ToAnimatedZero, ToComputedValue, ToCss)]
pub struct NonNegative<T>(pub T);
/// A wrapper of greater-than-or-equal-to-one values.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf)]
#[derive(PartialEq, PartialOrd, ToAnimatedZero, ToComputedValue, ToCss)]
pub struct GreaterThanOrEqualToOne<T>(pub T);
diff --git a/components/style/values/generics/position.rs b/components/style/values/generics/position.rs
index 5a63f88a241..f00160d7015 100644
--- a/components/style/values/generics/position.rs
+++ b/components/style/values/generics/position.rs
@@ -6,10 +6,8 @@
//! [`position`](https://drafts.csswg.org/css-backgrounds-3/#position)
/// A generic type for representing a CSS [position](https://drafts.csswg.org/css-values/#position).
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToAnimatedZero, ToComputedValue)]
+#[derive(MallocSizeOf, PartialEq, ToAnimatedZero, ToComputedValue)]
pub struct Position<H, V> {
/// The horizontal component of position.
pub horizontal: H,
diff --git a/components/style/values/generics/rect.rs b/components/style/values/generics/rect.rs
index 4577a6c33a1..fd72fa5b805 100644
--- a/components/style/values/generics/rect.rs
+++ b/components/style/values/generics/rect.rs
@@ -11,10 +11,8 @@ use style_traits::{ToCss, ParseError};
/// A CSS value made of four components, where its `ToCss` impl will try to
/// serialize as few components as possible, like for example in `border-width`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToComputedValue)]
+#[derive(MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Rect<T>(pub T, pub T, pub T, pub T);
impl<T> Rect<T> {
diff --git a/components/style/values/generics/size.rs b/components/style/values/generics/size.rs
index e28db54afab..784adf62880 100644
--- a/components/style/values/generics/size.rs
+++ b/components/style/values/generics/size.rs
@@ -13,10 +13,8 @@ use values::animated::ToAnimatedValue;
/// A generic size, for `border-*-radius` longhand properties, or
/// `border-spacing`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToComputedValue)]
+#[derive(MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Size<L>(pub Size2D<L>);
impl<L> Size<L> {
diff --git a/components/style/values/generics/svg.rs b/components/style/values/generics/svg.rs
index 6238542f7e0..0d0a60d61ce 100644
--- a/components/style/values/generics/svg.rs
+++ b/components/style/values/generics/svg.rs
@@ -16,9 +16,7 @@ use values::distance::{ComputeSquaredDistance, SquaredDistance};
/// An SVG paint value
///
/// <https://www.w3.org/TR/SVG2/painting.html#SpecifyingPaint>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Debug, PartialEq)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Debug, MallocSizeOf, PartialEq)]
#[derive(ToAnimatedValue, ToComputedValue, ToCss)]
pub struct SVGPaint<ColorType, UrlPaintServer> {
/// The paint source
@@ -32,9 +30,7 @@ pub struct SVGPaint<ColorType, UrlPaintServer> {
/// Whereas the spec only allows PaintServer
/// to have a fallback, Gecko lets the context
/// properties have a fallback as well.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Debug, PartialEq)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Debug, MallocSizeOf, PartialEq)]
#[derive(ToAnimatedValue, ToAnimatedZero, ToComputedValue, ToCss)]
pub enum SVGPaintKind<ColorType, UrlPaintServer> {
/// `none`
@@ -111,9 +107,7 @@ impl<ColorType: Parse, UrlPaintServer: Parse> Parse for SVGPaint<ColorType, UrlP
/// A value of <length> | <percentage> | <number> for svg which allow unitless length.
/// <https://www.w3.org/TR/SVG11/painting.html#StrokeProperties>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToAnimatedValue)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToAnimatedValue)]
#[derive(ToAnimatedZero, ToComputedValue, ToCss)]
pub enum SvgLengthOrPercentageOrNumber<LengthOrPercentage, Number> {
/// <length> | <percentage>
@@ -194,9 +188,7 @@ impl <LengthOrPercentageType: Parse, NumberType: Parse> Parse for
}
/// An SVG length value supports `context-value` in addition to length.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, ComputeSquaredDistance, Copy, Debug, PartialEq)]
+#[derive(Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf, PartialEq)]
#[derive(ToAnimatedValue, ToAnimatedZero)]
#[derive(ToComputedValue, ToCss)]
pub enum SVGLength<LengthType> {
@@ -207,9 +199,8 @@ pub enum SVGLength<LengthType> {
}
/// Generic value for stroke-dasharray.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, ComputeSquaredDistance, Debug, PartialEq, ToAnimatedValue, ToComputedValue)]
+#[derive(Clone, ComputeSquaredDistance, Debug, MallocSizeOf, PartialEq, ToAnimatedValue,
+ ToComputedValue)]
pub enum SVGStrokeDashArray<LengthType> {
/// `[ <length> | <percentage> | <number> ]#`
Values(Vec<LengthType>),
@@ -242,9 +233,7 @@ impl<LengthType> ToCss for SVGStrokeDashArray<LengthType> where LengthType: ToCs
/// An SVG opacity value accepts `context-{fill,stroke}-opacity` in
/// addition to opacity value.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, ComputeSquaredDistance, Copy, Debug)]
+#[derive(Clone, ComputeSquaredDistance, Copy, Debug, MallocSizeOf)]
#[derive(PartialEq, ToAnimatedZero, ToComputedValue, ToCss)]
pub enum SVGOpacity<OpacityType> {
/// `<opacity-value>`
diff --git a/components/style/values/generics/text.rs b/components/style/values/generics/text.rs
index ff52988fa67..4ff582f811f 100644
--- a/components/style/values/generics/text.rs
+++ b/components/style/values/generics/text.rs
@@ -12,9 +12,7 @@ use values::animated::{Animate, Procedure, ToAnimatedZero};
use values::distance::{ComputeSquaredDistance, SquaredDistance};
/// A generic value for the `initial-letter` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum InitialLetter<Number, Integer> {
/// `normal`
Normal,
@@ -31,9 +29,7 @@ impl<N, I> InitialLetter<N, I> {
}
/// A generic spacing value for the `letter-spacing` and `word-spacing` properties.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
pub enum Spacing<Value> {
/// `normal`
Normal,
@@ -111,10 +107,8 @@ where
}
/// A generic value for the `line-height` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToAnimatedValue, ToCss)]
+#[derive(MallocSizeOf, PartialEq, ToAnimatedValue, ToCss)]
pub enum LineHeight<Number, LengthOrPercentage> {
/// `normal`
Normal,
diff --git a/components/style/values/generics/transform.rs b/components/style/values/generics/transform.rs
index ce5b6ce4227..2902f24329e 100644
--- a/components/style/values/generics/transform.rs
+++ b/components/style/values/generics/transform.rs
@@ -10,9 +10,7 @@ use values::CSSFloat;
/// A generic 2D transformation matrix.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)]
#[css(comma, function)]
pub struct Matrix<T, U = T> {
pub a: T,
@@ -24,10 +22,8 @@ pub struct Matrix<T, U = T> {
}
/// A generic transform origin.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Animate, Clone, ComputeSquaredDistance, Copy, Debug)]
-#[derive(PartialEq, ToAnimatedZero, ToComputedValue, ToCss)]
+#[derive(MallocSizeOf, PartialEq, ToAnimatedZero, ToComputedValue, ToCss)]
pub struct TransformOrigin<H, V, Depth> {
/// The horizontal origin.
pub horizontal: H,
@@ -40,9 +36,7 @@ pub struct TransformOrigin<H, V, Depth> {
/// A generic timing function.
///
/// <https://drafts.csswg.org/css-timing-1/#single-timing-function-production>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub enum TimingFunction<Integer, Number> {
/// `linear | ease | ease-in | ease-out | ease-in-out`
Keyword(TimingKeyword),
diff --git a/components/style/values/mod.rs b/components/style/values/mod.rs
index cfe8b5384e2..588cd90878e 100644
--- a/components/style/values/mod.rs
+++ b/components/style/values/mod.rs
@@ -50,7 +50,7 @@ pub fn serialize_dimension<W>(value: CSSFloat, unit: &str, dest: &mut W)
}
/// Convenience void type to disable some properties and values through types.
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
+#[cfg_attr(feature = "servo", derive(Deserialize, MallocSizeOf, Serialize))]
#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)]
pub enum Impossible {}
@@ -64,9 +64,7 @@ impl Parse for Impossible {
}
/// A struct representing one of two kinds of values.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Animate, Clone, ComputeSquaredDistance, Copy)]
+#[derive(Animate, Clone, ComputeSquaredDistance, Copy, MallocSizeOf)]
#[derive(PartialEq, ToAnimatedValue, ToAnimatedZero, ToComputedValue, ToCss)]
pub enum Either<A, B> {
/// The first value.
@@ -96,9 +94,7 @@ impl<A: Parse, B: Parse> Parse for Either<A, B> {
}
/// <https://drafts.csswg.org/css-values-4/#custom-idents>
-#[derive(Clone, Debug, Eq, Hash, PartialEq, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct CustomIdent(pub Atom);
impl CustomIdent {
@@ -127,9 +123,7 @@ impl ToCss for CustomIdent {
}
/// <https://drafts.csswg.org/css-animations/#typedef-keyframes-name>
-#[derive(Clone, Debug, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, ToComputedValue)]
pub enum KeyframesName {
/// <custom-ident>
Ident(CustomIdent),
diff --git a/components/style/values/specified/align.rs b/components/style/values/specified/align.rs
index 0ee57ea92d3..54fece9d340 100644
--- a/components/style/values/specified/align.rs
+++ b/components/style/values/specified/align.rs
@@ -115,9 +115,8 @@ const ALIGN_ALL_SHIFT: u32 = structs::NS_STYLE_ALIGN_ALL_SHIFT;
///
/// The 16-bit field stores the primary value in its lower 8 bits, and the optional fallback value
/// in its upper 8 bits. This matches the representation of these properties in Gecko.
-#[derive(Clone, Copy, Debug, Eq, PartialEq, ToComputedValue)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
+#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
pub struct AlignJustifyContent(u16);
impl AlignJustifyContent {
diff --git a/components/style/values/specified/angle.rs b/components/style/values/specified/angle.rs
index 11ecd53f77e..5ccc2bf5dcb 100644
--- a/components/style/values/specified/angle.rs
+++ b/components/style/values/specified/angle.rs
@@ -19,9 +19,8 @@ use values::specified::calc::CalcNode;
/// Computed angles are essentially same as specified ones except for `calc()`
/// value serialization. Therefore we are storing a computed angle inside
/// to hold the actual value and its unit.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
-#[derive(Clone, Copy, Debug, PartialEq)]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub struct Angle {
value: ComputedAngle,
was_calc: bool,
diff --git a/components/style/values/specified/border.rs b/components/style/values/specified/border.rs
index 2223648c1a5..deb4e827b58 100644
--- a/components/style/values/specified/border.rs
+++ b/components/style/values/specified/border.rs
@@ -19,9 +19,7 @@ use values::specified::{AllowQuirks, Number, NumberOrPercentage};
use values::specified::length::{Length, LengthOrPercentage, NonNegativeLength};
/// A specified value for a single side of the `border-width` property.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum BorderSideWidth {
/// `thin`
Thin,
diff --git a/components/style/values/specified/calc.rs b/components/style/values/specified/calc.rs
index 91478747b16..545d93c84a0 100644
--- a/components/style/values/specified/calc.rs
+++ b/components/style/values/specified/calc.rs
@@ -63,9 +63,7 @@ pub enum CalcUnit {
}
/// A struct to hold a simplified `<length>` or `<percentage>` expression.
-#[derive(Clone, Copy, Debug, Default, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, Default, MallocSizeOf, PartialEq)]
#[allow(missing_docs)]
pub struct CalcLengthOrPercentage {
pub clamping_mode: AllowedNumericType,
diff --git a/components/style/values/specified/color.rs b/components/style/values/specified/color.rs
index 260bc02dbf8..7a7a8593e9e 100644
--- a/components/style/values/specified/color.rs
+++ b/components/style/values/specified/color.rs
@@ -18,9 +18,7 @@ use super::AllowQuirks;
use values::computed::{Color as ComputedColor, Context, ToComputedValue};
/// Specified color value
-#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum Color {
/// The 'currentColor' keyword
CurrentColor,
@@ -336,9 +334,7 @@ impl ToComputedValue for Color {
/// Specified color value, but resolved to just RGBA for computed value
/// with value from color property at the same context.
-#[derive(Clone, Debug, PartialEq, ToCss)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub struct RGBAColor(pub Color);
diff --git a/components/style/values/specified/effects.rs b/components/style/values/specified/effects.rs
index 6c2cbe2ece1..7ecb3fce72c 100644
--- a/components/style/values/specified/effects.rs
+++ b/components/style/values/specified/effects.rs
@@ -35,9 +35,7 @@ pub type Filter = GenericFilter<Angle, Factor, NonNegativeLength, SimpleShadow>;
pub type Filter = GenericFilter<Angle, Factor, NonNegativeLength, Impossible>;
/// A value for the `<factor>` parts in `Filter`.
-#[derive(Clone, Debug, PartialEq, ToCss)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub struct Factor(NumberOrPercentage);
impl Factor {
diff --git a/components/style/values/specified/font.rs b/components/style/values/specified/font.rs
index 464cce30293..f70ab99feed 100644
--- a/components/style/values/specified/font.rs
+++ b/components/style/values/specified/font.rs
@@ -15,9 +15,7 @@ use values::computed::{font as computed, Context, NonNegativeLength, ToComputedV
use values::specified::{LengthOrPercentage, NoCalcLength};
use values::specified::length::FontBaseSize;
-#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
/// A specified font-size value
pub enum FontSize {
/// A length; e.g. 10px.
@@ -60,10 +58,8 @@ impl From<LengthOrPercentage> for FontSize {
}
/// CSS font keywords
-#[derive(Animate, ComputeSquaredDistance, ToAnimatedValue, ToAnimatedZero)]
+#[derive(Animate, ComputeSquaredDistance, MallocSizeOf, ToAnimatedValue, ToAnimatedZero)]
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
#[allow(missing_docs)]
pub enum KeywordSize {
XXSmall = 1, // This is to enable the NonZero optimization
diff --git a/components/style/values/specified/grid.rs b/components/style/values/specified/grid.rs
index 914b4deb1f6..85f0dfda062 100644
--- a/components/style/values/specified/grid.rs
+++ b/components/style/values/specified/grid.rs
@@ -90,7 +90,7 @@ pub fn parse_line_names<'i, 't>(input: &mut Parser<'i, 't>) -> Result<Box<[Custo
///
/// <https://drafts.csswg.org/css-grid/#typedef-track-repeat>
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
enum RepeatType {
/// [`<auto-repeat>`](https://drafts.csswg.org/css-grid/#typedef-auto-repeat)
Auto,
diff --git a/components/style/values/specified/image.rs b/components/style/values/specified/image.rs
index 02efecac1f9..c6cb2bf0e3d 100644
--- a/components/style/values/specified/image.rs
+++ b/components/style/values/specified/image.rs
@@ -85,9 +85,7 @@ pub type GradientKind = GenericGradientKind<
>;
/// A specified gradient line direction.
-#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
pub enum LineDirection {
/// An angular direction.
Angle(Angle),
diff --git a/components/style/values/specified/length.rs b/components/style/values/specified/length.rs
index dc86368b57c..82c5363d2b5 100644
--- a/components/style/values/specified/length.rs
+++ b/components/style/values/specified/length.rs
@@ -52,9 +52,7 @@ pub fn au_to_int_px(au: f32) -> i32 {
(au / AU_PER_PX).round() as i32
}
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
/// A font relative length.
pub enum FontRelativeLength {
/// A "em" value: https://drafts.csswg.org/css-values/#em
@@ -208,9 +206,7 @@ impl FontRelativeLength {
}
}
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
/// A viewport-relative length.
///
/// <https://drafts.csswg.org/css-values/#viewport-relative-lengths>
@@ -259,9 +255,7 @@ impl ViewportPercentageLength {
}
/// HTML5 "character width", as defined in HTML5 § 14.5.4.
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub struct CharacterWidth(pub i32);
impl CharacterWidth {
@@ -279,9 +273,7 @@ impl CharacterWidth {
}
/// Represents an absolute length with its unit
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub enum AbsoluteLength {
/// An absolute length in pixels (px)
Px(CSSFloat),
@@ -441,9 +433,7 @@ impl Mul<CSSFloat> for PhysicalLength {
/// A `<length>` without taking `calc` expressions into account
///
/// <https://drafts.csswg.org/css-values/#lengths>
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub enum NoCalcLength {
/// An absolute length
///
@@ -582,9 +572,7 @@ impl NoCalcLength {
/// This is commonly used for the `<length>` values.
///
/// <https://drafts.csswg.org/css-values/#lengths>
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum Length {
/// The internal length type that cannot parse `calc`
NoCalc(NoCalcLength),
@@ -798,9 +786,7 @@ pub type NonNegativeLengthOrNumber = Either<NonNegativeLength, NonNegativeNumber
/// A length or a percentage value.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum LengthOrPercentage {
Length(NoCalcLength),
Percentage(computed::Percentage),
@@ -970,9 +956,7 @@ impl LengthOrPercentage {
/// Either a `<length>`, a `<percentage>`, or the `auto` keyword.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum LengthOrPercentageOrAuto {
Length(NoCalcLength),
Percentage(computed::Percentage),
@@ -1088,9 +1072,7 @@ impl LengthOrPercentageOrAuto {
}
/// Either a `<length>`, a `<percentage>`, or the `none` keyword.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
#[allow(missing_docs)]
pub enum LengthOrPercentageOrNone {
Length(NoCalcLength),
@@ -1238,9 +1220,7 @@ impl LengthOrNumber {
/// Unlike `max-width` or `max-height` properties, a MozLength can be
/// `auto`, and cannot be `none`.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum MozLength {
LengthOrPercentageOrAuto(LengthOrPercentageOrAuto),
ExtremumLength(ExtremumLength),
@@ -1265,9 +1245,7 @@ impl MozLength {
/// A value suitable for a `max-width` or `max-height` property.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum MaxLength {
LengthOrPercentageOrNone(LengthOrPercentageOrNone),
ExtremumLength(ExtremumLength),
diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs
index dd80729e790..acd73f2b930 100644
--- a/components/style/values/specified/mod.rs
+++ b/components/style/values/specified/mod.rs
@@ -176,9 +176,7 @@ impl BorderStyle {
}
}
-#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd)]
#[allow(missing_docs)]
pub struct Number {
/// The numeric value itself.
@@ -294,9 +292,7 @@ impl Parse for GreaterThanOrEqualToOneNumber {
///
/// FIXME(emilio): Should probably use Either.
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum NumberOrPercentage {
Percentage(Percentage),
Number(Number),
@@ -330,9 +326,7 @@ impl Parse for NumberOrPercentage {
}
#[allow(missing_docs)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, ToCss)]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd, ToCss)]
pub struct Opacity(Number);
@@ -366,9 +360,7 @@ impl ToComputedValue for Opacity {
/// An specified `<integer>`, optionally coming from a `calc()` expression.
///
/// <https://drafts.csswg.org/css-values/#integers>
-#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd)]
pub struct Integer {
value: CSSInteger,
was_calc: bool,
@@ -521,9 +513,7 @@ pub type LengthOrPercentageOrNumber = Either<Number, LengthOrPercentage>;
/// NonNegativeLengthOrPercentage | NonNegativeNumber
pub type NonNegativeLengthOrPercentageOrNumber = Either<NonNegativeNumber, NonNegativeLengthOrPercentage>;
-#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq)]
/// rect(<top>, <left>, <bottom>, <right>) used by clip and image-region
pub struct ClipRect {
/// <top> (<length> | <auto>)
@@ -693,9 +683,7 @@ pub type NamespaceId = ();
/// An attr(...) rule
///
/// `[namespace? `|`]? ident`
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, Eq, PartialEq, ToComputedValue)]
+#[derive(Clone, Debug, Eq, MallocSizeOf, PartialEq, ToComputedValue)]
pub struct Attr {
/// Optional namespace
pub namespace: Option<(Namespace, NamespaceId)>,
diff --git a/components/style/values/specified/percentage.rs b/components/style/values/specified/percentage.rs
index f3b3d97a53a..9e0315ead7b 100644
--- a/components/style/values/specified/percentage.rs
+++ b/components/style/values/specified/percentage.rs
@@ -16,9 +16,7 @@ use values::computed::percentage::Percentage as ComputedPercentage;
use values::specified::calc::CalcNode;
/// A percentage value.
-#[derive(Clone, Copy, Debug, Default, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, Default, MallocSizeOf, PartialEq)]
pub struct Percentage {
/// The percentage value as a float.
///
diff --git a/components/style/values/specified/position.rs b/components/style/values/specified/position.rs
index 6cfc6987975..7d2cef458c3 100644
--- a/components/style/values/specified/position.rs
+++ b/components/style/values/specified/position.rs
@@ -27,9 +27,7 @@ pub type HorizontalPosition = PositionComponent<X>;
pub type VerticalPosition = PositionComponent<Y>;
/// The specified value of a component of a CSS `<position>`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum PositionComponent<S> {
/// `center`
Center,
diff --git a/components/style/values/specified/time.rs b/components/style/values/specified/time.rs
index 7df741f28c6..075207a7906 100644
--- a/components/style/values/specified/time.rs
+++ b/components/style/values/specified/time.rs
@@ -16,9 +16,7 @@ use values::computed::time::Time as ComputedTime;
use values::specified::calc::CalcNode;
/// A time value according to CSS-VALUES § 6.2.
-#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq)]
pub struct Time {
seconds: CSSFloat,
unit: TimeUnit,
@@ -26,9 +24,7 @@ pub struct Time {
}
/// A time unit.
-#[derive(Clone, Copy, Debug, Eq, PartialEq)]
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq)]
pub enum TimeUnit {
/// `s`
Second,
diff --git a/components/style/values/specified/transform.rs b/components/style/values/specified/transform.rs
index 06f99731ae5..e2a56d1e405 100644
--- a/components/style/values/specified/transform.rs
+++ b/components/style/values/specified/transform.rs
@@ -21,9 +21,7 @@ use values::specified::position::{Side, X, Y};
pub type TransformOrigin = GenericTransformOrigin<OriginComponent<X>, OriginComponent<Y>, Length>;
/// The specified value of a component of a CSS `<transform-origin>`.
-#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
+#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToCss)]
pub enum OriginComponent<S> {
/// `center`
Center,
diff --git a/components/style_traits/Cargo.toml b/components/style_traits/Cargo.toml
index b4285c59713..36677df3a43 100644
--- a/components/style_traits/Cargo.toml
+++ b/components/style_traits/Cargo.toml
@@ -10,7 +10,7 @@ name = "style_traits"
path = "lib.rs"
[features]
-servo = ["heapsize", "heapsize_derive", "serde", "servo_atoms", "cssparser/heapsize", "cssparser/serde", "webrender_api"]
+servo = ["serde", "servo_atoms", "cssparser/serde", "webrender_api"]
gecko = []
[dependencies]
@@ -18,8 +18,6 @@ app_units = "0.5"
bitflags = "0.7"
cssparser = "0.22.0"
euclid = "0.15"
-heapsize = {version = "0.4", optional = true}
-heapsize_derive = {version = "0.1", optional = true}
malloc_size_of = { path = "../malloc_size_of" }
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
selectors = { path = "../selectors" }
diff --git a/components/style_traits/cursor.rs b/components/style_traits/cursor.rs
index 3434ddcbebb..28a575f1cca 100644
--- a/components/style_traits/cursor.rs
+++ b/components/style_traits/cursor.rs
@@ -16,9 +16,8 @@ macro_rules! define_cursor {
]
) => {
/// <https://drafts.csswg.org/css-ui/#cursor>
- #[derive(Clone, Copy, Debug, Eq, PartialEq)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(Deserialize, Serialize, HeapSizeOf))]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq)]
+ #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
#[repr(u8)]
#[allow(missing_docs)]
pub enum Cursor {
diff --git a/components/style_traits/lib.rs b/components/style_traits/lib.rs
index e412614397f..98940a5411c 100644
--- a/components/style_traits/lib.rs
+++ b/components/style_traits/lib.rs
@@ -15,10 +15,8 @@ extern crate app_units;
#[macro_use] extern crate bitflags;
#[macro_use] extern crate cssparser;
extern crate euclid;
-#[cfg(feature = "servo")] extern crate heapsize;
-#[cfg(feature = "servo")] #[macro_use] extern crate heapsize_derive;
-#[cfg(feature = "gecko")] extern crate malloc_size_of;
-#[cfg(feature = "gecko")] #[macro_use] extern crate malloc_size_of_derive;
+extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
extern crate selectors;
#[cfg(feature = "servo")] #[macro_use] extern crate serde;
#[cfg(feature = "servo")] extern crate webrender_api;
@@ -41,7 +39,7 @@ pub enum DevicePixel {}
/// Represents a mobile style pinch zoom factor.
/// TODO(gw): Once WR supports pinch zoom, use a type directly from webrender_api.
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(Deserialize, Serialize, HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize, MallocSizeOf))]
pub struct PinchZoomFactor(f32);
impl PinchZoomFactor {
diff --git a/components/style_traits/values.rs b/components/style_traits/values.rs
index 7bd44501ba9..610e2020a3b 100644
--- a/components/style_traits/values.rs
+++ b/components/style_traits/values.rs
@@ -415,7 +415,7 @@ macro_rules! __define_css_keyword_enum__add_optional_traits {
($name: ident [ $( $css: expr => $variant: ident ),+ ]
[ $( $alias: expr => $alias_variant: ident),* ]) => {
__define_css_keyword_enum__actual! {
- $name [ Deserialize, Serialize, HeapSizeOf ]
+ $name [ Deserialize, Serialize, MallocSizeOf ]
[ $( $css => $variant ),+ ]
[ $( $alias => $alias_variant ),* ]
}
@@ -490,9 +490,7 @@ pub mod specified {
/// Whether to allow negative lengths or not.
#[repr(u8)]
- #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
- #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
- #[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd)]
+ #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, PartialOrd)]
pub enum AllowedNumericType {
/// Allow all kind of numeric values.
All,
diff --git a/components/style_traits/viewport.rs b/components/style_traits/viewport.rs
index 13e619e795d..352616d941e 100644
--- a/components/style_traits/viewport.rs
+++ b/components/style_traits/viewport.rs
@@ -23,7 +23,7 @@ define_css_keyword_enum!(Orientation:
///
/// <https://drafts.csswg.org/css-device-adapt/#viewport-desc>
#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(Deserialize, Serialize, HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(Deserialize, Serialize, MallocSizeOf))]
pub struct ViewportConstraints {
/// Width and height:
/// * https://drafts.csswg.org/css-device-adapt/#width-desc
@@ -75,7 +75,7 @@ impl ToCss for ViewportConstraints {
/// <https://drafts.csswg.org/css-device-adapt/#descdef-viewport-zoom>
#[derive(Clone, Copy, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
+#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
pub enum Zoom {
/// A number value.
Number(f32),
diff --git a/components/url/Cargo.toml b/components/url/Cargo.toml
index bc5f4930649..67c9dd3ef89 100644
--- a/components/url/Cargo.toml
+++ b/components/url/Cargo.toml
@@ -10,10 +10,10 @@ name = "servo_url"
path = "lib.rs"
[dependencies]
-heapsize = {version = "0.4"}
-heapsize_derive = {version = "0.1"}
+malloc_size_of = { path = "../malloc_size_of" }
+malloc_size_of_derive = { path = "../malloc_size_of_derive" }
serde = {version = "1.0"}
servo_rand = {path = "../rand"}
-url = {version = "1.2", features = ["heap_size"]}
+url = "1.2"
url_serde = {version = "0.2"}
uuid = {version = "0.5.0", features = ["v4", "serde"]}
diff --git a/components/url/lib.rs b/components/url/lib.rs
index aba2989cb18..b7d61273370 100644
--- a/components/url/lib.rs
+++ b/components/url/lib.rs
@@ -7,8 +7,8 @@
#![crate_name = "servo_url"]
#![crate_type = "rlib"]
-#[macro_use] extern crate heapsize;
-#[macro_use] extern crate heapsize_derive;
+#[macro_use] extern crate malloc_size_of;
+#[macro_use] extern crate malloc_size_of_derive;
#[macro_use] extern crate serde;
extern crate servo_rand;
extern crate url;
@@ -28,8 +28,11 @@ use url::{Url, Position};
pub use url::Host;
-#[derive(Clone, Eq, Hash, HeapSizeOf, Ord, PartialEq, PartialOrd)]
-pub struct ServoUrl(Arc<Url>);
+#[derive(Clone, Eq, Hash, MallocSizeOf, Ord, PartialEq, PartialOrd)]
+pub struct ServoUrl(
+ #[ignore_malloc_size_of = "Arc"]
+ Arc<Url>
+);
impl ServoUrl {
pub fn from_url(url: Url) -> Self {
diff --git a/components/url/origin.rs b/components/url/origin.rs
index 95ebd2b3b02..a9f851f8d5f 100644
--- a/components/url/origin.rs
+++ b/components/url/origin.rs
@@ -11,7 +11,7 @@ use url_serde;
use uuid::Uuid;
/// The origin of an URL
-#[derive(Clone, Debug, Deserialize, Eq, HeapSizeOf, PartialEq, Serialize)]
+#[derive(Clone, Debug, Deserialize, Eq, MallocSizeOf, PartialEq, Serialize)]
pub enum ImmutableOrigin {
/// A globally unique identifier
Opaque(OpaqueOrigin),
@@ -98,13 +98,13 @@ impl ImmutableOrigin {
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct OpaqueOrigin(Uuid);
-known_heap_size!(0, OpaqueOrigin);
+malloc_size_of_is_0!(OpaqueOrigin);
/// A representation of an [origin](https://html.spec.whatwg.org/multipage/#origin-2).
#[derive(Clone, Debug)]
pub struct MutableOrigin(Rc<(ImmutableOrigin, RefCell<Option<Host>>)>);
-known_heap_size!(0, MutableOrigin);
+malloc_size_of_is_0!(MutableOrigin);
impl MutableOrigin {
pub fn new(origin: ImmutableOrigin) -> MutableOrigin {
diff --git a/components/webdriver_server/Cargo.toml b/components/webdriver_server/Cargo.toml
index 7c51bf6a7ea..b120e6ea234 100644
--- a/components/webdriver_server/Cargo.toml
+++ b/components/webdriver_server/Cargo.toml
@@ -24,6 +24,6 @@ rustc-serialize = "0.3.4"
script_traits = {path = "../script_traits"}
servo_config = {path = "../config"}
servo_url = {path = "../url"}
-url = {version = "1.2", features = ["heap_size"]}
+url = "1.2"
uuid = {version = "0.5", features = ["v4"]}
webdriver = "0.22"
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs
index 924c629ae51..8ee26bd398a 100644
--- a/ports/geckolib/glue.rs
+++ b/ports/geckolib/glue.rs
@@ -811,7 +811,7 @@ pub extern "C" fn Servo_Element_SizeOfExcludingThisAndCVs(malloc_size_of: GeckoM
if let Some(data) = borrow {
let have_seen_ptr = move |ptr| { unsafe { Gecko_HaveSeenPtr(seen_ptrs, ptr) } };
let mut ops = MallocSizeOfOps::new(malloc_size_of.unwrap(),
- malloc_enclosing_size_of.unwrap(),
+ Some(malloc_enclosing_size_of.unwrap()),
Some(Box::new(have_seen_ptr)));
(*data).size_of_excluding_cvs(&mut ops)
} else {
@@ -1124,7 +1124,7 @@ pub extern "C" fn Servo_StyleSheet_SizeOfIncludingThis(
let global_style_data = &*GLOBAL_STYLE_DATA;
let guard = global_style_data.shared_lock.read();
let mut ops = MallocSizeOfOps::new(malloc_size_of.unwrap(),
- malloc_enclosing_size_of.unwrap(),
+ Some(malloc_enclosing_size_of.unwrap()),
None);
StylesheetContents::as_arc(&sheet).size_of(&guard, &mut ops)
}
@@ -3973,7 +3973,7 @@ pub extern "C" fn Servo_StyleSet_AddSizeOfExcludingThis(
) {
let data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
let mut ops = MallocSizeOfOps::new(malloc_size_of.unwrap(),
- malloc_enclosing_size_of.unwrap(),
+ Some(malloc_enclosing_size_of.unwrap()),
None);
let sizes = unsafe { sizes.as_mut() }.unwrap();
data.add_size_of(&mut ops, sizes);
@@ -3986,7 +3986,7 @@ pub extern "C" fn Servo_UACache_AddSizeOf(
sizes: *mut ServoStyleSetSizes
) {
let mut ops = MallocSizeOfOps::new(malloc_size_of.unwrap(),
- malloc_enclosing_size_of.unwrap(),
+ Some(malloc_enclosing_size_of.unwrap()),
None);
let sizes = unsafe { sizes.as_mut() }.unwrap();
add_size_of_ua_cache(&mut ops, sizes);
diff --git a/tests/unit/net/Cargo.toml b/tests/unit/net/Cargo.toml
index 6c50275cfad..05c97b24233 100644
--- a/tests/unit/net/Cargo.toml
+++ b/tests/unit/net/Cargo.toml
@@ -24,5 +24,5 @@ profile_traits = {path = "../../../components/profile_traits"}
servo_config = {path = "../../../components/config"}
time = "0.1"
unicase = "1.0"
-url = {version = "1.2", features = ["heap_size"]}
+url = "1.2"
servo_url = {path = "../../../components/url"}