Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upBug 1409255 - Replace all uses of the heapsize crate with malloc_size_of #18920
Conversation
highfive
commented
Oct 17, 2017
|
Heads up! This PR modifies the following files:
|
highfive
commented
Oct 17, 2017
|
|
CC @nnethercote I split the long line to fix tidy. Nit: @bors-servo try Reviewed 269 of 269 files at r1, 1 of 1 files at r2. components/malloc_size_of/lib.rs, line 345 at r1 (raw file):
Element 0 is not necessarily at the start. components/script/dom/eventtarget.rs, line 121 at r1 (raw file):
This doesn’t apply anymore, does it? Shouldn’t this be a Comments from Reviewable |
Bug 1409255 - Replace all uses of the heapsize crate with malloc_size_of Patch from Nicholas Nethercote on https://bugzilla.mozilla.org/show_bug.cgi?id=1409255 ---- 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`. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18920) <!-- Reviewable:end -->
|
|
|
|
|
Looks like (in AppVeyor) this is missing some imports on Windows: error[E0425]: cannot find function `GetProcessHeap` in this scope
--> C:\projects\servo\components\malloc_size_of\lib.rs:163:16
|
163 | let heap = GetProcessHeap();
| ^^^^^^^^^^^^^^ not found in this scope
error[E0425]: cannot find function `HeapValidate` in this scope
--> C:\projects\servo\components\malloc_size_of\lib.rs:165:8
|
165 | if HeapValidate(heap, 0, ptr) == 0 {
| ^^^^^^^^^^^^ not found in this scope
error[E0425]: cannot find function `HeapSize` in this scope
--> C:\projects\servo\components\malloc_size_of\lib.rs:169:5
|
169 | HeapSize(heap, 0, ptr) as usize
| ^^^^^^^^ not found in this scope
error: aborting due to 3 previous errors
error: Could not compile `malloc_size_of`.heapsize has this dependency: [target.'cfg(windows)'.dependencies]
kernel32-sys = "0.2.1" |
I filed #18932 to fix that. |
|
|
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`.
|
#18938 has the updated version of this change. |
|
Re-opening temporarily to get Reviewable to show a diff. |
SimonSapin commentedOct 17, 2017
•
edited
Patch from Nicholas Nethercote on https://bugzilla.mozilla.org/show_bug.cgi?id=1409255
Servo currently uses
heapsize, but Stylo/Gecko usemalloc_size_of.malloc_size_ofis better -- it handles various cases thatheapsizedoes not-- so this patch changes Servo to use
malloc_size_of.This patch makes the following changes to the
malloc_size_ofcrate.Adds
MallocSizeOftrait implementations for numerous types, some built-in(e.g.
VecDeque), some external and Servo-only (e.g.string_cache).Makes
enclosing_size_of_opoptional, because vanilla jemalloc doesn'tsupport that operation.
For
HashSet/HashMap, falls back to a computed estimate whenenclosing_size_of_opisn't available.Adds an extern "C"
malloc_size_offunction that does the actual heapmeasurement; this is based on the same functions from the
heapsizecrate.This patch makes the following changes elsewhere.
Converts all the uses of
heapsizeto instead usemalloc_size_of.Disables the "heapsize"/"heap_size" feature for the external crates that
provide it.
Removes the
HeapSizeOfimplementation fromhashglobe.Adds
ignoreannotations to a fewRc/Arc, becausemalloc_size_ofdoesn't derive those types, unlike
heapsize.This change is