Skip to content

Commit

Permalink
Replace all uses of the heapsize crate with malloc_size_of.
Browse files Browse the repository at this point in the history
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`.
  • Loading branch information
nnethercote committed Oct 18, 2017
1 parent 421baa8 commit 4506f0d
Show file tree
Hide file tree
Showing 269 changed files with 1,419 additions and 1,522 deletions.
82 changes: 32 additions & 50 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion components/atoms/Cargo.toml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ build = "build.rs"
path = "lib.rs" path = "lib.rs"


[dependencies] [dependencies]
string_cache = {version = "0.6", features = ["heapsize"]} string_cache = {version = "0.6"}


[build-dependencies] [build-dependencies]
string_cache_codegen = "0.4" string_cache_codegen = "0.4"
4 changes: 2 additions & 2 deletions components/canvas_traits/Cargo.toml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ path = "lib.rs"
[dependencies] [dependencies]
cssparser = "0.22.0" cssparser = "0.22.0"
euclid = "0.15" euclid = "0.15"
heapsize = "0.4"
heapsize_derive = "0.1"
ipc-channel = "0.9" ipc-channel = "0.9"
lazy_static = "0.2" lazy_static = "0.2"
malloc_size_of = { path = "../malloc_size_of" }
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
nonzero = {path = "../nonzero"} nonzero = {path = "../nonzero"}
offscreen_gl_context = { version = "0.11", features = ["serde"] } offscreen_gl_context = { version = "0.11", features = ["serde"] }
serde = "1.0" serde = "1.0"
Expand Down
16 changes: 8 additions & 8 deletions components/canvas_traits/canvas.rs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -82,13 +82,13 @@ pub enum FromScriptMsg {
SendPixels(IpcSender<Option<Vec<u8>>>), SendPixels(IpcSender<Option<Vec<u8>>>),
} }


#[derive(Clone, Deserialize, HeapSizeOf, Serialize)] #[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct CanvasGradientStop { pub struct CanvasGradientStop {
pub offset: f64, pub offset: f64,
pub color: RGBA, pub color: RGBA,
} }


#[derive(Clone, Deserialize, HeapSizeOf, Serialize)] #[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct LinearGradientStyle { pub struct LinearGradientStyle {
pub x0: f64, pub x0: f64,
pub y0: f64, pub y0: f64,
Expand All @@ -110,7 +110,7 @@ impl LinearGradientStyle {
} }
} }


#[derive(Clone, Deserialize, HeapSizeOf, Serialize)] #[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct RadialGradientStyle { pub struct RadialGradientStyle {
pub x0: f64, pub x0: f64,
pub y0: f64, pub y0: f64,
Expand Down Expand Up @@ -165,7 +165,7 @@ pub enum FillOrStrokeStyle {
Surface(SurfaceStyle), Surface(SurfaceStyle),
} }


#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)] #[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum LineCapStyle { pub enum LineCapStyle {
Butt = 0, Butt = 0,
Round = 1, Round = 1,
Expand All @@ -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 { pub enum LineJoinStyle {
Round = 0, Round = 0,
Bevel = 1, Bevel = 1,
Expand Down Expand Up @@ -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 { pub enum CompositionStyle {
SrcIn, SrcIn,
SrcOut, SrcOut,
Expand Down Expand Up @@ -281,7 +281,7 @@ impl CompositionStyle {
} }
} }


#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)] #[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum BlendingStyle { pub enum BlendingStyle {
Multiply, Multiply,
Screen, Screen,
Expand Down Expand Up @@ -347,7 +347,7 @@ impl BlendingStyle {
} }
} }


#[derive(Clone, Copy, Deserialize, HeapSizeOf, PartialEq, Serialize)] #[derive(Clone, Copy, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum CompositionOrBlending { pub enum CompositionOrBlending {
Composition(CompositionStyle), Composition(CompositionStyle),
Blending(BlendingStyle), Blending(BlendingStyle),
Expand Down
4 changes: 2 additions & 2 deletions components/canvas_traits/lib.rs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@


extern crate cssparser; extern crate cssparser;
extern crate euclid; extern crate euclid;
extern crate heapsize;
#[macro_use] extern crate heapsize_derive;
extern crate ipc_channel; extern crate ipc_channel;
#[macro_use] extern crate lazy_static; #[macro_use] extern crate lazy_static;
extern crate malloc_size_of;
#[macro_use] extern crate malloc_size_of_derive;
extern crate nonzero; extern crate nonzero;
extern crate offscreen_gl_context; extern crate offscreen_gl_context;
#[macro_use] extern crate serde; #[macro_use] extern crate serde;
Expand Down
17 changes: 7 additions & 10 deletions components/canvas_traits/webgl.rs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub struct WebGLCreateContextResult {
pub share_mode: WebGLContextShareMode, pub share_mode: WebGLContextShareMode,
} }


#[derive(Clone, Copy, Deserialize, HeapSizeOf, Serialize)] #[derive(Clone, Copy, Deserialize, MallocSizeOf, Serialize)]
pub enum WebGLContextShareMode { pub enum WebGLContextShareMode {
/// Fast: a shared texture_id is used in WebRender. /// Fast: a shared texture_id is used in WebRender.
SharedTexture, SharedTexture,
Expand All @@ -73,10 +73,10 @@ pub enum WebGLContextShareMode {
} }


/// Helper struct to send WebGLCommands to a specific WebGLContext. /// Helper struct to send WebGLCommands to a specific WebGLContext.
#[derive(Clone, Deserialize, HeapSizeOf, Serialize)] #[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
pub struct WebGLMsgSender { pub struct WebGLMsgSender {
ctx_id: WebGLContextId, ctx_id: WebGLContextId,
#[ignore_heap_size_of = "channels are hard"] #[ignore_malloc_size_of = "channels are hard"]
sender: WebGLChan, sender: WebGLChan,
} }


Expand Down Expand Up @@ -313,8 +313,8 @@ macro_rules! define_resource_id {
} }
} }


impl ::heapsize::HeapSizeOf for $name { impl ::malloc_size_of::MallocSizeOf for $name {
fn heap_size_of_children(&self) -> usize { 0 } fn size_of(&self, _ops: &mut ::malloc_size_of::MallocSizeOfOps) -> usize { 0 }
} }
} }
} }
Expand All @@ -327,13 +327,10 @@ define_resource_id!(WebGLProgramId);
define_resource_id!(WebGLShaderId); define_resource_id!(WebGLShaderId);
define_resource_id!(WebGLVertexArrayId); 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); 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)] #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
pub enum WebGLError { pub enum WebGLError {
InvalidEnum, InvalidEnum,
Expand Down
4 changes: 2 additions & 2 deletions components/devtools_traits/Cargo.toml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ path = "lib.rs"


[dependencies] [dependencies]
bitflags = "0.7" bitflags = "0.7"
heapsize = "0.4"
heapsize_derive = "0.1"
hyper = "0.10" hyper = "0.10"
hyper_serde = "0.7" hyper_serde = "0.7"
ipc-channel = "0.9" ipc-channel = "0.9"
malloc_size_of = { path = "../malloc_size_of" }
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
msg = {path = "../msg"} msg = {path = "../msg"}
serde = "1.0" serde = "1.0"
servo_url = {path = "../url"} servo_url = {path = "../url"}
Expand Down
10 changes: 5 additions & 5 deletions components/devtools_traits/lib.rs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@


#[macro_use] #[macro_use]
extern crate bitflags; extern crate bitflags;
extern crate heapsize;
#[macro_use] extern crate heapsize_derive;
extern crate hyper; extern crate hyper;
extern crate ipc_channel; extern crate ipc_channel;
extern crate malloc_size_of;
#[macro_use] extern crate malloc_size_of_derive;
extern crate msg; extern crate msg;
#[macro_use] extern crate serde; #[macro_use] extern crate serde;
extern crate servo_url; extern crate servo_url;
Expand All @@ -40,7 +40,7 @@ pub struct DevtoolsPageInfo {
pub url: ServoUrl, pub url: ServoUrl,
} }


#[derive(Clone, Debug, Deserialize, HeapSizeOf, Serialize)] #[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct CSSError { pub struct CSSError {
pub filename: String, pub filename: String,
pub line: u32, pub line: u32,
Expand Down Expand Up @@ -144,7 +144,7 @@ pub struct TimelineMarker {
pub end_stack: Option<Vec<()>>, 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 { pub enum TimelineMarkerType {
Reflow, Reflow,
DOMEvent, DOMEvent,
Expand Down Expand Up @@ -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); pub struct WorkerId(pub u32);
2 changes: 1 addition & 1 deletion components/dom_struct/lib.rs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub fn dom_struct(args: TokenStream, input: TokenStream) -> TokenStream {
panic!("#[dom_struct] takes no arguments"); panic!("#[dom_struct] takes no arguments");
} }
let attributes = quote! { let attributes = quote! {
#[derive(DenyPublicFields, DomObject, HeapSizeOf, JSTraceable)] #[derive(DenyPublicFields, DomObject, JSTraceable, MallocSizeOf)]
#[must_root] #[must_root]
#[repr(C)] #[repr(C)]
}; };
Expand Down
3 changes: 2 additions & 1 deletion components/geometry/Cargo.toml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ path = "lib.rs"
[dependencies] [dependencies]
app_units = "0.5" app_units = "0.5"
euclid = "0.15" euclid = "0.15"
heapsize = "0.4" malloc_size_of = { path = "../malloc_size_of" }
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
7 changes: 3 additions & 4 deletions components/geometry/lib.rs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


extern crate app_units; extern crate app_units;
extern crate euclid; 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 app_units::{Au, MAX_AU, MIN_AU};
use euclid::{Point2D, Rect, Size2D}; use euclid::{Point2D, Rect, Size2D};
Expand All @@ -24,11 +25,9 @@ use euclid::{Point2D, Rect, Size2D};
/// ///
/// The ratio between DeviceIndependentPixel and DevicePixel for a given display be found by calling /// The ratio between DeviceIndependentPixel and DevicePixel for a given display be found by calling
/// `servo::windowing::WindowMethods::hidpi_factor`. /// `servo::windowing::WindowMethods::hidpi_factor`.
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug, MallocSizeOf)]
pub enum DeviceIndependentPixel {} pub enum DeviceIndependentPixel {}


known_heap_size!(0, DeviceIndependentPixel);

// An Au is an "App Unit" and represents 1/60th of a CSS pixel. It was // 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. // 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. // See https://bugzilla.mozilla.org/show_bug.cgi?id=177805 for more info.
Expand Down
4 changes: 2 additions & 2 deletions components/gfx/Cargo.toml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ fnv = "1.0"
fontsan = {git = "https://github.com/servo/fontsan"} fontsan = {git = "https://github.com/servo/fontsan"}
gfx_traits = {path = "../gfx_traits"} gfx_traits = {path = "../gfx_traits"}
harfbuzz-sys = "0.1" harfbuzz-sys = "0.1"
heapsize = "0.4"
heapsize_derive = "0.1"
ipc-channel = "0.9" ipc-channel = "0.9"
lazy_static = "0.2" lazy_static = "0.2"
libc = "0.2" libc = "0.2"
log = "0.3.5" log = "0.3.5"
malloc_size_of = { path = "../malloc_size_of" }
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
msg = {path = "../msg"} msg = {path = "../msg"}
net_traits = {path = "../net_traits"} net_traits = {path = "../net_traits"}
ordered-float = "0.4" ordered-float = "0.4"
Expand Down
Loading

0 comments on commit 4506f0d

Please sign in to comment.