aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock2
-rw-r--r--crates/ra_prof/Cargo.toml2
-rw-r--r--crates/ra_prof/src/memory_usage.rs25
3 files changed, 19 insertions, 10 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 604233a59..4a8271f09 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1198,8 +1198,10 @@ name = "ra_prof"
1198version = "0.1.0" 1198version = "0.1.0"
1199dependencies = [ 1199dependencies = [
1200 "backtrace", 1200 "backtrace",
1201 "cfg-if",
1201 "jemalloc-ctl", 1202 "jemalloc-ctl",
1202 "jemallocator", 1203 "jemallocator",
1204 "libc",
1203 "mimalloc", 1205 "mimalloc",
1204 "once_cell", 1206 "once_cell",
1205 "ra_arena", 1207 "ra_arena",
diff --git a/crates/ra_prof/Cargo.toml b/crates/ra_prof/Cargo.toml
index b3d52985a..2e60858f1 100644
--- a/crates/ra_prof/Cargo.toml
+++ b/crates/ra_prof/Cargo.toml
@@ -14,6 +14,8 @@ ra_arena = { path = "../ra_arena" }
14once_cell = "1.3.1" 14once_cell = "1.3.1"
15backtrace = { version = "0.3.44", optional = true } 15backtrace = { version = "0.3.44", optional = true }
16mimalloc = { version = "0.1.19", default-features = false, optional = true } 16mimalloc = { version = "0.1.19", default-features = false, optional = true }
17cfg-if = "0.1.10"
18libc = "0.2.73"
17 19
18[target.'cfg(not(target_env = "msvc"))'.dependencies] 20[target.'cfg(not(target_env = "msvc"))'.dependencies]
19jemallocator = { version = "0.3.2", optional = true } 21jemallocator = { version = "0.3.2", optional = true }
diff --git a/crates/ra_prof/src/memory_usage.rs b/crates/ra_prof/src/memory_usage.rs
index 9768f656c..b1858b06f 100644
--- a/crates/ra_prof/src/memory_usage.rs
+++ b/crates/ra_prof/src/memory_usage.rs
@@ -1,5 +1,6 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use cfg_if::cfg_if;
3use std::fmt; 4use std::fmt;
4 5
5pub struct MemoryUsage { 6pub struct MemoryUsage {
@@ -8,19 +9,23 @@ pub struct MemoryUsage {
8} 9}
9 10
10impl MemoryUsage { 11impl MemoryUsage {
11 #[cfg(all(feature = "jemalloc", not(target_env = "msvc")))]
12 pub fn current() -> MemoryUsage { 12 pub fn current() -> MemoryUsage {
13 jemalloc_ctl::epoch::advance().unwrap(); 13 cfg_if! {
14 MemoryUsage { 14 if #[cfg(all(feature = "jemalloc", not(target_env = "msvc")))] {
15 allocated: Bytes(jemalloc_ctl::stats::allocated::read().unwrap()), 15 jemalloc_ctl::epoch::advance().unwrap();
16 resident: Bytes(jemalloc_ctl::stats::resident::read().unwrap()), 16 MemoryUsage {
17 allocated: Bytes(jemalloc_ctl::stats::allocated::read().unwrap()),
18 resident: Bytes(jemalloc_ctl::stats::resident::read().unwrap()),
19 }
20 } else if #[cfg(target_os = "linux")] {
21 // Note: This is incredibly slow.
22 let alloc = unsafe { libc::mallinfo() }.uordblks as u32 as usize;
23 MemoryUsage { allocated: Bytes(alloc), resident: Bytes(0) }
24 } else {
25 MemoryUsage { allocated: Bytes(0), resident: Bytes(0) }
26 }
17 } 27 }
18 } 28 }
19
20 #[cfg(any(not(feature = "jemalloc"), target_env = "msvc"))]
21 pub fn current() -> MemoryUsage {
22 MemoryUsage { allocated: Bytes(0), resident: Bytes(0) }
23 }
24} 29}
25 30
26impl fmt::Display for MemoryUsage { 31impl fmt::Display for MemoryUsage {