about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2014-05-11 17:41:15 -0400
committerDaniel Micay <danielmicay@gmail.com>2014-05-11 17:41:36 -0400
commit32988db2bd82edc92f54c2d32fdcbd748ab78cd4 (patch)
tree1c6fe7c4ae230a77926d9108604867269a1ddaac /src/libstd
parentf3de28a920b9a9f2b9418b305dfeb30995d2c6d4 (diff)
downloadrust-32988db2bd82edc92f54c2d32fdcbd748ab78cd4.tar.gz
rust-32988db2bd82edc92f54c2d32fdcbd748ab78cd4.zip
heap: add a way to print allocator statistics
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/rt/heap.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/libstd/rt/heap.rs b/src/libstd/rt/heap.rs
index fc62b3f12fb..b56ba75e385 100644
--- a/src/libstd/rt/heap.rs
+++ b/src/libstd/rt/heap.rs
@@ -12,8 +12,9 @@
 // FIXME: #13996: need a way to mark the `allocate` and `reallocate` return values as `noalias`
 
 use intrinsics::{abort, cttz32};
-use libc::{c_int, c_void, size_t};
-use ptr::RawPtr;
+use libc::{c_char, c_int, c_void, size_t};
+use ptr::{RawPtr, mut_null, null};
+use option::{None, Option};
 
 #[link(name = "jemalloc", kind = "static")]
 extern {
@@ -22,6 +23,9 @@ extern {
     fn je_xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
     fn je_dallocx(ptr: *mut c_void, flags: c_int);
     fn je_nallocx(size: size_t, flags: c_int) -> size_t;
+    fn je_malloc_stats_print(write_cb: Option<extern "C" fn(cbopaque: *mut c_void, *c_char)>,
+                             cbopaque: *mut c_void,
+                             opts: *c_char);
 }
 
 // -lpthread needs to occur after -ljemalloc, the earlier argument isn't enough
@@ -99,6 +103,16 @@ pub fn usable_size(size: uint, align: uint) -> uint {
     unsafe { je_nallocx(size as size_t, mallocx_align(align)) as uint }
 }
 
+/// Print implementation-defined allocator statistics.
+///
+/// These statistics may be inconsistent if other threads use the allocator during the call.
+#[unstable]
+pub fn stats_print() {
+    unsafe {
+        je_malloc_stats_print(None, mut_null(), null())
+    }
+}
+
 /// The allocator for unique pointers.
 #[cfg(stage0)]
 #[lang="exchange_malloc"]