Expand description
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. 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 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.
HashSetandHashMap. (This relies on the heap allocator having suitable support, which mozjemalloc has.) - It allows handling of types like
RcandArcby providing traits that are different to the ones for non-graph structures.
Suggested uses are as follows.
-
When possible, use the
MallocSizeOftrait. (Deriving support is provided by themalloc_size_of_derivecrate.) -
If you need an additional synchronization argument, provide a function that is like the standard trait method, but with the extra argument.
-
If you need multiple measurements for a type, provide a function named
add_size_ofthat takes a mutable reference to a struct that contains the multiple measurement fields. -
When deep measurement (via
MallocSizeOf) cannot be implemented for a type, shallow measurement (viaMallocShallowSizeOf) in combination with iteration can be a useful substitute. -
RcandArcare always tricky, which is whyMallocSizeOfis not (and should not be) implemented for them. -
If an
RcorArcis known to be a “primary” reference and can always be measured, it should be measured via theMallocUnconditionalSizeOftrait. -
If an
RcorArcshould be measured only if it hasn’t been seen before, it should be measured via theMallocConditionalSizeOftrait. -
Using universal function call syntax is a good idea when measuring boxed fields in structs, because it makes it clear that the Box is being measured as well as the thing it points to. E.g.
<Box<_> as MallocSizeOf>::size_of(field, ops).Note: WebRender has a reduced fork of this crate, so that we can avoid publishing this crate on crates.io.
Macros§
- malloc_
size_ 🔒of_ hash_ map - malloc_
size_ 🔒of_ hash_ set - malloc_
size_ of_ is_ 0 - For use on types where size_of() returns 0.
Structs§
- Malloc
Size OfOps - Operations used when measuring heap usage of data structures.
- Measurable
- Measurable that defers to inner value and used to verify MallocSizeOf implementation in a struct.
Traits§
- Malloc
Conditional Shallow Size Of MallocConditionalSizeOfcombined withMallocShallowSizeOf.- Malloc
Conditional Size Of - Like
MallocSizeOf, but only measures if the value hasn’t already been measured. For use with types likeRcandArcwhen appropriate (e.g. when there is no “primary” reference). - Malloc
Shallow Size Of - Trait for measuring the “shallow” heap usage of a container.
- Malloc
Size Of - Trait for measuring the “deep” heap usage of a data structure. This is the most commonly-used of the traits.
- Malloc
Unconditional Shallow Size Of MallocUnconditionalSizeOfcombined withMallocShallowSizeOf.- Malloc
Unconditional Size Of - Like
MallocSizeOf, but with a different name so it cannot be used accidentally with derive(MallocSizeOf). For use with types likeRcandArcwhen appropriate (e.g. when measuring a “primary” reference).
Type Aliases§
- Void
PtrTo 🔒Bool FnMut - A closure implementing a stateful predicate on pointers.
- Void
PtrTo 🔒Size Fn - A C function that takes a pointer to a heap allocation and returns its size.