aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api')
-rw-r--r--crates/ra_ide_api/Cargo.toml6
-rw-r--r--crates/ra_ide_api/src/lib.rs6
-rw-r--r--crates/ra_ide_api/src/status.rs54
3 files changed, 2 insertions, 64 deletions
diff --git a/crates/ra_ide_api/Cargo.toml b/crates/ra_ide_api/Cargo.toml
index 9bf5dd6e6..5bd768817 100644
--- a/crates/ra_ide_api/Cargo.toml
+++ b/crates/ra_ide_api/Cargo.toml
@@ -16,9 +16,6 @@ unicase = "2.2.0"
16superslice = "1.0.0" 16superslice = "1.0.0"
17rand = "0.6.5" 17rand = "0.6.5"
18 18
19jemallocator = { version = "0.1.9", optional = true }
20jemalloc-ctl = { version = "0.2.0", optional = true }
21
22ra_syntax = { path = "../ra_syntax" } 19ra_syntax = { path = "../ra_syntax" }
23ra_text_edit = { path = "../ra_text_edit" } 20ra_text_edit = { path = "../ra_text_edit" }
24ra_db = { path = "../ra_db" } 21ra_db = { path = "../ra_db" }
@@ -36,6 +33,3 @@ version = "0.9.0"
36# Disable `fork` feature to allow compiling on webassembly 33# Disable `fork` feature to allow compiling on webassembly
37default-features = false 34default-features = false
38features = ["std", "bit-set", "break-dead-code"] 35features = ["std", "bit-set", "break-dead-code"]
39
40[features]
41jemalloc = [ "jemallocator", "jemalloc-ctl" ]
diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs
index e61d5627e..28a74c003 100644
--- a/crates/ra_ide_api/src/lib.rs
+++ b/crates/ra_ide_api/src/lib.rs
@@ -74,12 +74,6 @@ pub use crate::{
74pub use ra_db::{Canceled, CrateGraph, CrateId, FileId, FilePosition, FileRange, SourceRootId, Edition}; 74pub use ra_db::{Canceled, CrateGraph, CrateId, FileId, FilePosition, FileRange, SourceRootId, Edition};
75pub use hir::Documentation; 75pub use hir::Documentation;
76 76
77// We use jemalloc mainly to get heap usage statistics, actual performance
78// difference is not measures.
79#[cfg(feature = "jemalloc")]
80#[global_allocator]
81static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc;
82
83pub type Cancelable<T> = Result<T, Canceled>; 77pub type Cancelable<T> = Result<T, Canceled>;
84 78
85#[derive(Debug)] 79#[derive(Debug)]
diff --git a/crates/ra_ide_api/src/status.rs b/crates/ra_ide_api/src/status.rs
index 0cdeb15eb..ce25f4a87 100644
--- a/crates/ra_ide_api/src/status.rs
+++ b/crates/ra_ide_api/src/status.rs
@@ -9,6 +9,7 @@ use ra_db::{
9 FileTextQuery, SourceRootId, 9 FileTextQuery, SourceRootId,
10 salsa::{Database, debug::{DebugQueryTable, TableEntry}}, 10 salsa::{Database, debug::{DebugQueryTable, TableEntry}},
11}; 11};
12use ra_prof::{Bytes, memory_usage};
12use hir::MacroFile; 13use hir::MacroFile;
13 14
14use crate::{ 15use crate::{
@@ -34,7 +35,7 @@ pub(crate) fn status(db: &RootDatabase) -> String {
34 symbols_stats, 35 symbols_stats,
35 syntax_tree_stats, 36 syntax_tree_stats,
36 macro_syntax_tree_stats, 37 macro_syntax_tree_stats,
37 MemoryStats::current(), 38 memory_usage(),
38 db.last_gc.elapsed().as_secs(), 39 db.last_gc.elapsed().as_secs(),
39 ) 40 )
40} 41}
@@ -138,54 +139,3 @@ impl FromIterator<TableEntry<SourceRootId, Arc<SymbolIndex>>> for LibrarySymbols
138 res 139 res
139 } 140 }
140} 141}
141
142struct MemoryStats {
143 allocated: Bytes,
144 resident: Bytes,
145}
146
147impl MemoryStats {
148 #[cfg(feature = "jemalloc")]
149 fn current() -> MemoryStats {
150 jemalloc_ctl::epoch().unwrap();
151 MemoryStats {
152 allocated: Bytes(jemalloc_ctl::stats::allocated().unwrap()),
153 resident: Bytes(jemalloc_ctl::stats::resident().unwrap()),
154 }
155 }
156
157 #[cfg(not(feature = "jemalloc"))]
158 fn current() -> MemoryStats {
159 MemoryStats { allocated: Bytes(0), resident: Bytes(0) }
160 }
161}
162
163impl fmt::Display for MemoryStats {
164 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
165 write!(fmt, "{} allocated {} resident", self.allocated, self.resident,)
166 }
167}
168
169#[derive(Default)]
170struct Bytes(usize);
171
172impl fmt::Display for Bytes {
173 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
174 let bytes = self.0;
175 if bytes < 4096 {
176 return write!(f, "{} bytes", bytes);
177 }
178 let kb = bytes / 1024;
179 if kb < 4096 {
180 return write!(f, "{}kb", kb);
181 }
182 let mb = kb / 1024;
183 write!(f, "{}mb", mb)
184 }
185}
186
187impl std::ops::AddAssign<usize> for Bytes {
188 fn add_assign(&mut self, x: usize) {
189 self.0 += x;
190 }
191}